src/HOLCF/IMP/Denotational.thy
changeset 10835 f4745d77e620
parent 9247 ad9f986616de
child 12032 0f6417c9a187
equal deleted inserted replaced
10834:a7897aebbffc 10835:f4745d77e620
     8 
     8 
     9 Denotational = HOLCF + Natural +
     9 Denotational = HOLCF + Natural +
    10 
    10 
    11 constdefs
    11 constdefs
    12    dlift :: "(('a::term) discr -> 'b::pcpo) => ('a lift -> 'b)"
    12    dlift :: "(('a::term) discr -> 'b::pcpo) => ('a lift -> 'b)"
    13   "dlift f == (LAM x. case x of Undef => UU | Def(y) => f`(Discr y))"
    13   "dlift f == (LAM x. case x of Undef => UU | Def(y) => f$(Discr y))"
    14 
    14 
    15 consts D :: "com => state discr -> state lift"
    15 consts D :: "com => state discr -> state lift"
    16 
    16 
    17 primrec
    17 primrec
    18   "D(SKIP) = (LAM s. Def(undiscr s))"
    18   "D(SKIP) = (LAM s. Def(undiscr s))"
    19   "D(X :== a) = (LAM s. Def((undiscr s)[X ::= a(undiscr s)]))"
    19   "D(X :== a) = (LAM s. Def((undiscr s)[X ::= a(undiscr s)]))"
    20   "D(c0 ; c1) = (dlift(D c1) oo (D c0))"
    20   "D(c0 ; c1) = (dlift(D c1) oo (D c0))"
    21   "D(IF b THEN c1 ELSE c2) =
    21   "D(IF b THEN c1 ELSE c2) =
    22 	(LAM s. if b(undiscr s) then (D c1)`s else (D c2)`s)"
    22 	(LAM s. if b(undiscr s) then (D c1)$s else (D c2)$s)"
    23   "D(WHILE b DO c) =
    23   "D(WHILE b DO c) =
    24 	fix`(LAM w s. if b(undiscr s) then (dlift w)`((D c)`s)
    24 	fix$(LAM w s. if b(undiscr s) then (dlift w)$((D c)$s)
    25                       else Def(undiscr s))"
    25                       else Def(undiscr s))"
    26 
    26 
    27 end
    27 end