20 goal Cube.thy |
20 goal Cube.thy |
21 "!!u.v<==u ==> \ |
21 "!!u.v<==u ==> \ |
22 \ regular(u)-->(ALL w.w~v-->w~u--> \ |
22 \ regular(u)-->(ALL w.w~v-->w~u--> \ |
23 \ w |> u = (w|>v) |> (u|>v))"; |
23 \ w |> u = (w|>v) |> (u|>v))"; |
24 by (etac Ssub.induct 1); |
24 by (etac Ssub.induct 1); |
25 by (asm_simp_tac (prism_ss) 1); |
25 by (asm_simp_tac prism_ss 1); |
26 by (asm_simp_tac (prism_ss ) 1); |
26 by (asm_simp_tac prism_ss 1); |
27 by (asm_simp_tac (prism_ss ) 1); |
27 by (asm_simp_tac prism_ss 1); |
28 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 |
28 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 |
29 THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1))); |
29 THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1))); |
30 by (asm_full_simp_tac (prism_ss ) 1); |
30 by (asm_full_simp_tac prism_ss 1); |
31 by (asm_simp_tac (prism_ss ) 1); |
31 by (asm_simp_tac prism_ss 1); |
32 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 |
32 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 |
33 THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1))); |
33 THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1))); |
34 by (asm_full_simp_tac (prism_ss ) 1); |
34 by (asm_full_simp_tac prism_ss 1); |
35 val prism_l = result(); |
35 val prism_l = result(); |
36 |
36 |
37 goal Cube.thy |
37 goal Cube.thy |
38 "!!u.[|v <== u; regular(u); w~v|]==> \ |
38 "!!u.[|v <== u; regular(u); w~v|]==> \ |
39 \ w |> u = (w|>v) |> (u|>v)"; |
39 \ w |> u = (w|>v) |> (u|>v)"; |
40 by (resolve_tac [prism_l RS mp RS spec RS mp RS mp ] 1); |
40 by (resolve_tac [prism_l RS mp RS spec RS mp RS mp ] 1); |
41 by (rtac comp_trans 4); |
41 by (rtac comp_trans 4); |
42 by (assume_tac 4); |
42 by (assume_tac 4); |
43 by (ALLGOALS(asm_simp_tac (prism_ss))); |
43 by (ALLGOALS(asm_simp_tac prism_ss)); |
44 val prism = result(); |
44 val prism = result(); |
45 |
45 |
46 |
46 |
47 (* ------------------------------------------------------------------------- *) |
47 (* ------------------------------------------------------------------------- *) |
48 (* Levy's Cube Lemma *) |
48 (* Levy's Cube Lemma *) |
55 THEN assume_tac 1 THEN assume_tac 1); |
55 THEN assume_tac 1 THEN assume_tac 1); |
56 by (res_inst_tac [("u2","v"),("v2","u")](preservation RS ssubst) 1); |
56 by (res_inst_tac [("u2","v"),("v2","u")](preservation RS ssubst) 1); |
57 by (etac comp_sym 1); |
57 by (etac comp_sym 1); |
58 by (atac 1); |
58 by (atac 1); |
59 by (stac (prism RS sym) 1); |
59 by (stac (prism RS sym) 1); |
60 by (asm_full_simp_tac (res1_ss addsimps |
60 by (asm_full_simp_tac (!simpset addsimps |
61 [prism RS sym,union_l,union_preserve_regular, |
61 [prism RS sym,union_l,union_preserve_regular, |
62 comp_sym_iff, union_sym]) 4); |
62 comp_sym_iff, union_sym]) 4); |
63 by (asm_full_simp_tac (res1_ss addsimps [union_r, comp_sym_iff]) 1); |
63 by (asm_full_simp_tac (!simpset addsimps [union_r, comp_sym_iff]) 1); |
64 by (asm_full_simp_tac (res1_ss addsimps |
64 by (asm_full_simp_tac (!simpset addsimps |
65 [union_preserve_regular, comp_sym_iff]) 1); |
65 [union_preserve_regular, comp_sym_iff]) 1); |
66 by (etac comp_trans 1); |
66 by (etac comp_trans 1); |
67 by (atac 1); |
67 by (atac 1); |
68 val cube = result(); |
68 val cube = result(); |
69 |
69 |
70 |
70 |
75 goal Cube.thy |
75 goal Cube.thy |
76 "!!u.[|w~u; w~v; regular(u); regular(v)|]==> \ |
76 "!!u.[|w~u; w~v; regular(u); regular(v)|]==> \ |
77 \ EX uv.EX vu. (w|>u) |> vu = (w|>v) |> uv & (w|>u)~vu &\ |
77 \ EX uv.EX vu. (w|>u) |> vu = (w|>v) |> uv & (w|>u)~vu &\ |
78 \ regular(vu) & (w|>v)~uv & regular(uv) "; |
78 \ regular(vu) & (w|>v)~uv & regular(uv) "; |
79 by (forw_inst_tac [("x1","v")] (comp_sym RS comp_trans) 1); |
79 by (forw_inst_tac [("x1","v")] (comp_sym RS comp_trans) 1); |
80 by (REPEAT(step_tac ZF_cs 1)); |
80 by (REPEAT(Step_tac 1)); |
81 by (rtac cube 1); |
81 by (rtac cube 1); |
82 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
82 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
83 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
83 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
84 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
84 by (asm_simp_tac (prism_ss addsimps [comp_sym_iff]) 1); |
85 by (atac 1); |
85 by (atac 1); |