equal
deleted
inserted
replaced
50 (fn major::prems=> |
50 (fn major::prems=> |
51 [ (rtac (major RS UnionE) 1), |
51 [ (rtac (major RS UnionE) 1), |
52 (etac UpairE 1), |
52 (etac UpairE 1), |
53 (REPEAT (EVERY1 [resolve_tac prems, etac subst, assume_tac])) ]); |
53 (REPEAT (EVERY1 [resolve_tac prems, etac subst, assume_tac])) ]); |
54 |
54 |
|
55 (*Stronger version of the rule above*) |
|
56 val UnE' = prove_goal ZF.thy |
|
57 "[| c : A Un B; c:A ==> P; [| c:B; c~:A |] ==> P |] ==> P" |
|
58 (fn major::prems => |
|
59 [(rtac (major RS UnE) 1), |
|
60 (eresolve_tac prems 1), |
|
61 (rtac classical 1), |
|
62 (eresolve_tac prems 1), |
|
63 (swap_res_tac prems 1), |
|
64 (etac notnotD 1)]); |
|
65 |
55 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)" |
66 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)" |
56 (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]); |
67 (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]); |
57 |
68 |
58 (*Classical introduction rule: no commitment to A vs B*) |
69 (*Classical introduction rule: no commitment to A vs B*) |
59 val UnCI = prove_goal ZF.thy "(c ~: B ==> c : A) ==> c : A Un B" |
70 val UnCI = prove_goal ZF.thy "(c ~: B ==> c : A) ==> c : A Un B" |
122 val consE = prove_goalw ZF.thy [cons_def] |
133 val consE = prove_goalw ZF.thy [cons_def] |
123 "[| a : cons(b,A); a=b ==> P; a:A ==> P |] ==> P" |
134 "[| a : cons(b,A); a=b ==> P; a:A ==> P |] ==> P" |
124 (fn major::prems=> |
135 (fn major::prems=> |
125 [ (rtac (major RS UnE) 1), |
136 [ (rtac (major RS UnE) 1), |
126 (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]); |
137 (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]); |
|
138 |
|
139 (*Stronger version of the rule above*) |
|
140 val consE' = prove_goal ZF.thy |
|
141 "[| a : cons(b,A); a=b ==> P; [| a:A; a~=b |] ==> P |] ==> P" |
|
142 (fn major::prems => |
|
143 [(rtac (major RS consE) 1), |
|
144 (eresolve_tac prems 1), |
|
145 (rtac classical 1), |
|
146 (eresolve_tac prems 1), |
|
147 (swap_res_tac prems 1), |
|
148 (etac notnotD 1)]); |
127 |
149 |
128 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)" |
150 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)" |
129 (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]); |
151 (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]); |
130 |
152 |
131 (*Classical introduction rule*) |
153 (*Classical introduction rule*) |