equal
deleted
inserted
replaced
84 (fn major::prems=> |
84 (fn major::prems=> |
85 [ (rtac (major RS spec RS mp) 1), |
85 [ (rtac (major RS spec RS mp) 1), |
86 (resolve_tac prems 1) ]); |
86 (resolve_tac prems 1) ]); |
87 |
87 |
88 val ballE = prove_goalw ZF.thy [Ball_def] |
88 val ballE = prove_goalw ZF.thy [Ball_def] |
89 "[| ALL x:A. P(x); P(x) ==> Q; ~ x:A ==> Q |] ==> Q" |
89 "[| ALL x:A. P(x); P(x) ==> Q; x~:A ==> Q |] ==> Q" |
90 (fn major::prems=> |
90 (fn major::prems=> |
91 [ (rtac (major RS allE) 1), |
91 [ (rtac (major RS allE) 1), |
92 (REPEAT (eresolve_tac (prems@[asm_rl,impCE]) 1)) ]); |
92 (REPEAT (eresolve_tac (prems@[asm_rl,impCE]) 1)) ]); |
93 |
93 |
94 (*Used in the datatype package*) |
94 (*Used in the datatype package*) |
97 (fn _ => |
97 (fn _ => |
98 [ REPEAT (ares_tac [bspec] 1) ]); |
98 [ REPEAT (ares_tac [bspec] 1) ]); |
99 |
99 |
100 (*Instantiates x first: better for automatic theorem proving?*) |
100 (*Instantiates x first: better for automatic theorem proving?*) |
101 val rev_ballE = prove_goal ZF.thy |
101 val rev_ballE = prove_goal ZF.thy |
102 "[| ALL x:A. P(x); ~ x:A ==> Q; P(x) ==> Q |] ==> Q" |
102 "[| ALL x:A. P(x); x~:A ==> Q; P(x) ==> Q |] ==> Q" |
103 (fn major::prems=> |
103 (fn major::prems=> |
104 [ (rtac (major RS ballE) 1), |
104 [ (rtac (major RS ballE) 1), |
105 (REPEAT (eresolve_tac prems 1)) ]); |
105 (REPEAT (eresolve_tac prems 1)) ]); |
106 |
106 |
107 (*Takes assumptions ALL x:A.P(x) and a:A; creates assumption P(a)*) |
107 (*Takes assumptions ALL x:A.P(x) and a:A; creates assumption P(a)*) |
155 [ (rtac (major RS bspec) 1), |
155 [ (rtac (major RS bspec) 1), |
156 (resolve_tac prems 1) ]); |
156 (resolve_tac prems 1) ]); |
157 |
157 |
158 (*Classical elimination rule*) |
158 (*Classical elimination rule*) |
159 val subsetCE = prove_goalw ZF.thy [subset_def] |
159 val subsetCE = prove_goalw ZF.thy [subset_def] |
160 "[| A <= B; ~(c:A) ==> P; c:B ==> P |] ==> P" |
160 "[| A <= B; c~:A ==> P; c:B ==> P |] ==> P" |
161 (fn major::prems=> |
161 (fn major::prems=> |
162 [ (rtac (major RS ballE) 1), |
162 [ (rtac (major RS ballE) 1), |
163 (REPEAT (eresolve_tac prems 1)) ]); |
163 (REPEAT (eresolve_tac prems 1)) ]); |
164 |
164 |
165 (*Takes assumptions A<=B; c:A and creates the assumption c:B *) |
165 (*Takes assumptions A<=B; c:A and creates the assumption c:B *) |
201 "[| A = B; [| A<=B; B<=A |] ==> P |] ==> P" |
201 "[| A = B; [| A<=B; B<=A |] ==> P |] ==> P" |
202 (fn prems=> |
202 (fn prems=> |
203 [ (DEPTH_SOLVE (resolve_tac (prems@[equalityD1,equalityD2]) 1)) ]); |
203 [ (DEPTH_SOLVE (resolve_tac (prems@[equalityD1,equalityD2]) 1)) ]); |
204 |
204 |
205 val equalityCE = prove_goal ZF.thy |
205 val equalityCE = prove_goal ZF.thy |
206 "[| A = B; [| c:A; c:B |] ==> P; [| ~ c:A; ~ c:B |] ==> P |] ==> P" |
206 "[| A = B; [| c:A; c:B |] ==> P; [| c~:A; c~:B |] ==> P |] ==> P" |
207 (fn major::prems=> |
207 (fn major::prems=> |
208 [ (rtac (major RS equalityE) 1), |
208 [ (rtac (major RS equalityE) 1), |
209 (REPEAT (contr_tac 1 ORELSE eresolve_tac ([asm_rl,subsetCE]@prems) 1)) ]); |
209 (REPEAT (contr_tac 1 ORELSE eresolve_tac ([asm_rl,subsetCE]@prems) 1)) ]); |
210 |
210 |
211 (*Lemma for creating induction formulae -- for "pattern matching" on p |
211 (*Lemma for creating induction formulae -- for "pattern matching" on p |
358 [ (rtac (major RS CollectD2 RS bspec) 1), |
358 [ (rtac (major RS CollectD2 RS bspec) 1), |
359 (rtac minor 1) ]); |
359 (rtac minor 1) ]); |
360 |
360 |
361 (*"Classical" elimination rule -- does not require exhibiting B:C *) |
361 (*"Classical" elimination rule -- does not require exhibiting B:C *) |
362 val InterE = prove_goalw ZF.thy [Inter_def] |
362 val InterE = prove_goalw ZF.thy [Inter_def] |
363 "[| A : Inter(C); A:B ==> R; ~ B:C ==> R |] ==> R" |
363 "[| A : Inter(C); A:B ==> R; B~:C ==> R |] ==> R" |
364 (fn major::prems=> |
364 (fn major::prems=> |
365 [ (rtac (major RS CollectD2 RS ballE) 1), |
365 [ (rtac (major RS CollectD2 RS ballE) 1), |
366 (REPEAT (eresolve_tac prems 1)) ]); |
366 (REPEAT (eresolve_tac prems 1)) ]); |
367 |
367 |
368 (*** Rules for Unions of families ***) |
368 (*** Rules for Unions of families ***) |