991
|
1 |
(* Title: ZF/AC/AC_Equiv.ML
|
|
2 |
ID: $Id$
|
1207
|
3 |
Author: Krzysztof Grabczewski
|
991
|
4 |
|
|
5 |
*)
|
|
6 |
|
|
7 |
|
|
8 |
open AC_Equiv;
|
|
9 |
|
1071
|
10 |
val WO_defs = [WO1_def, WO2_def, WO3_def, WO4_def, WO5_def, WO6_def, WO8_def];
|
|
11 |
|
|
12 |
val AC_defs = [AC0_def, AC1_def, AC2_def, AC3_def, AC4_def, AC5_def,
|
|
13 |
AC6_def, AC7_def, AC8_def, AC9_def, AC10_def, AC11_def,
|
|
14 |
AC12_def, AC13_def, AC14_def, AC15_def, AC16_def,
|
|
15 |
AC17_def, AC18_def, AC19_def];
|
|
16 |
|
991
|
17 |
val AC_aux_defs = [pairwise_disjoint_def, sets_of_size_between_def];
|
1123
|
18 |
|
|
19 |
val AC_cs = OrdQuant_cs;
|
|
20 |
val AC_ss = OrdQuant_ss;
|
|
21 |
|
991
|
22 |
(* ******************************************** *)
|
|
23 |
|
1200
|
24 |
val nat_implies_well_ord = nat_into_Ord RS well_ord_Memrel;
|
|
25 |
|
991
|
26 |
(* Theorems analogous to ones presented in "ZF/Ordinal.ML" *)
|
|
27 |
|
|
28 |
(* lemma for nat_le_imp_lepoll *)
|
|
29 |
val [prem] = goalw Cardinal.thy [lepoll_def]
|
|
30 |
"m:nat ==> ALL n: nat. m le n --> m lepoll n";
|
|
31 |
by (nat_ind_tac "m" [prem] 1);
|
|
32 |
by (fast_tac (ZF_cs addSIs [le_imp_subset RS id_subset_inj]) 1);
|
|
33 |
by (rtac ballI 1);
|
|
34 |
by (eres_inst_tac [("n","n")] natE 1);
|
|
35 |
by (asm_simp_tac (ZF_ss addsimps [inj_def, succI1 RS Pi_empty2]) 1);
|
|
36 |
by (fast_tac (ZF_cs addSDs [le0D]) 1);
|
|
37 |
by (fast_tac (ZF_cs addSIs [le_imp_subset RS id_subset_inj]) 1);
|
|
38 |
val nat_le_imp_lepoll_lemma = result();
|
|
39 |
|
|
40 |
(* used in : AC10-AC15.ML WO1-WO6.ML WO6WO1.ML*)
|
|
41 |
val nat_le_imp_lepoll = nat_le_imp_lepoll_lemma RS bspec RS mp |> standard;
|
|
42 |
|
|
43 |
(* ********************************************************************** *)
|
|
44 |
(* lemmas concerning FOL and pure ZF theory *)
|
|
45 |
(* ********************************************************************** *)
|
|
46 |
|
|
47 |
(* The following two theorms are useful when rewriting only one instance *)
|
|
48 |
(* of a definition *)
|
|
49 |
(* first one for definitions of formulae and the second for terms *)
|
|
50 |
|
|
51 |
val prems = goal ZF.thy "(A == B) ==> A <-> B";
|
|
52 |
by (asm_simp_tac (ZF_ss addsimps prems) 1);
|
|
53 |
val def_imp_iff = result();
|
|
54 |
|
1123
|
55 |
val prems = goal ZF.thy "(A == B) ==> A = B";
|
|
56 |
by (simp_tac (ZF_ss addsimps prems) 1);
|
|
57 |
val def_imp_eq = result();
|
991
|
58 |
|
1123
|
59 |
goal thy "!!X. (A->X)=0 ==> X=0";
|
|
60 |
by (fast_tac (ZF_cs addSIs [equals0I] addEs [lam_type RSN (2, equals0D)]) 1);
|
|
61 |
val fun_space_emptyD = result();
|
991
|
62 |
|
|
63 |
(* used only in WO1_DC.ML *)
|
|
64 |
(*Note simpler proof*)
|
|
65 |
goal ZF.thy "!!A f g. [| ALL x:A. f`x=g`x; f:Df->Cf; g:Dg->Cg; \
|
|
66 |
\ A<=Df; A<=Dg |] ==> f``A=g``A";
|
|
67 |
by (asm_simp_tac (ZF_ss addsimps [image_fun]) 1);
|
|
68 |
val images_eq = result();
|
|
69 |
|
|
70 |
(* used in : AC10-AC15.ML AC16WO4.ML WO6WO1.ML *)
|
|
71 |
(*I don't know where to put this one.*)
|
|
72 |
goal Cardinal.thy
|
|
73 |
"!!m A B. [| A lepoll succ(m); B<=A; B~=0 |] ==> A-B lepoll m";
|
1207
|
74 |
by (rtac not_emptyE 1 THEN (assume_tac 1));
|
991
|
75 |
by (forward_tac [singleton_subsetI] 1);
|
1196
|
76 |
by (forward_tac [subsetD] 1 THEN (assume_tac 1));
|
991
|
77 |
by (res_inst_tac [("A2","A")]
|
1057
|
78 |
(Diff_sing_lepoll RSN (2, subset_imp_lepoll RS lepoll_trans)) 1
|
1196
|
79 |
THEN (REPEAT (assume_tac 2)));
|
991
|
80 |
by (fast_tac ZF_cs 1);
|
|
81 |
val Diff_lepoll = result();
|
|
82 |
|
|
83 |
(* ********************************************************************** *)
|
|
84 |
(* lemmas concerning lepoll and eqpoll relations *)
|
|
85 |
(* ********************************************************************** *)
|
|
86 |
|
|
87 |
(* ********************************************************************** *)
|
|
88 |
(* Theorems concerning ordinals *)
|
|
89 |
(* ********************************************************************** *)
|
|
90 |
|
|
91 |
(* lemma for ordertype_Int *)
|
|
92 |
goalw Cardinal.thy [rvimage_def] "rvimage(A,id(A),r) = r Int A*A";
|
1207
|
93 |
by (rtac equalityI 1);
|
991
|
94 |
by (step_tac ZF_cs 1);
|
|
95 |
by (dres_inst_tac [("P","%a. <id(A)`xb,a>:r")] (id_conv RS subst) 1
|
1196
|
96 |
THEN (assume_tac 1));
|
991
|
97 |
by (dres_inst_tac [("P","%a. <a,ya>:r")] (id_conv RS subst) 1
|
1196
|
98 |
THEN (REPEAT (assume_tac 1)));
|
991
|
99 |
by (fast_tac (ZF_cs addIs [id_conv RS ssubst]) 1);
|
|
100 |
val rvimage_id = result();
|
|
101 |
|
|
102 |
(* used only in Hartog.ML *)
|
|
103 |
goal Cardinal.thy
|
|
104 |
"!!A r. well_ord(A,r) ==> ordertype(A, r Int A*A) = ordertype(A,r)";
|
|
105 |
by (res_inst_tac [("P","%a. ordertype(A,a)=ordertype(A,r)")]
|
|
106 |
(rvimage_id RS subst) 1);
|
|
107 |
by (eresolve_tac [id_bij RS bij_ordertype_vimage] 1);
|
|
108 |
val ordertype_Int = result();
|
|
109 |
|
|
110 |
(* used only in AC16_lemmas.ML *)
|
|
111 |
goalw CardinalArith.thy [InfCard_def]
|
|
112 |
"!!i. [| ~Finite(i); Card(i) |] ==> InfCard(i)";
|
|
113 |
by (asm_simp_tac (ZF_ss addsimps [Card_is_Ord RS nat_le_infinite_Ord]) 1);
|
|
114 |
val Inf_Card_is_InfCard = result();
|
1123
|
115 |
|
|
116 |
goal thy "(THE z. {x}={z}) = x";
|
|
117 |
by (fast_tac (AC_cs addSIs [the_equality]
|
|
118 |
addSEs [singleton_eq_iff RS iffD1 RS sym]) 1);
|
|
119 |
val the_element = result();
|
|
120 |
|
|
121 |
goal thy "(lam x:A. {x}) : bij(A, {{x}. x:A})";
|
|
122 |
by (res_inst_tac [("d","%z. THE x. z={x}")] lam_bijective 1);
|
|
123 |
by (TRYALL (eresolve_tac [RepFunI, RepFunE]));
|
|
124 |
by (REPEAT (asm_full_simp_tac (AC_ss addsimps [the_element]) 1));
|
|
125 |
val lam_sing_bij = result();
|
|
126 |
|
|
127 |
val [major,minor] = goal thy
|
|
128 |
"[| f : Pi(A,B); (!!x. x:A ==> B(x)<=C(x)) |] ==> f : Pi(A,C)";
|
|
129 |
by (fast_tac (AC_cs addSIs [major RS Pi_type, minor RS subsetD,
|
|
130 |
major RS apply_type]) 1);
|
|
131 |
val Pi_weaken_type = result();
|
|
132 |
|
|
133 |
val [major, minor] = goalw thy [inj_def]
|
|
134 |
"[| f:inj(A, B); (!!a. a:A ==> f`a : C) |] ==> f:inj(A,C)";
|
|
135 |
by (fast_tac (AC_cs addSEs [minor]
|
|
136 |
addSIs [major RS CollectD1 RS Pi_type, major RS CollectD2]) 1);
|
|
137 |
val inj_strengthen_type = result();
|
|
138 |
|
|
139 |
goal thy "A*B=0 <-> A=0 | B=0";
|
|
140 |
by (fast_tac (ZF_cs addSIs [equals0I] addEs [equals0D]) 1);
|
|
141 |
val Sigma_empty_iff = result();
|
|
142 |
|
1196
|
143 |
goalw thy [Finite_def] "!!n. n:nat ==> Finite(n)";
|
|
144 |
by (fast_tac (AC_cs addSIs [eqpoll_refl]) 1);
|
|
145 |
val nat_into_Finite = result();
|
|
146 |
|
|
147 |
goalw thy [Finite_def] "~Finite(nat)";
|
|
148 |
by (fast_tac (AC_cs addSDs [eqpoll_imp_lepoll]
|
|
149 |
addIs [Ord_nat RSN (2, ltI) RS lt_not_lepoll RS notE]) 1);
|
|
150 |
val nat_not_Finite = result();
|
|
151 |
|
|
152 |
val le_imp_lepoll = le_imp_subset RS subset_imp_lepoll;
|
|
153 |
|
|
154 |
(* ********************************************************************** *)
|
|
155 |
(* Another elimination rule for EX! *)
|
|
156 |
(* ********************************************************************** *)
|
|
157 |
|
|
158 |
goal thy "!!x. [| EX! x. P(x); P(x); P(y) |] ==> x=y";
|
1207
|
159 |
by (etac ex1E 1);
|
1196
|
160 |
by (res_inst_tac [("b","xa")] (sym RSN (2, trans)) 1);
|
|
161 |
by (fast_tac AC_cs 1);
|
|
162 |
by (fast_tac AC_cs 1);
|
|
163 |
val ex1_two_eq = result();
|
|
164 |
|
|
165 |
(* ********************************************************************** *)
|
|
166 |
(* image of a surjection *)
|
|
167 |
(* ********************************************************************** *)
|
|
168 |
|
|
169 |
goalw thy [surj_def] "!!f. f : surj(A, B) ==> f``A = B";
|
1207
|
170 |
by (etac CollectE 1);
|
1196
|
171 |
by (resolve_tac [subset_refl RSN (2, image_fun) RS ssubst] 1 THEN (assume_tac 1));
|
|
172 |
by (fast_tac (AC_cs addSEs [RepFunE, apply_type]
|
|
173 |
addSIs [RepFunI] addIs [equalityI]) 1);
|
|
174 |
val surj_image_eq = result();
|
|
175 |
|
|
176 |
|
|
177 |
goal thy "!!y. succ(x) lepoll y ==> y ~= 0";
|
|
178 |
by (fast_tac (ZF_cs addSDs [lepoll_0_is_0]) 1);
|
|
179 |
val succ_lepoll_imp_not_empty = result();
|
|
180 |
|
|
181 |
goal thy "!!x. x eqpoll succ(n) ==> x ~= 0";
|
|
182 |
by (fast_tac (AC_cs addSEs [eqpoll_sym RS eqpoll_0_is_0 RS succ_neq_0]) 1);
|
|
183 |
val eqpoll_succ_imp_not_empty = result();
|
|
184 |
|