This section presents a constructive denotational semantics theory for a simple program language where meaning is given as a stream of states. The following definitions and theorems illustrate this library.
The data type Program is built from a dozen type definitions like those which follow.
Atomic_stmt == Abort | Skip | Assignment
Program == (depth:N # Statement(depth))
Statement(<d>) == 
     ind(<d>; x,y.void; void; x,T. Atomic_stmt |
         (T#T) *concat* | (expr#T) *do loop* | 
         expr#T#T *if then else*)
The type for stream of states, S, is defined below. Note that the ind form in the definition of Statement approximates a type of trees, while N->State approximates a stream of states. The intended meaning for S is that given an initial state, its value on n is the program state after executing n steps.
State* == Identifier -> Value
Done     == {x:atom | x="done" in atom}
State    == State* | Done
<st:State> terminated == 
     decide(<st>; u.void; u.int)
S        == 
     {f: State -> N -> State |
     All a:State, n:N. 
	f(a)(n) terminated => f(a)(n+1) terminated}
Figure 
 presents the various meaning functions as extracted objects. Using these definitions, one can define a meaning function,  M, for programs.  This is done in figure 
in the definition of  M, the meaning function for programs.
With  M one can reason about programs as well as executing them directly using the evaluation mechanism.
  
Figure: A Constructive Theory of Denotational Semantics
  
Figure: A Constructive Meaning Function for Programs