author | wenzelm |
Wed, 21 Sep 1994 15:40:41 +0200 | |
changeset 145 | a9f7ff3a464c |
parent 144 | 6254f50e5ec9 |
child 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 |
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
33 |
Gamma_def "Gamma(b,cd) == \ |
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
34 |
\ (%phi.{st. st : (phi O cd) & B(b,fst(st))} Un \ |
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
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)" |
41 |
C_if "C(ifc b then c0 else c1) = \ |
|
144
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
42 |
\ {st. st:C(c0) & B(b,fst(st))} Un \ |
6254f50e5ec9
Definition of C was not truly prim rec because C was called inside Gamma
nipkow
parents:
138
diff
changeset
|
43 |
\ {st. st:C(c1) & ~B(b,fst(st))}" |
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 |