43 by (simp_tac (rank_ss addsimps redexes.con_defs) 1); |
43 by (simp_tac (rank_ss addsimps redexes.con_defs) 1); |
44 val union_App = result(); |
44 val union_App = result(); |
45 |
45 |
46 val union_ss = redexes_ss addsimps |
46 val union_ss = redexes_ss addsimps |
47 (Ssub.intrs@bool_simps@bool_typechecks@ |
47 (Ssub.intrs@bool_simps@bool_typechecks@ |
48 Sreg.intrs@Scomp.intrs@ |
48 Sreg.intrs@Scomp.intrs@ |
49 [or_1 RSN (3,or_commute RS trans), |
49 [or_1 RSN (3,or_commute RS trans), |
50 or_0 RSN (3,or_commute RS trans), |
50 or_0 RSN (3,or_commute RS trans), |
51 union_App,union_Fun,union_Var,compD2,compD1,regD]); |
51 union_App,union_Fun,union_Var,compD2,compD1,regD]); |
52 |
52 |
53 val union_cs = (ZF_cs addIs Scomp.intrs addSEs |
53 val union_cs = (ZF_cs addIs Scomp.intrs addSEs |
54 [Sreg.mk_cases redexes.con_defs "regular(App(b,f,a))", |
54 [Sreg.mk_cases redexes.con_defs "regular(App(b,f,a))", |
55 Sreg.mk_cases redexes.con_defs "regular(Fun(b))", |
55 Sreg.mk_cases redexes.con_defs "regular(Fun(b))", |
56 Sreg.mk_cases redexes.con_defs "regular(Var(b))", |
56 Sreg.mk_cases redexes.con_defs "regular(Var(b))", |
57 Scomp.mk_cases redexes.con_defs "Fun(u) ~ Fun(t)", |
57 Scomp.mk_cases redexes.con_defs "Fun(u) ~ Fun(t)", |
58 Scomp.mk_cases redexes.con_defs "u ~ Fun(t)", |
58 Scomp.mk_cases redexes.con_defs "u ~ Fun(t)", |
59 Scomp.mk_cases redexes.con_defs "u ~ Var(n)", |
59 Scomp.mk_cases redexes.con_defs "u ~ Var(n)", |
60 Scomp.mk_cases redexes.con_defs "u ~ App(b,t,a)", |
60 Scomp.mk_cases redexes.con_defs "u ~ App(b,t,a)", |
61 Scomp.mk_cases redexes.con_defs "Fun(t) ~ v", |
61 Scomp.mk_cases redexes.con_defs "Fun(t) ~ v", |
62 Scomp.mk_cases redexes.con_defs "App(b,f,a) ~ v", |
62 Scomp.mk_cases redexes.con_defs "App(b,f,a) ~ v", |
63 Scomp.mk_cases redexes.con_defs "Var(n) ~ u" |
63 Scomp.mk_cases redexes.con_defs "Var(n) ~ u" |
64 ]); |
64 ]); |
65 |
65 |
66 |
66 |
67 |
67 |
68 (* ------------------------------------------------------------------------- *) |
68 (* ------------------------------------------------------------------------- *) |
69 (* comp proofs *) |
69 (* comp proofs *) |
101 val sub_induct = standard |
101 val sub_induct = standard |
102 (Ssub.mutual_induct RS spec RS spec RSN (2,rev_mp)); |
102 (Ssub.mutual_induct RS spec RS spec RSN (2,rev_mp)); |
103 |
103 |
104 goal SubUnion.thy |
104 goal SubUnion.thy |
105 "!!u.u ~ v ==> u <== (u un v)"; |
105 "!!u.u ~ v ==> u <== (u un v)"; |
106 by (eresolve_tac [comp_induct] 1); |
106 by (etac comp_induct 1); |
107 by (eresolve_tac [boolE] 3); |
107 by (etac boolE 3); |
108 by (ALLGOALS(asm_full_simp_tac union_ss)); |
108 by (ALLGOALS(asm_full_simp_tac union_ss)); |
109 val union_l = result(); |
109 val union_l = result(); |
110 |
110 |
111 goal SubUnion.thy |
111 goal SubUnion.thy |
112 "!!u.u ~ v ==> v <== (u un v)"; |
112 "!!u.u ~ v ==> v <== (u un v)"; |
113 by (eresolve_tac [comp_induct] 1); |
113 by (etac comp_induct 1); |
114 by (eres_inst_tac [("c","b2")] boolE 3); |
114 by (eres_inst_tac [("c","b2")] boolE 3); |
115 by (ALLGOALS(asm_full_simp_tac union_ss)); |
115 by (ALLGOALS(asm_full_simp_tac union_ss)); |
116 val union_r = result(); |
116 val union_r = result(); |
117 |
117 |
118 goal SubUnion.thy |
118 goal SubUnion.thy |
119 "!!u.u ~ v ==> u un v = v un u"; |
119 "!!u.u ~ v ==> u un v = v un u"; |
120 by (eresolve_tac [comp_induct] 1); |
120 by (etac comp_induct 1); |
121 by (ALLGOALS(asm_simp_tac (union_ss addsimps [or_commute]))); |
121 by (ALLGOALS(asm_simp_tac (union_ss addsimps [or_commute]))); |
122 val union_sym = result(); |
122 val union_sym = result(); |
123 |
123 |
124 (* ------------------------------------------------------------------------- *) |
124 (* ------------------------------------------------------------------------- *) |
125 (* regular proofs *) |
125 (* regular proofs *) |
126 (* ------------------------------------------------------------------------- *) |
126 (* ------------------------------------------------------------------------- *) |
127 |
127 |
128 goal SubUnion.thy |
128 goal SubUnion.thy |
129 "!!u.u ~ v ==> regular(u)-->regular(v)-->regular(u un v)"; |
129 "!!u.u ~ v ==> regular(u)-->regular(v)-->regular(u un v)"; |
130 by (eresolve_tac [comp_induct] 1); |
130 by (etac comp_induct 1); |
131 by (ALLGOALS(asm_full_simp_tac |
131 by (ALLGOALS(asm_full_simp_tac |
132 (union_ss setloop(SELECT_GOAL (safe_tac union_cs))))); |
132 (union_ss setloop(SELECT_GOAL (safe_tac union_cs))))); |
133 by (dres_inst_tac [("psi", "regular(Fun(?u) un ?v)")] asm_rl 1); |
133 by (dres_inst_tac [("psi", "regular(Fun(?u) un ?v)")] asm_rl 1); |
134 by (asm_full_simp_tac union_ss 1); |
134 by (asm_full_simp_tac union_ss 1); |
135 val union_preserve_regular = result(); |
135 val union_preserve_regular = result(); |