equal
deleted
inserted
replaced
9 |
9 |
10 open ParRed; |
10 open ParRed; |
11 |
11 |
12 Addsimps par_beta.intrs; |
12 Addsimps par_beta.intrs; |
13 |
13 |
14 val par_beta_cases = map (par_beta.mk_cases db.simps) |
14 val par_beta_cases = map (par_beta.mk_cases dB.simps) |
15 ["Var n => t", "Fun s => Fun t", |
15 ["Var n => t", "Abs s => Abs t", |
16 "(Fun s) @ t => u", "s @ t => u", "Fun s => t"]; |
16 "(Abs s) @ t => u", "s @ t => u", "Abs s => t"]; |
17 |
17 |
18 AddSIs par_beta.intrs; |
18 AddSIs par_beta.intrs; |
19 AddSEs par_beta_cases; |
19 AddSEs par_beta_cases; |
20 |
20 |
21 (*** beta <= par_beta <= beta^* ***) |
21 (*** beta <= par_beta <= beta^* ***) |
24 by (Fast_tac 1); |
24 by (Fast_tac 1); |
25 qed "par_beta_varL"; |
25 qed "par_beta_varL"; |
26 Addsimps [par_beta_varL]; |
26 Addsimps [par_beta_varL]; |
27 |
27 |
28 goal ParRed.thy "t => t"; |
28 goal ParRed.thy "t => t"; |
29 by (db.induct_tac "t" 1); |
29 by (dB.induct_tac "t" 1); |
30 by (ALLGOALS Asm_simp_tac); |
30 by (ALLGOALS Asm_simp_tac); |
31 qed"par_beta_refl"; |
31 qed"par_beta_refl"; |
32 Addsimps [par_beta_refl]; |
32 Addsimps [par_beta_refl]; |
33 (* AddSIs [par_beta_refl]; causes search to blow up *) |
33 (* AddSIs [par_beta_refl]; causes search to blow up *) |
34 |
34 |
48 qed "par_beta_subset_beta"; |
48 qed "par_beta_subset_beta"; |
49 |
49 |
50 (*** => ***) |
50 (*** => ***) |
51 |
51 |
52 goal ParRed.thy "!t' n. t => t' --> lift t n => lift t' n"; |
52 goal ParRed.thy "!t' n. t => t' --> lift t n => lift t' n"; |
53 by (db.induct_tac "t" 1); |
53 by (dB.induct_tac "t" 1); |
54 by (ALLGOALS(fast_tac (!claset addss (!simpset)))); |
54 by (ALLGOALS(fast_tac (!claset addss (!simpset)))); |
55 qed_spec_mp "par_beta_lift"; |
55 qed_spec_mp "par_beta_lift"; |
56 Addsimps [par_beta_lift]; |
56 Addsimps [par_beta_lift]; |
57 |
57 |
58 goal ParRed.thy |
58 goal ParRed.thy |
59 "!s s' t' n. s => s' --> t => t' --> t[s/n] => t'[s'/n]"; |
59 "!s s' t' n. s => s' --> t => t' --> t[s/n] => t'[s'/n]"; |
60 by (db.induct_tac "t" 1); |
60 by (dB.induct_tac "t" 1); |
61 by (asm_simp_tac (addsplit(!simpset)) 1); |
61 by (asm_simp_tac (addsplit(!simpset)) 1); |
62 by (strip_tac 1); |
62 by (strip_tac 1); |
63 by (eresolve_tac par_beta_cases 1); |
63 by (eresolve_tac par_beta_cases 1); |
64 by (Asm_simp_tac 1); |
64 by (Asm_simp_tac 1); |
65 by (asm_simp_tac (!simpset addsimps [subst_subst RS sym]) 1); |
65 by (asm_simp_tac (!simpset addsimps [subst_subst RS sym]) 1); |
77 |
77 |
78 |
78 |
79 (*** cd ***) |
79 (*** cd ***) |
80 |
80 |
81 goal ParRed.thy "!t. s => t --> t => cd s"; |
81 goal ParRed.thy "!t. s => t --> t => cd s"; |
82 by (db.induct_tac "s" 1); |
82 by (dB.induct_tac "s" 1); |
83 by (Simp_tac 1); |
83 by (Simp_tac 1); |
84 by (etac rev_mp 1); |
84 by (etac rev_mp 1); |
85 by (db.induct_tac "db1" 1); |
85 by (dB.induct_tac "dB1" 1); |
86 by (ALLGOALS(fast_tac (!claset addSIs [par_beta_subst] addss !simpset))); |
86 by (ALLGOALS(fast_tac (!claset addSIs [par_beta_subst] addss !simpset))); |
87 qed_spec_mp "par_beta_cd"; |
87 qed_spec_mp "par_beta_cd"; |
88 |
88 |
89 (*** Confluence (via cd) ***) |
89 (*** Confluence (via cd) ***) |
90 |
90 |