src/ZF/zf.ML
changeset 37 cebe01deba80
parent 6 8ce8c4d13d4d
child 120 09287f26bfb8
equal deleted inserted replaced
36:70c6014c9b6f 37:cebe01deba80
    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 ***)