4 Copyright 1996 TUM |
4 Copyright 1996 TUM |
5 |
5 |
6 Equivalence of Denotational Semantics in HOLCF and Evaluation Semantics in HOL |
6 Equivalence of Denotational Semantics in HOLCF and Evaluation Semantics in HOL |
7 *) |
7 *) |
8 |
8 |
9 Addsimps [flift1_def]; |
9 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)"; |
|
10 by(Simp_tac 1); |
|
11 qed "dlift_Def"; |
|
12 Addsimps [dlift_Def]; |
10 |
13 |
11 val prems = goal Lift.thy "[| f`UU = UU; f`x = Def b |] ==> EX a. x = Def a"; |
14 goalw thy [dlift_def] "cont(%f. dlift f)"; |
12 by (cut_facts_tac prems 1); |
15 by(Simp_tac 1); |
13 by (res_inst_tac [("x","x")] Lift_cases 1); |
16 qed "cont_dlift"; |
14 by (fast_tac (HOL_cs addSEs [DefE2]) 1); |
17 AddIffs [cont_dlift]; |
15 by (fast_tac HOL_cs 1); |
18 |
16 qed "strict_Def"; |
19 goalw thy [dlift_def] "dlift f`l = Def y --> (? x. l = Def x)"; |
|
20 by(simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1); |
|
21 qed_spec_mp "dlift_DefD"; |
17 |
22 |
18 |
23 |
19 goal thy "D(WHILE b DO c) = D(IF b THEN c;WHILE b DO c ELSE SKIP)"; |
24 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)"; |
20 by(Simp_tac 1); |
|
21 by(EVERY[stac fix_eq 1, Simp_tac 1, IF_UNSOLVED no_tac]); |
|
22 qed "D_While_If"; |
|
23 |
|
24 |
|
25 goal thy "D c`UU =UU"; |
|
26 by (com.induct_tac "c" 1); |
|
27 by (ALLGOALS Asm_simp_tac); |
|
28 by (stac fix_eq 1); |
|
29 by (Asm_simp_tac 1); |
|
30 qed "D_strict"; |
|
31 |
|
32 |
|
33 goal thy "!!c. <c,s> -c-> t ==> D c`(Def s) = (Def t)"; |
|
34 be evalc.induct 1; |
25 be evalc.induct 1; |
35 by (ALLGOALS Asm_simp_tac); |
26 by (ALLGOALS Asm_simp_tac); |
36 by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac)); |
27 by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac)); |
37 qed_spec_mp "eval_implies_D"; |
28 qed_spec_mp "eval_implies_D"; |
38 |
29 |
39 goal thy "!s t. D c`(Def s) = (Def t) --> <c,s> -c-> t"; |
30 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t"; |
40 by (com.induct_tac "c" 1); |
31 by (com.induct_tac "c" 1); |
41 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
32 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
42 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
33 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
43 by (Simp_tac 1); |
34 by (Simp_tac 1); |
44 by (strip_tac 1); |
35 by (strip_tac 1); |
45 by (forward_tac [D_strict RS strict_Def] 1); |
36 by (forward_tac [dlift_DefD] 1); |
46 be exE 1; |
37 be exE 1; |
47 by (rotate_tac ~1 1); |
38 by (rotate_tac ~1 1); |
48 by (Asm_full_simp_tac 1); |
39 by (Asm_full_simp_tac 1); |
49 by (fast_tac (HOL_cs addSIs evalc.intrs) 1); |
40 by (fast_tac (HOL_cs addSIs evalc.intrs) 1); |
50 by (REPEAT (rtac allI 1)); |
41 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
51 by (case_tac "bexp s" 1); |
|
52 by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1); |
|
53 by (fast_tac ((HOL_cs addIs evalc.intrs) unsafe_addss !simpset) 1); |
42 by (fast_tac ((HOL_cs addIs evalc.intrs) unsafe_addss !simpset) 1); |
54 by(res_inst_tac [("Q","D (WHILE bexp DO com)`UU = UU")] conjunct1 1); |
|
55 by (Simp_tac 1); |
43 by (Simp_tac 1); |
56 br fix_ind 1; |
44 br fix_ind 1; |
57 by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_flatdom,flat_lift])) 1); |
45 by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_flatdom,flat_lift])) 1); |
58 by (Simp_tac 1); |
46 by (Simp_tac 1); |
59 br conjI 1; |
47 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
60 by (REPEAT (rtac allI 1)); |
48 by (safe_tac HOL_cs); |
61 by (case_tac "bexp s" 1); |
|
62 (* case bexp s *) |
49 (* case bexp s *) |
63 by (Asm_simp_tac 1); |
50 by (forward_tac [dlift_DefD] 1); |
64 by (strip_tac 1); |
|
65 be conjE 1; |
|
66 bd strict_Def 1; |
|
67 ba 1; |
|
68 be exE 1; |
51 be exE 1; |
69 by (rotate_tac ~1 1); |
52 by (rotate_tac ~1 1); |
70 by (Asm_full_simp_tac 1); |
53 by (Asm_full_simp_tac 1); |
71 by (fast_tac (HOL_cs addIs evalc.intrs) 1); |
54 by (fast_tac (HOL_cs addIs evalc.intrs) 1); |
72 (* case ~bexp s *) |
55 (* case ~bexp s *) |
73 by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1); |
56 by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1); |
74 (* induction step for strictness *) |
|
75 by (Asm_full_simp_tac 1); |
|
76 qed_spec_mp "D_implies_eval"; |
57 qed_spec_mp "D_implies_eval"; |
77 |
58 |
78 |
59 |
79 goal thy "(D c`(Def s) = (Def t)) = (<c,s> -c-> t)"; |
60 goal thy "(D c`(Discr s) = (Def t)) = (<c,s> -c-> t)"; |
80 by (fast_tac (HOL_cs addSEs [D_implies_eval,eval_implies_D]) 1); |
61 by (fast_tac (HOL_cs addSEs [D_implies_eval,eval_implies_D]) 1); |
81 qed "D_is_eval"; |
62 qed "D_is_eval"; |