I am trying to understand what is the domain for denotational semantics.
Right now the way I understand denotational semantics is that given some syntax of a program that maps to some mathematical object that represents its meaning. e.g. for example give some arithmetic expression AExp the denotation $[\_]:AExp \to (State \rightharpoondown Int)$ :
$$ [ 1 + x ]\sigma = 1+x $$
if the state is $\sigma = \{ x:2\}$ then:
$$ [ 1 + x ]\sigma = 3 $$
So indeed given the syntax AExp using the state we can fully determine what the integer should be returned.
I also understand the denotations for statements $[\_]:State \rightharpoondown State $ which makes a lot of sense since that states the state of the program to the next after executing some code in the statement. e.g. $[\{ \}] = 1_{identity}$ the empty statement does not change the state so:
$$ [\{ \}](\sigma) = [\{ \}]\sigma = 1_{identity}(\sigma) = \sigma $$
But I can't figure out what the type should be for the denotation for identifiers. From the notes I am reading CS522 I see this:
$$ x\in Identifier \implies [\sigma] = \sigma(x) $$
which intuitively makes sense but I am having difficulties matching it to the fact that denotaitons should be CPO (Complete Partial Sets). How is the above a CPO? (or the poset, the technicality of existence of LUB/sumpremum is not that important to me). I can't see the POSET.
I guess I am not 100% how the other two are also CPOs...any enlightening comments?