author | clasohm |
Tue, 24 Oct 1995 14:59:17 +0100 | |
changeset 251 | f04b33ce250f |
parent 249 | 492493334e0f |
permissions | -rw-r--r-- |
132 | 1 |
(* Title: HOL/IMP/Denotation.thy |
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
2 |
ID: $Id$ |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
3 |
Author: Heiko Loetzbeyer & Robert Sandner, TUM |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
4 |
Copyright 1994 TUM |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
5 |
|
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
6 |
Denotational semantics of expressions & commands |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
7 |
*) |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
8 |
|
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
9 |
Denotation = Com + |
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
10 |
|
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
11 |
types com_den = "(state*state)set" |
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
12 |
consts |
132 | 13 |
A :: "aexp => state => nat" |
14 |
B :: "bexp => state => bool" |
|
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
15 |
C :: "com => com_den" |
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
16 |
Gamma :: "[bexp,com_den] => (com_den => com_den)" |
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
17 |
|
137 | 18 |
primrec A aexp |
138 | 19 |
A_nat "A(N(n)) = (%s. n)" |
20 |
A_loc "A(X(x)) = (%s. s(x))" |
|
21 |
A_op1 "A(Op1(f,a)) = (%s. f(A(a,s)))" |
|
22 |
A_op2 "A(Op2(f,a0,a1)) = (%s. f(A(a0,s),A(a1,s)))" |
|
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
23 |
|
137 | 24 |
primrec B bexp |
138 | 25 |
B_true "B(true) = (%s. True)" |
26 |
B_false "B(false) = (%s. False)" |
|
27 |
B_op "B(ROp(f,a0,a1)) = (%s. f(A(a0,s),A(a1,s)))" |
|
28 |
B_not "B(noti(b)) = (%s. ~B(b,s))" |
|
29 |
B_and "B(b0 andi b1) = (%s. B(b0,s) & B(b1,s))" |
|
30 |
B_or "B(b0 ori b1) = (%s. B(b0,s) | B(b1,s))" |
|
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
31 |
|
137 | 32 |
defs |
249 | 33 |
Gamma_def "Gamma(b,cd) == |
34 |
(%phi.{st. st : (phi O cd) & B(b,fst(st))} Un |
|
35 |
{st. st : id & ~B(b,fst(st))})" |
|
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
36 |
|
137 | 37 |
primrec C com |
138 | 38 |
C_skip "C(skip) = id" |
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
39 |
C_assign "C(x := a) = {st . snd(st) = fst(st)[A(a,fst(st))/x]}" |
138 | 40 |
C_comp "C(c0 ; c1) = C(c1) O C(c0)" |
249 | 41 |
C_if "C(ifc b then c0 else c1) = |
42 |
{st. st:C(c0) & B(b,fst(st))} Un |
|
43 |
{st. st:C(c1) & ~B(b,fst(st))}" |
|
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
44 |
C_while "C(while b do c) = lfp(Gamma(b,C(c)))" |
131
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
45 |
|
41bf53133ba6
Equivalence of op. and den. sem. for simple while language.
nipkow
parents:
diff
changeset
|
46 |
end |