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 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)"; |
9 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)"; |
10 by(Simp_tac 1); |
10 by (Simp_tac 1); |
11 qed "dlift_Def"; |
11 qed "dlift_Def"; |
12 Addsimps [dlift_Def]; |
12 Addsimps [dlift_Def]; |
13 |
13 |
14 goalw thy [dlift_def] "cont(%f. dlift f)"; |
14 goalw thy [dlift_def] "cont(%f. dlift f)"; |
15 by(Simp_tac 1); |
15 by (Simp_tac 1); |
16 qed "cont_dlift"; |
16 qed "cont_dlift"; |
17 AddIffs [cont_dlift]; |
17 AddIffs [cont_dlift]; |
18 |
18 |
19 goalw thy [dlift_def] |
19 goalw thy [dlift_def] |
20 "(dlift f`l = Def y) = (? x. l = Def x & f`(Discr x) = Def y)"; |
20 "(dlift f`l = Def y) = (? x. l = Def x & f`(Discr x) = Def y)"; |
21 by(simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1); |
21 by (simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1); |
22 qed "dlift_is_Def"; |
22 qed "dlift_is_Def"; |
23 Addsimps [dlift_is_Def]; |
23 Addsimps [dlift_is_Def]; |
24 |
24 |
25 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)"; |
25 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)"; |
26 be evalc.induct 1; |
26 by (etac evalc.induct 1); |
27 by (ALLGOALS Asm_simp_tac); |
27 by (ALLGOALS Asm_simp_tac); |
28 by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac)); |
28 by (ALLGOALS (stac fix_eq THEN' Asm_full_simp_tac)); |
29 qed_spec_mp "eval_implies_D"; |
29 qed_spec_mp "eval_implies_D"; |
30 |
30 |
31 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t"; |
31 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t"; |
32 by (com.induct_tac "c" 1); |
32 by (com.induct_tac "c" 1); |
33 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
33 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
34 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
34 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
35 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
35 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
36 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
36 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
37 by (fast_tac ((HOL_cs addIs evalc.intrs) addss !simpset) 1); |
37 by (fast_tac ((HOL_cs addIs evalc.intrs) addss !simpset) 1); |
38 by (Simp_tac 1); |
38 by (Simp_tac 1); |
39 br fix_ind 1; |
39 by (rtac fix_ind 1); |
40 by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_chfindom,ax_flat_lift])) 1); |
40 by (fast_tac (HOL_cs addSIs (adm_lemmas@[adm_chfindom,ax_flat_lift])) 1); |
41 by (Simp_tac 1); |
41 by (Simp_tac 1); |
42 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
42 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1); |
43 by (safe_tac HOL_cs); |
43 by (safe_tac HOL_cs); |
44 by (fast_tac (HOL_cs addIs evalc.intrs) 1); |
44 by (fast_tac (HOL_cs addIs evalc.intrs) 1); |
45 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |
45 by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1); |