1 (* Title: ZF/zf.ML |
1 (* Title: ZF/ZF.ML |
2 ID: $Id$ |
2 ID: $Id$ |
3 Author: Lawrence C Paulson and Martin D Coen, CU Computer Laboratory |
3 Author: Lawrence C Paulson and Martin D Coen, CU Computer Laboratory |
4 Copyright 1994 University of Cambridge |
4 Copyright 1994 University of Cambridge |
5 |
5 |
6 Basic introduction and elimination rules for Zermelo-Fraenkel Set Theory |
6 Basic introduction and elimination rules for Zermelo-Fraenkel Set Theory |
7 *) |
7 *) |
8 |
8 |
9 open ZF; |
9 open ZF; |
10 |
10 |
|
11 |
|
12 (*Useful examples: singletonI RS subst_elem, subst_elem RSN (2,IntI) *) |
|
13 goal ZF.thy "!!a b A. [| b:A; a=b |] ==> a:A"; |
|
14 by (etac ssubst 1); |
|
15 by (assume_tac 1); |
|
16 val subst_elem = result(); |
11 |
17 |
12 (*** Bounded universal quantifier ***) |
18 (*** Bounded universal quantifier ***) |
13 |
19 |
14 qed_goalw "ballI" ZF.thy [Ball_def] |
20 qed_goalw "ballI" ZF.thy [Ball_def] |
15 "[| !!x. x:A ==> P(x) |] ==> ALL x:A. P(x)" |
21 "[| !!x. x:A ==> P(x) |] ==> ALL x:A. P(x)" |
394 |
400 |
395 qed_goal "equals0D" ZF.thy "[| A=0; a:A |] ==> P" |
401 qed_goal "equals0D" ZF.thy "[| A=0; a:A |] ==> P" |
396 (fn [major,minor]=> |
402 (fn [major,minor]=> |
397 [ (rtac (minor RS (major RS equalityD1 RS subsetD RS emptyE)) 1) ]); |
403 [ (rtac (minor RS (major RS equalityD1 RS subsetD RS emptyE)) 1) ]); |
398 |
404 |
|
405 qed_goal "not_emptyI" ZF.thy "!!A a. a:A ==> A ~= 0" |
|
406 (fn _ => [REPEAT (ares_tac [notI, equals0D] 1)]); |
|
407 |
|
408 qed_goal "not_emptyE" ZF.thy "[| A ~= 0; !!x. x:A ==> R |] ==> R"; |
|
409 (fn [major,minor]=> |
|
410 [ rtac ([major, equals0I] MRS swap) 1, |
|
411 swap_res_tac [minor] 1, |
|
412 assume_tac 1 ]); |
|
413 |
|
414 (*Can replace most uses by eq_cs (which is ZF_cs addSIs [equalityI])*) |
399 (*A claset that leaves <= formulae unchanged!*) |
415 (*A claset that leaves <= formulae unchanged!*) |
400 val subset0_cs = FOL_cs |
416 val subset0_cs = FOL_cs |
401 addSIs [ballI, InterI, CollectI, PowI, empty_subsetI] |
417 addSIs [ballI, InterI, CollectI, PowI, empty_subsetI] |
402 addIs [bexI, UnionI, ReplaceI, RepFunI] |
418 addIs [bexI, UnionI, ReplaceI, RepFunI] |
403 addSEs [bexE, make_elim PowD, UnionE, ReplaceE2, RepFunE, |
419 addSEs [bexE, make_elim PowD, UnionE, ReplaceE2, RepFunE, |