| author | wenzelm | 
| Mon, 15 Mar 2010 20:27:23 +0100 | |
| changeset 35799 | 7adb03f27b28 | 
| parent 32960 | 69916a850301 | 
| child 46822 | 95f1e700b712 | 
| permissions | -rw-r--r-- | 
| 1478 | 1 | (* Title: ZF/AC/AC_Equiv.thy | 
| 2 | Author: Krzysztof Grabczewski | |
| 991 | 3 | |
| 4 | Axioms AC1 -- AC19 come from "Equivalents of the Axiom of Choice, II" | |
| 5 | by H. Rubin and J.E. Rubin, 1985. | |
| 6 | ||
| 7 | Axiom AC0 comes from "Axiomatic Set Theory" by P. Suppes, 1972. | |
| 8 | ||
| 9 | Some Isabelle proofs of equivalences of these axioms are formalizations of | |
| 1123 | 10 | proofs presented by the Rubins. The others are based on the Rubins' proofs, | 
| 11 | but slightly changed. | |
| 991 | 12 | *) | 
| 13 | ||
| 27678 | 14 | theory AC_Equiv | 
| 15 | imports Main | |
| 16 | begin (*obviously not Main_ZFC*) | |
| 8123 | 17 | |
| 991 | 18 | (* Well Ordering Theorems *) | 
| 24893 | 19 | |
| 20 | definition | |
| 12776 | 21 | "WO1 == \<forall>A. \<exists>R. well_ord(A,R)" | 
| 22 | ||
| 24893 | 23 | definition | 
| 12776 | 24 | "WO2 == \<forall>A. \<exists>a. Ord(a) & A\<approx>a" | 
| 991 | 25 | |
| 24893 | 26 | definition | 
| 12776 | 27 | "WO3 == \<forall>A. \<exists>a. Ord(a) & (\<exists>b. b \<subseteq> a & A\<approx>b)" | 
| 1123 | 28 | |
| 24893 | 29 | definition | 
| 12776 | 30 | "WO4(m) == \<forall>A. \<exists>a f. Ord(a) & domain(f)=a & | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 31 | (\<Union>b<a. f`b) = A & (\<forall>b<a. f`b \<lesssim> m)" | 
| 991 | 32 | |
| 24893 | 33 | definition | 
| 12776 | 34 | "WO5 == \<exists>m \<in> nat. 1\<le>m & WO4(m)" | 
| 991 | 35 | |
| 24893 | 36 | definition | 
| 12776 | 37 | "WO6 == \<forall>A. \<exists>m \<in> nat. 1\<le>m & (\<exists>a f. Ord(a) & domain(f)=a | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 38 | & (\<Union>b<a. f`b) = A & (\<forall>b<a. f`b \<lesssim> m))" | 
| 991 | 39 | |
| 24893 | 40 | definition | 
| 12776 | 41 | "WO7 == \<forall>A. Finite(A) <-> (\<forall>R. well_ord(A,R) --> well_ord(A,converse(R)))" | 
| 991 | 42 | |
| 24893 | 43 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 44 | "WO8 == \<forall>A. (\<exists>f. f \<in> (\<Pi> X \<in> A. X)) --> (\<exists>R. well_ord(A,R))" | 
| 991 | 45 | |
| 46 | ||
| 24893 | 47 | definition | 
| 12776 | 48 | (* Auxiliary concepts needed below *) | 
| 24893 | 49 | pairwise_disjoint :: "i => o" where | 
| 12776 | 50 | "pairwise_disjoint(A) == \<forall>A1 \<in> A. \<forall>A2 \<in> A. A1 Int A2 \<noteq> 0 --> A1=A2" | 
| 991 | 51 | |
| 24893 | 52 | definition | 
| 53 | sets_of_size_between :: "[i, i, i] => o" where | |
| 12776 | 54 | "sets_of_size_between(A,m,n) == \<forall>B \<in> A. m \<lesssim> B & B \<lesssim> n" | 
| 55 | ||
| 991 | 56 | |
| 57 | (* Axioms of Choice *) | |
| 24893 | 58 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 59 |     "AC0 == \<forall>A. \<exists>f. f \<in> (\<Pi> X \<in> Pow(A)-{0}. X)"
 | 
| 991 | 60 | |
| 24893 | 61 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 62 | "AC1 == \<forall>A. 0\<notin>A --> (\<exists>f. f \<in> (\<Pi> X \<in> A. X))" | 
| 12776 | 63 | |
| 24893 | 64 | definition | 
| 12776 | 65 | "AC2 == \<forall>A. 0\<notin>A & pairwise_disjoint(A) | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 66 |                    --> (\<exists>C. \<forall>B \<in> A. \<exists>y. B Int C = {y})"
 | 
| 24893 | 67 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 68 |     "AC3 == \<forall>A B. \<forall>f \<in> A->B. \<exists>g. g \<in> (\<Pi> x \<in> {a \<in> A. f`a\<noteq>0}. f`x)"
 | 
| 991 | 69 | |
| 24893 | 70 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 71 |     "AC4 == \<forall>R A B. (R \<subseteq> A*B --> (\<exists>f. f \<in> (\<Pi> x \<in> domain(R). R``{x})))"
 | 
| 12776 | 72 | |
| 24893 | 73 | definition | 
| 12776 | 74 | "AC5 == \<forall>A B. \<forall>f \<in> A->B. \<exists>g \<in> range(f)->A. \<forall>x \<in> domain(g). f`(g`x) = x" | 
| 75 | ||
| 24893 | 76 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 77 | "AC6 == \<forall>A. 0\<notin>A --> (\<Pi> B \<in> A. B)\<noteq>0" | 
| 991 | 78 | |
| 24893 | 79 | definition | 
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 80 | "AC7 == \<forall>A. 0\<notin>A & (\<forall>B1 \<in> A. \<forall>B2 \<in> A. B1\<approx>B2) --> (\<Pi> B \<in> A. B) \<noteq> 0" | 
| 991 | 81 | |
| 24893 | 82 | definition | 
| 12776 | 83 | "AC8 == \<forall>A. (\<forall>B \<in> A. \<exists>B1 B2. B=<B1,B2> & B1\<approx>B2) | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 84 | --> (\<exists>f. \<forall>B \<in> A. f`B \<in> bij(fst(B),snd(B)))" | 
| 12776 | 85 | |
| 24893 | 86 | definition | 
| 12776 | 87 | "AC9 == \<forall>A. (\<forall>B1 \<in> A. \<forall>B2 \<in> A. B1\<approx>B2) --> | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 88 | (\<exists>f. \<forall>B1 \<in> A. \<forall>B2 \<in> A. f`<B1,B2> \<in> bij(B1,B2))" | 
| 991 | 89 | |
| 24893 | 90 | definition | 
| 12776 | 91 | "AC10(n) == \<forall>A. (\<forall>B \<in> A. ~Finite(B)) --> | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 92 | (\<exists>f. \<forall>B \<in> A. (pairwise_disjoint(f`B) & | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 93 | sets_of_size_between(f`B, 2, succ(n)) & Union(f`B)=B))" | 
| 991 | 94 | |
| 24893 | 95 | definition | 
| 12776 | 96 | "AC11 == \<exists>n \<in> nat. 1\<le>n & AC10(n)" | 
| 97 | ||
| 24893 | 98 | definition | 
| 12776 | 99 | "AC12 == \<forall>A. (\<forall>B \<in> A. ~Finite(B)) --> | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 100 | (\<exists>n \<in> nat. 1\<le>n & (\<exists>f. \<forall>B \<in> A. (pairwise_disjoint(f`B) & | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 101 | sets_of_size_between(f`B, 2, succ(n)) & Union(f`B)=B)))" | 
| 991 | 102 | |
| 24893 | 103 | definition | 
| 12776 | 104 | "AC13(m) == \<forall>A. 0\<notin>A --> (\<exists>f. \<forall>B \<in> A. f`B\<noteq>0 & f`B \<subseteq> B & f`B \<lesssim> m)" | 
| 105 | ||
| 24893 | 106 | definition | 
| 12776 | 107 | "AC14 == \<exists>m \<in> nat. 1\<le>m & AC13(m)" | 
| 108 | ||
| 24893 | 109 | definition | 
| 12776 | 110 | "AC15 == \<forall>A. 0\<notin>A --> | 
| 111 | (\<exists>m \<in> nat. 1\<le>m & (\<exists>f. \<forall>B \<in> A. f`B\<noteq>0 & f`B \<subseteq> B & f`B \<lesssim> m))" | |
| 991 | 112 | |
| 24893 | 113 | definition | 
| 12776 | 114 | "AC16(n, k) == | 
| 115 | \<forall>A. ~Finite(A) --> | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 116 |            (\<exists>T. T \<subseteq> {X \<in> Pow(A). X\<approx>succ(n)} &   
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 117 |            (\<forall>X \<in> {X \<in> Pow(A). X\<approx>succ(k)}. \<exists>! Y. Y \<in> T & X \<subseteq> Y))"
 | 
| 991 | 118 | |
| 24893 | 119 | definition | 
| 12776 | 120 |     "AC17 == \<forall>A. \<forall>g \<in> (Pow(A)-{0} -> A) -> Pow(A)-{0}.   
 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 121 |                    \<exists>f \<in> Pow(A)-{0} -> A. f`(g`f) \<in> g`f"
 | 
| 991 | 122 | |
| 13416 | 123 | locale AC18 = | 
| 124 | assumes AC18: "A\<noteq>0 & (\<forall>a \<in> A. B(a) \<noteq> 0) --> | |
| 125 | ((\<Inter>a \<in> A. \<Union>b \<in> B(a). X(a,b)) = | |
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 126 | (\<Union>f \<in> \<Pi> a \<in> A. B(a). \<Inter>a \<in> A. X(a, f`a)))" | 
| 13416 | 127 | --"AC18 cannot be expressed within the object-logic" | 
| 12776 | 128 | |
| 24893 | 129 | definition | 
| 12776 | 130 | "AC19 == \<forall>A. A\<noteq>0 & 0\<notin>A --> ((\<Inter>a \<in> A. \<Union>b \<in> a. b) = | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
27678diff
changeset | 131 | (\<Union>f \<in> (\<Pi> B \<in> A. B). \<Inter>a \<in> A. f`a))" | 
| 12776 | 132 | |
| 133 | ||
| 991 | 134 | |
| 12776 | 135 | (* ********************************************************************** *) | 
| 136 | (* Theorems concerning ordinals *) | |
| 137 | (* ********************************************************************** *) | |
| 991 | 138 | |
| 12776 | 139 | (* lemma for ordertype_Int *) | 
| 140 | lemma rvimage_id: "rvimage(A,id(A),r) = r Int A*A" | |
| 141 | apply (unfold rvimage_def) | |
| 142 | apply (rule equalityI, safe) | |
| 143 | apply (drule_tac P = "%a. <id (A) `xb,a>:r" in id_conv [THEN subst], | |
| 12820 | 144 | assumption) | 
| 12776 | 145 | apply (drule_tac P = "%a. <a,ya>:r" in id_conv [THEN subst], (assumption+)) | 
| 146 | apply (fast intro: id_conv [THEN ssubst]) | |
| 147 | done | |
| 991 | 148 | |
| 12776 | 149 | (* used only in Hartog.ML *) | 
| 150 | lemma ordertype_Int: | |
| 151 | "well_ord(A,r) ==> ordertype(A, r Int A*A) = ordertype(A,r)" | |
| 152 | apply (rule_tac P = "%a. ordertype (A,a) =ordertype (A,r) " in rvimage_id [THEN subst]) | |
| 153 | apply (erule id_bij [THEN bij_ordertype_vimage]) | |
| 154 | done | |
| 155 | ||
| 156 | lemma lam_sing_bij: "(\<lambda>x \<in> A. {x}) \<in> bij(A, {{x}. x \<in> A})"
 | |
| 157 | apply (rule_tac d = "%z. THE x. z={x}" in lam_bijective)
 | |
| 12814 | 158 | apply (auto simp add: the_equality) | 
| 12776 | 159 | done | 
| 160 | ||
| 161 | lemma inj_strengthen_type: | |
| 162 | "[| f \<in> inj(A, B); !!a. a \<in> A ==> f`a \<in> C |] ==> f \<in> inj(A,C)" | |
| 163 | by (unfold inj_def, blast intro: Pi_type) | |
| 164 | ||
| 165 | lemma nat_not_Finite: "~ Finite(nat)" | |
| 166 | by (unfold Finite_def, blast dest: eqpoll_imp_lepoll ltI lt_not_lepoll) | |
| 991 | 167 | |
| 12776 | 168 | lemmas le_imp_lepoll = le_imp_subset [THEN subset_imp_lepoll] | 
| 169 | ||
| 170 | (* ********************************************************************** *) | |
| 171 | (* Another elimination rule for \<exists>! *) | |
| 172 | (* ********************************************************************** *) | |
| 173 | ||
| 174 | lemma ex1_two_eq: "[| \<exists>! x. P(x); P(x); P(y) |] ==> x=y" | |
| 175 | by blast | |
| 991 | 176 | |
| 12776 | 177 | (* ********************************************************************** *) | 
| 178 | (* image of a surjection *) | |
| 179 | (* ********************************************************************** *) | |
| 991 | 180 | |
| 12776 | 181 | lemma surj_image_eq: "f \<in> surj(A, B) ==> f``A = B" | 
| 182 | apply (unfold surj_def) | |
| 183 | apply (erule CollectE) | |
| 12820 | 184 | apply (rule image_fun [THEN ssubst], assumption, rule subset_refl) | 
| 12776 | 185 | apply (blast dest: apply_type) | 
| 186 | done | |
| 187 | ||
| 188 | ||
| 189 | (* ********************************************************************** *) | |
| 190 | (* Lemmas used in the proofs like WO? ==> AC? *) | |
| 191 | (* ********************************************************************** *) | |
| 991 | 192 | |
| 12776 | 193 | lemma first_in_B: | 
| 194 | "[| well_ord(Union(A),r); 0\<notin>A; B \<in> A |] ==> (THE b. first(b,B,r)) \<in> B" | |
| 195 | by (blast dest!: well_ord_imp_ex1_first | |
| 196 | [THEN theI, THEN first_def [THEN def_imp_iff, THEN iffD1]]) | |
| 197 | ||
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 198 | lemma ex_choice_fun: "[| well_ord(Union(A), R); 0\<notin>A |] ==> \<exists>f. f:(\<Pi> X \<in> A. X)" | 
| 12776 | 199 | by (fast elim!: first_in_B intro!: lam_type) | 
| 991 | 200 | |
| 14171 
0cab06e3bbd0
Extended the notion of letter and digit, such that now one may use greek,
 skalberg parents: 
13416diff
changeset | 201 | lemma ex_choice_fun_Pow: "well_ord(A, R) ==> \<exists>f. f:(\<Pi> X \<in> Pow(A)-{0}. X)"
 | 
| 12776 | 202 | by (fast elim!: well_ord_subset [THEN ex_choice_fun]) | 
| 203 | ||
| 991 | 204 | |
| 12776 | 205 | (* ********************************************************************** *) | 
| 206 | (* Lemmas needed to state when a finite relation is a function. *) | |
| 207 | (* The criteria are cardinalities of the relation and its domain. *) | |
| 208 | (* Used in WO6WO1.ML *) | |
| 209 | (* ********************************************************************** *) | |
| 991 | 210 | |
| 12776 | 211 | (*Using AC we could trivially prove, for all u, domain(u) \<lesssim> u*) | 
| 212 | lemma lepoll_m_imp_domain_lepoll_m: | |
| 213 | "[| m \<in> nat; u \<lesssim> m |] ==> domain(u) \<lesssim> m" | |
| 214 | apply (unfold lepoll_def) | |
| 215 | apply (erule exE) | |
| 216 | apply (rule_tac x = "\<lambda>x \<in> domain(u). LEAST i. \<exists>y. <x,y> \<in> u & f`<x,y> = i" | |
| 217 | in exI) | |
| 218 | apply (rule_tac d = "%y. fst (converse(f) ` y) " in lam_injective) | |
| 219 | apply (fast intro: LeastI2 nat_into_Ord [THEN Ord_in_Ord] | |
| 220 | inj_is_fun [THEN apply_type]) | |
| 221 | apply (erule domainE) | |
| 12820 | 222 | apply (frule inj_is_fun [THEN apply_type], assumption) | 
| 12776 | 223 | apply (rule LeastI2) | 
| 224 | apply (auto elim!: nat_into_Ord [THEN Ord_in_Ord]) | |
| 225 | done | |
| 991 | 226 | |
| 12776 | 227 | lemma rel_domain_ex1: | 
| 228 | "[| succ(m) \<lesssim> domain(r); r \<lesssim> succ(m); m \<in> nat |] ==> function(r)" | |
| 229 | apply (unfold function_def, safe) | |
| 230 | apply (rule ccontr) | |
| 231 | apply (fast elim!: lepoll_trans [THEN succ_lepoll_natE] | |
| 232 | lepoll_m_imp_domain_lepoll_m [OF _ Diff_sing_lepoll] | |
| 233 | elim: domain_Diff_eq [OF _ not_sym, THEN subst]) | |
| 234 | done | |
| 235 | ||
| 236 | lemma rel_is_fun: | |
| 237 | "[| succ(m) \<lesssim> domain(r); r \<lesssim> succ(m); m \<in> nat; | |
| 238 | r \<subseteq> A*B; A=domain(r) |] ==> r \<in> A->B" | |
| 239 | by (simp add: Pi_iff rel_domain_ex1) | |
| 240 | ||
| 991 | 241 | end |