src/ZF/upair.ML
changeset 14 1c0926788772
parent 6 8ce8c4d13d4d
child 37 cebe01deba80
equal deleted inserted replaced
13:b73f7e42135e 14:1c0926788772
   233 
   233 
   234 val succI2 = prove_goalw ZF.thy [succ_def]
   234 val succI2 = prove_goalw ZF.thy [succ_def]
   235     "i : j ==> i : succ(j)"
   235     "i : j ==> i : succ(j)"
   236  (fn [prem]=> [ (rtac (prem RS consI2) 1) ]);
   236  (fn [prem]=> [ (rtac (prem RS consI2) 1) ]);
   237 
   237 
   238 (*Classical introduction rule*)
       
   239 val succCI = prove_goalw ZF.thy [succ_def]
       
   240    "(~ i:j ==> i=j) ==> i: succ(j)"
       
   241  (fn prems=> [ (rtac consCI 1), (eresolve_tac prems 1) ]);
       
   242 
       
   243 val succE = prove_goalw ZF.thy [succ_def]
   238 val succE = prove_goalw ZF.thy [succ_def]
   244     "[| i : succ(j);  i=j ==> P;  i:j ==> P |] ==> P"
   239     "[| i : succ(j);  i=j ==> P;  i:j ==> P |] ==> P"
   245  (fn major::prems=>
   240  (fn major::prems=>
   246   [ (rtac (major RS consE) 1),
   241   [ (rtac (major RS consE) 1),
   247     (REPEAT (eresolve_tac prems 1)) ]);
   242     (REPEAT (eresolve_tac prems 1)) ]);
       
   243 
       
   244 val succ_iff = prove_goal ZF.thy "i : succ(j) <-> i=j | i:j"
       
   245  (fn _ => [ (fast_tac (lemmas_cs addIs [succI1,succI2] addSEs [succE]) 1) ]);
       
   246 
       
   247 (*Classical introduction rule*)
       
   248 val succCI = prove_goal ZF.thy "(~ i:j ==> i=j) ==> i: succ(j)"
       
   249  (fn [prem]=>
       
   250   [ (rtac (disjCI RS (succ_iff RS iffD2)) 1),
       
   251     (etac prem 1) ]);
   248 
   252 
   249 val succ_neq_0 = prove_goal ZF.thy "succ(n)=0 ==> P"
   253 val succ_neq_0 = prove_goal ZF.thy "succ(n)=0 ==> P"
   250  (fn [major]=>
   254  (fn [major]=>
   251   [ (rtac (major RS equalityD1 RS subsetD RS emptyE) 1),
   255   [ (rtac (major RS equalityD1 RS subsetD RS emptyE) 1),
   252     (rtac succI1 1) ]);
   256     (rtac succI1 1) ]);