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) ]); |