| author | boehmes | 
| Mon, 31 Aug 2009 12:22:15 +0200 | |
| changeset 32455 | c71414177792 | 
| parent 26056 | 6a0801279f4c | 
| child 32960 | 69916a850301 | 
| permissions | -rw-r--r-- | 
| 1478 | 1 | (* Title: ZF/Cardinal.thy | 
| 435 | 2 | ID: $Id$ | 
| 1478 | 3 | Author: Lawrence C Paulson, Cambridge University Computer Laboratory | 
| 435 | 4 | Copyright 1994 University of Cambridge | 
| 5 | ||
| 13328 | 6 | *) | 
| 13221 | 7 | |
| 13328 | 8 | header{*Cardinal Numbers Without the Axiom of Choice*}
 | 
| 435 | 9 | |
| 26056 
6a0801279f4c
Made theory names in ZF disjoint from HOL theory names to allow loading both developments
 krauss parents: 
24893diff
changeset | 10 | theory Cardinal imports OrderType Finite Nat_ZF Sum begin | 
| 13221 | 11 | |
| 24893 | 12 | definition | 
| 435 | 13 | (*least ordinal operator*) | 
| 24893 | 14 | Least :: "(i=>o) => i" (binder "LEAST " 10) where | 
| 13221 | 15 | "Least(P) == THE i. Ord(i) & P(i) & (ALL j. j<i --> ~P(j))" | 
| 435 | 16 | |
| 24893 | 17 | definition | 
| 18 | eqpoll :: "[i,i] => o" (infixl "eqpoll" 50) where | |
| 13221 | 19 | "A eqpoll B == EX f. f: bij(A,B)" | 
| 435 | 20 | |
| 24893 | 21 | definition | 
| 22 | lepoll :: "[i,i] => o" (infixl "lepoll" 50) where | |
| 13221 | 23 | "A lepoll B == EX f. f: inj(A,B)" | 
| 435 | 24 | |
| 24893 | 25 | definition | 
| 26 | lesspoll :: "[i,i] => o" (infixl "lesspoll" 50) where | |
| 13221 | 27 | "A lesspoll B == A lepoll B & ~(A eqpoll B)" | 
| 832 | 28 | |
| 24893 | 29 | definition | 
| 30 |   cardinal :: "i=>i"           ("|_|")  where
 | |
| 13221 | 31 | "|A| == LEAST i. i eqpoll A" | 
| 435 | 32 | |
| 24893 | 33 | definition | 
| 34 | Finite :: "i=>o" where | |
| 13221 | 35 | "Finite(A) == EX n:nat. A eqpoll n" | 
| 435 | 36 | |
| 24893 | 37 | definition | 
| 38 | Card :: "i=>o" where | |
| 13221 | 39 | "Card(i) == (i = |i|)" | 
| 435 | 40 | |
| 21524 | 41 | notation (xsymbols) | 
| 42 | eqpoll (infixl "\<approx>" 50) and | |
| 43 | lepoll (infixl "\<lesssim>" 50) and | |
| 44 | lesspoll (infixl "\<prec>" 50) and | |
| 45 | Least (binder "\<mu>" 10) | |
| 13221 | 46 | |
| 21524 | 47 | notation (HTML output) | 
| 48 | eqpoll (infixl "\<approx>" 50) and | |
| 49 | Least (binder "\<mu>" 10) | |
| 50 | ||
| 14565 | 51 | |
| 13357 | 52 | subsection{*The Schroeder-Bernstein Theorem*}
 | 
| 53 | text{*See Davey and Priestly, page 106*}
 | |
| 13221 | 54 | |
| 55 | (** Lemma: Banach's Decomposition Theorem **) | |
| 56 | ||
| 57 | lemma decomp_bnd_mono: "bnd_mono(X, %W. X - g``(Y - f``W))" | |
| 58 | by (rule bnd_monoI, blast+) | |
| 59 | ||
| 60 | lemma Banach_last_equation: | |
| 61 | "g: Y->X | |
| 62 | ==> g``(Y - f`` lfp(X, %W. X - g``(Y - f``W))) = | |
| 63 | X - lfp(X, %W. X - g``(Y - f``W))" | |
| 64 | apply (rule_tac P = "%u. ?v = X-u" | |
| 65 | in decomp_bnd_mono [THEN lfp_unfold, THEN ssubst]) | |
| 66 | apply (simp add: double_complement fun_is_rel [THEN image_subset]) | |
| 67 | done | |
| 68 | ||
| 69 | lemma decomposition: | |
| 70 | "[| f: X->Y; g: Y->X |] ==> | |
| 71 | EX XA XB YA YB. (XA Int XB = 0) & (XA Un XB = X) & | |
| 72 | (YA Int YB = 0) & (YA Un YB = Y) & | |
| 73 | f``XA=YA & g``YB=XB" | |
| 74 | apply (intro exI conjI) | |
| 75 | apply (rule_tac [6] Banach_last_equation) | |
| 76 | apply (rule_tac [5] refl) | |
| 77 | apply (assumption | | |
| 78 | rule Diff_disjoint Diff_partition fun_is_rel image_subset lfp_subset)+ | |
| 79 | done | |
| 80 | ||
| 81 | lemma schroeder_bernstein: | |
| 82 | "[| f: inj(X,Y); g: inj(Y,X) |] ==> EX h. h: bij(X,Y)" | |
| 83 | apply (insert decomposition [of f X Y g]) | |
| 84 | apply (simp add: inj_is_fun) | |
| 85 | apply (blast intro!: restrict_bij bij_disjoint_Un intro: bij_converse_bij) | |
| 86 | (* The instantiation of exI to "restrict(f,XA) Un converse(restrict(g,YB))" | |
| 87 | is forced by the context!! *) | |
| 88 | done | |
| 89 | ||
| 90 | ||
| 91 | (** Equipollence is an equivalence relation **) | |
| 92 | ||
| 93 | lemma bij_imp_eqpoll: "f: bij(A,B) ==> A \<approx> B" | |
| 94 | apply (unfold eqpoll_def) | |
| 95 | apply (erule exI) | |
| 96 | done | |
| 97 | ||
| 98 | (*A eqpoll A*) | |
| 99 | lemmas eqpoll_refl = id_bij [THEN bij_imp_eqpoll, standard, simp] | |
| 100 | ||
| 101 | lemma eqpoll_sym: "X \<approx> Y ==> Y \<approx> X" | |
| 102 | apply (unfold eqpoll_def) | |
| 103 | apply (blast intro: bij_converse_bij) | |
| 104 | done | |
| 105 | ||
| 106 | lemma eqpoll_trans: | |
| 107 | "[| X \<approx> Y; Y \<approx> Z |] ==> X \<approx> Z" | |
| 108 | apply (unfold eqpoll_def) | |
| 109 | apply (blast intro: comp_bij) | |
| 110 | done | |
| 111 | ||
| 112 | (** Le-pollence is a partial ordering **) | |
| 113 | ||
| 114 | lemma subset_imp_lepoll: "X<=Y ==> X \<lesssim> Y" | |
| 115 | apply (unfold lepoll_def) | |
| 116 | apply (rule exI) | |
| 117 | apply (erule id_subset_inj) | |
| 118 | done | |
| 119 | ||
| 120 | lemmas lepoll_refl = subset_refl [THEN subset_imp_lepoll, standard, simp] | |
| 121 | ||
| 122 | lemmas le_imp_lepoll = le_imp_subset [THEN subset_imp_lepoll, standard] | |
| 123 | ||
| 124 | lemma eqpoll_imp_lepoll: "X \<approx> Y ==> X \<lesssim> Y" | |
| 125 | by (unfold eqpoll_def bij_def lepoll_def, blast) | |
| 126 | ||
| 127 | lemma lepoll_trans: "[| X \<lesssim> Y; Y \<lesssim> Z |] ==> X \<lesssim> Z" | |
| 128 | apply (unfold lepoll_def) | |
| 129 | apply (blast intro: comp_inj) | |
| 130 | done | |
| 131 | ||
| 132 | (*Asymmetry law*) | |
| 133 | lemma eqpollI: "[| X \<lesssim> Y; Y \<lesssim> X |] ==> X \<approx> Y" | |
| 134 | apply (unfold lepoll_def eqpoll_def) | |
| 135 | apply (elim exE) | |
| 136 | apply (rule schroeder_bernstein, assumption+) | |
| 137 | done | |
| 138 | ||
| 139 | lemma eqpollE: | |
| 140 | "[| X \<approx> Y; [| X \<lesssim> Y; Y \<lesssim> X |] ==> P |] ==> P" | |
| 141 | by (blast intro: eqpoll_imp_lepoll eqpoll_sym) | |
| 142 | ||
| 143 | lemma eqpoll_iff: "X \<approx> Y <-> X \<lesssim> Y & Y \<lesssim> X" | |
| 144 | by (blast intro: eqpollI elim!: eqpollE) | |
| 145 | ||
| 146 | lemma lepoll_0_is_0: "A \<lesssim> 0 ==> A = 0" | |
| 147 | apply (unfold lepoll_def inj_def) | |
| 148 | apply (blast dest: apply_type) | |
| 149 | done | |
| 150 | ||
| 151 | (*0 \<lesssim> Y*) | |
| 152 | lemmas empty_lepollI = empty_subsetI [THEN subset_imp_lepoll, standard] | |
| 153 | ||
| 154 | lemma lepoll_0_iff: "A \<lesssim> 0 <-> A=0" | |
| 155 | by (blast intro: lepoll_0_is_0 lepoll_refl) | |
| 156 | ||
| 157 | lemma Un_lepoll_Un: | |
| 158 | "[| A \<lesssim> B; C \<lesssim> D; B Int D = 0 |] ==> A Un C \<lesssim> B Un D" | |
| 159 | apply (unfold lepoll_def) | |
| 160 | apply (blast intro: inj_disjoint_Un) | |
| 161 | done | |
| 162 | ||
| 163 | (*A eqpoll 0 ==> A=0*) | |
| 164 | lemmas eqpoll_0_is_0 = eqpoll_imp_lepoll [THEN lepoll_0_is_0, standard] | |
| 165 | ||
| 166 | lemma eqpoll_0_iff: "A \<approx> 0 <-> A=0" | |
| 167 | by (blast intro: eqpoll_0_is_0 eqpoll_refl) | |
| 168 | ||
| 169 | lemma eqpoll_disjoint_Un: | |
| 170 | "[| A \<approx> B; C \<approx> D; A Int C = 0; B Int D = 0 |] | |
| 171 | ==> A Un C \<approx> B Un D" | |
| 172 | apply (unfold eqpoll_def) | |
| 173 | apply (blast intro: bij_disjoint_Un) | |
| 174 | done | |
| 175 | ||
| 176 | ||
| 13356 | 177 | subsection{*lesspoll: contributions by Krzysztof Grabczewski *}
 | 
| 13221 | 178 | |
| 179 | lemma lesspoll_not_refl: "~ (i \<prec> i)" | |
| 180 | by (simp add: lesspoll_def) | |
| 181 | ||
| 182 | lemma lesspoll_irrefl [elim!]: "i \<prec> i ==> P" | |
| 183 | by (simp add: lesspoll_def) | |
| 184 | ||
| 185 | lemma lesspoll_imp_lepoll: "A \<prec> B ==> A \<lesssim> B" | |
| 186 | by (unfold lesspoll_def, blast) | |
| 187 | ||
| 188 | lemma lepoll_well_ord: "[| A \<lesssim> B; well_ord(B,r) |] ==> EX s. well_ord(A,s)" | |
| 189 | apply (unfold lepoll_def) | |
| 190 | apply (blast intro: well_ord_rvimage) | |
| 191 | done | |
| 192 | ||
| 193 | lemma lepoll_iff_leqpoll: "A \<lesssim> B <-> A \<prec> B | A \<approx> B" | |
| 194 | apply (unfold lesspoll_def) | |
| 195 | apply (blast intro!: eqpollI elim!: eqpollE) | |
| 196 | done | |
| 197 | ||
| 198 | lemma inj_not_surj_succ: | |
| 199 | "[| f : inj(A, succ(m)); f ~: surj(A, succ(m)) |] ==> EX f. f:inj(A,m)" | |
| 200 | apply (unfold inj_def surj_def) | |
| 201 | apply (safe del: succE) | |
| 202 | apply (erule swap, rule exI) | |
| 203 | apply (rule_tac a = "lam z:A. if f`z=m then y else f`z" in CollectI) | |
| 204 | txt{*the typing condition*}
 | |
| 205 | apply (best intro!: if_type [THEN lam_type] elim: apply_funtype [THEN succE]) | |
| 206 | txt{*Proving it's injective*}
 | |
| 207 | apply simp | |
| 208 | apply blast | |
| 209 | done | |
| 210 | ||
| 211 | (** Variations on transitivity **) | |
| 212 | ||
| 213 | lemma lesspoll_trans: | |
| 214 | "[| X \<prec> Y; Y \<prec> Z |] ==> X \<prec> Z" | |
| 215 | apply (unfold lesspoll_def) | |
| 216 | apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) | |
| 217 | done | |
| 218 | ||
| 219 | lemma lesspoll_trans1: | |
| 220 | "[| X \<lesssim> Y; Y \<prec> Z |] ==> X \<prec> Z" | |
| 221 | apply (unfold lesspoll_def) | |
| 222 | apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) | |
| 223 | done | |
| 224 | ||
| 225 | lemma lesspoll_trans2: | |
| 226 | "[| X \<prec> Y; Y \<lesssim> Z |] ==> X \<prec> Z" | |
| 227 | apply (unfold lesspoll_def) | |
| 228 | apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) | |
| 229 | done | |
| 230 | ||
| 231 | ||
| 232 | (** LEAST -- the least number operator [from HOL/Univ.ML] **) | |
| 233 | ||
| 234 | lemma Least_equality: | |
| 235 | "[| P(i); Ord(i); !!x. x<i ==> ~P(x) |] ==> (LEAST x. P(x)) = i" | |
| 236 | apply (unfold Least_def) | |
| 237 | apply (rule the_equality, blast) | |
| 238 | apply (elim conjE) | |
| 239 | apply (erule Ord_linear_lt, assumption, blast+) | |
| 240 | done | |
| 241 | ||
| 242 | lemma LeastI: "[| P(i); Ord(i) |] ==> P(LEAST x. P(x))" | |
| 243 | apply (erule rev_mp) | |
| 244 | apply (erule_tac i=i in trans_induct) | |
| 245 | apply (rule impI) | |
| 246 | apply (rule classical) | |
| 247 | apply (blast intro: Least_equality [THEN ssubst] elim!: ltE) | |
| 248 | done | |
| 249 | ||
| 250 | (*Proof is almost identical to the one above!*) | |
| 251 | lemma Least_le: "[| P(i); Ord(i) |] ==> (LEAST x. P(x)) le i" | |
| 252 | apply (erule rev_mp) | |
| 253 | apply (erule_tac i=i in trans_induct) | |
| 254 | apply (rule impI) | |
| 255 | apply (rule classical) | |
| 256 | apply (subst Least_equality, assumption+) | |
| 257 | apply (erule_tac [2] le_refl) | |
| 258 | apply (blast elim: ltE intro: leI ltI lt_trans1) | |
| 259 | done | |
| 260 | ||
| 261 | (*LEAST really is the smallest*) | |
| 262 | lemma less_LeastE: "[| P(i); i < (LEAST x. P(x)) |] ==> Q" | |
| 263 | apply (rule Least_le [THEN [2] lt_trans2, THEN lt_irrefl], assumption+) | |
| 264 | apply (simp add: lt_Ord) | |
| 265 | done | |
| 266 | ||
| 267 | (*Easier to apply than LeastI: conclusion has only one occurrence of P*) | |
| 268 | lemma LeastI2: | |
| 269 | "[| P(i); Ord(i); !!j. P(j) ==> Q(j) |] ==> Q(LEAST j. P(j))" | |
| 270 | by (blast intro: LeastI ) | |
| 271 | ||
| 272 | (*If there is no such P then LEAST is vacuously 0*) | |
| 273 | lemma Least_0: | |
| 274 | "[| ~ (EX i. Ord(i) & P(i)) |] ==> (LEAST x. P(x)) = 0" | |
| 275 | apply (unfold Least_def) | |
| 276 | apply (rule the_0, blast) | |
| 277 | done | |
| 278 | ||
| 13356 | 279 | lemma Ord_Least [intro,simp,TC]: "Ord(LEAST x. P(x))" | 
| 14153 | 280 | apply (case_tac "\<exists>i. Ord(i) & P(i)") | 
| 13221 | 281 | apply safe | 
| 282 | apply (rule Least_le [THEN ltE]) | |
| 283 | prefer 3 apply assumption+ | |
| 284 | apply (erule Least_0 [THEN ssubst]) | |
| 285 | apply (rule Ord_0) | |
| 286 | done | |
| 287 | ||
| 288 | ||
| 289 | (** Basic properties of cardinals **) | |
| 290 | ||
| 291 | (*Not needed for simplification, but helpful below*) | |
| 292 | lemma Least_cong: | |
| 293 | "(!!y. P(y) <-> Q(y)) ==> (LEAST x. P(x)) = (LEAST x. Q(x))" | |
| 294 | by simp | |
| 295 | ||
| 296 | (*Need AC to get X \<lesssim> Y ==> |X| le |Y|; see well_ord_lepoll_imp_Card_le | |
| 297 | Converse also requires AC, but see well_ord_cardinal_eqE*) | |
| 298 | lemma cardinal_cong: "X \<approx> Y ==> |X| = |Y|" | |
| 299 | apply (unfold eqpoll_def cardinal_def) | |
| 300 | apply (rule Least_cong) | |
| 301 | apply (blast intro: comp_bij bij_converse_bij) | |
| 302 | done | |
| 303 | ||
| 304 | (*Under AC, the premise becomes trivial; one consequence is ||A|| = |A|*) | |
| 305 | lemma well_ord_cardinal_eqpoll: | |
| 306 | "well_ord(A,r) ==> |A| \<approx> A" | |
| 307 | apply (unfold cardinal_def) | |
| 308 | apply (rule LeastI) | |
| 309 | apply (erule_tac [2] Ord_ordertype) | |
| 310 | apply (erule ordermap_bij [THEN bij_converse_bij, THEN bij_imp_eqpoll]) | |
| 311 | done | |
| 312 | ||
| 313 | (* Ord(A) ==> |A| \<approx> A *) | |
| 314 | lemmas Ord_cardinal_eqpoll = well_ord_Memrel [THEN well_ord_cardinal_eqpoll] | |
| 315 | ||
| 316 | lemma well_ord_cardinal_eqE: | |
| 317 | "[| well_ord(X,r); well_ord(Y,s); |X| = |Y| |] ==> X \<approx> Y" | |
| 318 | apply (rule eqpoll_sym [THEN eqpoll_trans]) | |
| 319 | apply (erule well_ord_cardinal_eqpoll) | |
| 320 | apply (simp (no_asm_simp) add: well_ord_cardinal_eqpoll) | |
| 321 | done | |
| 322 | ||
| 323 | lemma well_ord_cardinal_eqpoll_iff: | |
| 324 | "[| well_ord(X,r); well_ord(Y,s) |] ==> |X| = |Y| <-> X \<approx> Y" | |
| 325 | by (blast intro: cardinal_cong well_ord_cardinal_eqE) | |
| 326 | ||
| 327 | ||
| 328 | (** Observations from Kunen, page 28 **) | |
| 329 | ||
| 330 | lemma Ord_cardinal_le: "Ord(i) ==> |i| le i" | |
| 331 | apply (unfold cardinal_def) | |
| 332 | apply (erule eqpoll_refl [THEN Least_le]) | |
| 333 | done | |
| 334 | ||
| 335 | lemma Card_cardinal_eq: "Card(K) ==> |K| = K" | |
| 336 | apply (unfold Card_def) | |
| 337 | apply (erule sym) | |
| 338 | done | |
| 339 | ||
| 340 | (* Could replace the ~(j \<approx> i) by ~(i \<lesssim> j) *) | |
| 341 | lemma CardI: "[| Ord(i); !!j. j<i ==> ~(j \<approx> i) |] ==> Card(i)" | |
| 342 | apply (unfold Card_def cardinal_def) | |
| 343 | apply (subst Least_equality) | |
| 344 | apply (blast intro: eqpoll_refl )+ | |
| 345 | done | |
| 346 | ||
| 347 | lemma Card_is_Ord: "Card(i) ==> Ord(i)" | |
| 348 | apply (unfold Card_def cardinal_def) | |
| 349 | apply (erule ssubst) | |
| 350 | apply (rule Ord_Least) | |
| 351 | done | |
| 352 | ||
| 353 | lemma Card_cardinal_le: "Card(K) ==> K le |K|" | |
| 354 | apply (simp (no_asm_simp) add: Card_is_Ord Card_cardinal_eq) | |
| 355 | done | |
| 356 | ||
| 357 | lemma Ord_cardinal [simp,intro!]: "Ord(|A|)" | |
| 358 | apply (unfold cardinal_def) | |
| 359 | apply (rule Ord_Least) | |
| 360 | done | |
| 361 | ||
| 362 | (*The cardinals are the initial ordinals*) | |
| 363 | lemma Card_iff_initial: "Card(K) <-> Ord(K) & (ALL j. j<K --> ~ j \<approx> K)" | |
| 364 | apply (safe intro!: CardI Card_is_Ord) | |
| 365 | prefer 2 apply blast | |
| 366 | apply (unfold Card_def cardinal_def) | |
| 367 | apply (rule less_LeastE) | |
| 368 | apply (erule_tac [2] subst, assumption+) | |
| 369 | done | |
| 370 | ||
| 371 | lemma lt_Card_imp_lesspoll: "[| Card(a); i<a |] ==> i \<prec> a" | |
| 372 | apply (unfold lesspoll_def) | |
| 373 | apply (drule Card_iff_initial [THEN iffD1]) | |
| 374 | apply (blast intro!: leI [THEN le_imp_lepoll]) | |
| 375 | done | |
| 376 | ||
| 377 | lemma Card_0: "Card(0)" | |
| 378 | apply (rule Ord_0 [THEN CardI]) | |
| 379 | apply (blast elim!: ltE) | |
| 380 | done | |
| 381 | ||
| 382 | lemma Card_Un: "[| Card(K); Card(L) |] ==> Card(K Un L)" | |
| 383 | apply (rule Ord_linear_le [of K L]) | |
| 384 | apply (simp_all add: subset_Un_iff [THEN iffD1] Card_is_Ord le_imp_subset | |
| 385 | subset_Un_iff2 [THEN iffD1]) | |
| 386 | done | |
| 387 | ||
| 388 | (*Infinite unions of cardinals? See Devlin, Lemma 6.7, page 98*) | |
| 389 | ||
| 390 | lemma Card_cardinal: "Card(|A|)" | |
| 391 | apply (unfold cardinal_def) | |
| 14153 | 392 | apply (case_tac "EX i. Ord (i) & i \<approx> A") | 
| 13221 | 393 |  txt{*degenerate case*}
 | 
| 394 | prefer 2 apply (erule Least_0 [THEN ssubst], rule Card_0) | |
| 395 | txt{*real case: A is isomorphic to some ordinal*}
 | |
| 396 | apply (rule Ord_Least [THEN CardI], safe) | |
| 397 | apply (rule less_LeastE) | |
| 398 | prefer 2 apply assumption | |
| 399 | apply (erule eqpoll_trans) | |
| 400 | apply (best intro: LeastI ) | |
| 401 | done | |
| 402 | ||
| 403 | (*Kunen's Lemma 10.5*) | |
| 404 | lemma cardinal_eq_lemma: "[| |i| le j; j le i |] ==> |j| = |i|" | |
| 405 | apply (rule eqpollI [THEN cardinal_cong]) | |
| 406 | apply (erule le_imp_lepoll) | |
| 407 | apply (rule lepoll_trans) | |
| 408 | apply (erule_tac [2] le_imp_lepoll) | |
| 409 | apply (rule eqpoll_sym [THEN eqpoll_imp_lepoll]) | |
| 410 | apply (rule Ord_cardinal_eqpoll) | |
| 411 | apply (elim ltE Ord_succD) | |
| 412 | done | |
| 413 | ||
| 414 | lemma cardinal_mono: "i le j ==> |i| le |j|" | |
| 415 | apply (rule_tac i = "|i|" and j = "|j|" in Ord_linear_le) | |
| 416 | apply (safe intro!: Ord_cardinal le_eqI) | |
| 417 | apply (rule cardinal_eq_lemma) | |
| 418 | prefer 2 apply assumption | |
| 419 | apply (erule le_trans) | |
| 420 | apply (erule ltE) | |
| 421 | apply (erule Ord_cardinal_le) | |
| 422 | done | |
| 423 | ||
| 424 | (*Since we have |succ(nat)| le |nat|, the converse of cardinal_mono fails!*) | |
| 425 | lemma cardinal_lt_imp_lt: "[| |i| < |j|; Ord(i); Ord(j) |] ==> i < j" | |
| 426 | apply (rule Ord_linear2 [of i j], assumption+) | |
| 427 | apply (erule lt_trans2 [THEN lt_irrefl]) | |
| 428 | apply (erule cardinal_mono) | |
| 429 | done | |
| 430 | ||
| 431 | lemma Card_lt_imp_lt: "[| |i| < K; Ord(i); Card(K) |] ==> i < K" | |
| 432 | apply (simp (no_asm_simp) add: cardinal_lt_imp_lt Card_is_Ord Card_cardinal_eq) | |
| 433 | done | |
| 434 | ||
| 435 | lemma Card_lt_iff: "[| Ord(i); Card(K) |] ==> (|i| < K) <-> (i < K)" | |
| 436 | by (blast intro: Card_lt_imp_lt Ord_cardinal_le [THEN lt_trans1]) | |
| 437 | ||
| 438 | lemma Card_le_iff: "[| Ord(i); Card(K) |] ==> (K le |i|) <-> (K le i)" | |
| 13269 | 439 | by (simp add: Card_lt_iff Card_is_Ord Ord_cardinal not_lt_iff_le [THEN iff_sym]) | 
| 13221 | 440 | |
| 441 | (*Can use AC or finiteness to discharge first premise*) | |
| 442 | lemma well_ord_lepoll_imp_Card_le: | |
| 443 | "[| well_ord(B,r); A \<lesssim> B |] ==> |A| le |B|" | |
| 444 | apply (rule_tac i = "|A|" and j = "|B|" in Ord_linear_le) | |
| 445 | apply (safe intro!: Ord_cardinal le_eqI) | |
| 446 | apply (rule eqpollI [THEN cardinal_cong], assumption) | |
| 447 | apply (rule lepoll_trans) | |
| 448 | apply (rule well_ord_cardinal_eqpoll [THEN eqpoll_sym, THEN eqpoll_imp_lepoll], assumption) | |
| 449 | apply (erule le_imp_lepoll [THEN lepoll_trans]) | |
| 450 | apply (rule eqpoll_imp_lepoll) | |
| 451 | apply (unfold lepoll_def) | |
| 452 | apply (erule exE) | |
| 453 | apply (rule well_ord_cardinal_eqpoll) | |
| 454 | apply (erule well_ord_rvimage, assumption) | |
| 455 | done | |
| 456 | ||
| 457 | lemma lepoll_cardinal_le: "[| A \<lesssim> i; Ord(i) |] ==> |A| le i" | |
| 458 | apply (rule le_trans) | |
| 459 | apply (erule well_ord_Memrel [THEN well_ord_lepoll_imp_Card_le], assumption) | |
| 460 | apply (erule Ord_cardinal_le) | |
| 461 | done | |
| 462 | ||
| 463 | lemma lepoll_Ord_imp_eqpoll: "[| A \<lesssim> i; Ord(i) |] ==> |A| \<approx> A" | |
| 464 | by (blast intro: lepoll_cardinal_le well_ord_Memrel well_ord_cardinal_eqpoll dest!: lepoll_well_ord) | |
| 465 | ||
| 14046 | 466 | lemma lesspoll_imp_eqpoll: "[| A \<prec> i; Ord(i) |] ==> |A| \<approx> A" | 
| 13221 | 467 | apply (unfold lesspoll_def) | 
| 468 | apply (blast intro: lepoll_Ord_imp_eqpoll) | |
| 469 | done | |
| 470 | ||
| 14046 | 471 | lemma cardinal_subset_Ord: "[|A<=i; Ord(i)|] ==> |A| <= i" | 
| 472 | apply (drule subset_imp_lepoll [THEN lepoll_cardinal_le]) | |
| 473 | apply (auto simp add: lt_def) | |
| 474 | apply (blast intro: Ord_trans) | |
| 475 | done | |
| 13221 | 476 | |
| 13356 | 477 | subsection{*The finite cardinals *}
 | 
| 13221 | 478 | |
| 479 | lemma cons_lepoll_consD: | |
| 480 | "[| cons(u,A) \<lesssim> cons(v,B); u~:A; v~:B |] ==> A \<lesssim> B" | |
| 481 | apply (unfold lepoll_def inj_def, safe) | |
| 482 | apply (rule_tac x = "lam x:A. if f`x=v then f`u else f`x" in exI) | |
| 483 | apply (rule CollectI) | |
| 484 | (*Proving it's in the function space A->B*) | |
| 485 | apply (rule if_type [THEN lam_type]) | |
| 486 | apply (blast dest: apply_funtype) | |
| 487 | apply (blast elim!: mem_irrefl dest: apply_funtype) | |
| 488 | (*Proving it's injective*) | |
| 489 | apply (simp (no_asm_simp)) | |
| 490 | apply blast | |
| 491 | done | |
| 492 | ||
| 493 | lemma cons_eqpoll_consD: "[| cons(u,A) \<approx> cons(v,B); u~:A; v~:B |] ==> A \<approx> B" | |
| 494 | apply (simp add: eqpoll_iff) | |
| 495 | apply (blast intro: cons_lepoll_consD) | |
| 496 | done | |
| 497 | ||
| 498 | (*Lemma suggested by Mike Fourman*) | |
| 499 | lemma succ_lepoll_succD: "succ(m) \<lesssim> succ(n) ==> m \<lesssim> n" | |
| 500 | apply (unfold succ_def) | |
| 501 | apply (erule cons_lepoll_consD) | |
| 502 | apply (rule mem_not_refl)+ | |
| 503 | done | |
| 504 | ||
| 505 | lemma nat_lepoll_imp_le [rule_format]: | |
| 506 | "m:nat ==> ALL n: nat. m \<lesssim> n --> m le n" | |
| 13244 | 507 | apply (induct_tac m) | 
| 13221 | 508 | apply (blast intro!: nat_0_le) | 
| 509 | apply (rule ballI) | |
| 13784 | 510 | apply (erule_tac n = n in natE) | 
| 13221 | 511 | apply (simp (no_asm_simp) add: lepoll_def inj_def) | 
| 512 | apply (blast intro!: succ_leI dest!: succ_lepoll_succD) | |
| 513 | done | |
| 514 | ||
| 515 | lemma nat_eqpoll_iff: "[| m:nat; n: nat |] ==> m \<approx> n <-> m = n" | |
| 516 | apply (rule iffI) | |
| 517 | apply (blast intro: nat_lepoll_imp_le le_anti_sym elim!: eqpollE) | |
| 518 | apply (simp add: eqpoll_refl) | |
| 519 | done | |
| 520 | ||
| 521 | (*The object of all this work: every natural number is a (finite) cardinal*) | |
| 522 | lemma nat_into_Card: | |
| 523 | "n: nat ==> Card(n)" | |
| 524 | apply (unfold Card_def cardinal_def) | |
| 525 | apply (subst Least_equality) | |
| 526 | apply (rule eqpoll_refl) | |
| 527 | apply (erule nat_into_Ord) | |
| 528 | apply (simp (no_asm_simp) add: lt_nat_in_nat [THEN nat_eqpoll_iff]) | |
| 529 | apply (blast elim!: lt_irrefl)+ | |
| 530 | done | |
| 531 | ||
| 532 | lemmas cardinal_0 = nat_0I [THEN nat_into_Card, THEN Card_cardinal_eq, iff] | |
| 533 | lemmas cardinal_1 = nat_1I [THEN nat_into_Card, THEN Card_cardinal_eq, iff] | |
| 534 | ||
| 535 | ||
| 536 | (*Part of Kunen's Lemma 10.6*) | |
| 537 | lemma succ_lepoll_natE: "[| succ(n) \<lesssim> n; n:nat |] ==> P" | |
| 538 | by (rule nat_lepoll_imp_le [THEN lt_irrefl], auto) | |
| 539 | ||
| 540 | lemma n_lesspoll_nat: "n \<in> nat ==> n \<prec> nat" | |
| 541 | apply (unfold lesspoll_def) | |
| 542 | apply (fast elim!: Ord_nat [THEN [2] ltI [THEN leI, THEN le_imp_lepoll]] | |
| 543 | eqpoll_sym [THEN eqpoll_imp_lepoll] | |
| 544 | intro: Ord_nat [THEN [2] nat_succI [THEN ltI], THEN leI, | |
| 545 | THEN le_imp_lepoll, THEN lepoll_trans, THEN succ_lepoll_natE]) | |
| 546 | done | |
| 547 | ||
| 548 | lemma nat_lepoll_imp_ex_eqpoll_n: | |
| 549 | "[| n \<in> nat; nat \<lesssim> X |] ==> \<exists>Y. Y \<subseteq> X & n \<approx> Y" | |
| 550 | apply (unfold lepoll_def eqpoll_def) | |
| 551 | apply (fast del: subsetI subsetCE | |
| 552 | intro!: subset_SIs | |
| 553 | dest!: Ord_nat [THEN [2] OrdmemD, THEN [2] restrict_inj] | |
| 554 | elim!: restrict_bij | |
| 555 | inj_is_fun [THEN fun_is_rel, THEN image_subset]) | |
| 556 | done | |
| 557 | ||
| 558 | ||
| 559 | (** lepoll, \<prec> and natural numbers **) | |
| 560 | ||
| 561 | lemma lepoll_imp_lesspoll_succ: | |
| 562 | "[| A \<lesssim> m; m:nat |] ==> A \<prec> succ(m)" | |
| 563 | apply (unfold lesspoll_def) | |
| 564 | apply (rule conjI) | |
| 565 | apply (blast intro: subset_imp_lepoll [THEN [2] lepoll_trans]) | |
| 566 | apply (rule notI) | |
| 567 | apply (drule eqpoll_sym [THEN eqpoll_imp_lepoll]) | |
| 568 | apply (drule lepoll_trans, assumption) | |
| 569 | apply (erule succ_lepoll_natE, assumption) | |
| 570 | done | |
| 571 | ||
| 572 | lemma lesspoll_succ_imp_lepoll: | |
| 573 | "[| A \<prec> succ(m); m:nat |] ==> A \<lesssim> m" | |
| 574 | apply (unfold lesspoll_def lepoll_def eqpoll_def bij_def, clarify) | |
| 575 | apply (blast intro!: inj_not_surj_succ) | |
| 576 | done | |
| 577 | ||
| 578 | lemma lesspoll_succ_iff: "m:nat ==> A \<prec> succ(m) <-> A \<lesssim> m" | |
| 579 | by (blast intro!: lepoll_imp_lesspoll_succ lesspoll_succ_imp_lepoll) | |
| 580 | ||
| 581 | lemma lepoll_succ_disj: "[| A \<lesssim> succ(m); m:nat |] ==> A \<lesssim> m | A \<approx> succ(m)" | |
| 582 | apply (rule disjCI) | |
| 583 | apply (rule lesspoll_succ_imp_lepoll) | |
| 584 | prefer 2 apply assumption | |
| 585 | apply (simp (no_asm_simp) add: lesspoll_def) | |
| 586 | done | |
| 587 | ||
| 588 | lemma lesspoll_cardinal_lt: "[| A \<prec> i; Ord(i) |] ==> |A| < i" | |
| 589 | apply (unfold lesspoll_def, clarify) | |
| 590 | apply (frule lepoll_cardinal_le, assumption) | |
| 591 | apply (blast intro: well_ord_Memrel well_ord_cardinal_eqpoll [THEN eqpoll_sym] | |
| 592 | dest: lepoll_well_ord elim!: leE) | |
| 593 | done | |
| 594 | ||
| 595 | ||
| 13356 | 596 | subsection{*The first infinite cardinal: Omega, or nat *}
 | 
| 13221 | 597 | |
| 598 | (*This implies Kunen's Lemma 10.6*) | |
| 599 | lemma lt_not_lepoll: "[| n<i; n:nat |] ==> ~ i \<lesssim> n" | |
| 600 | apply (rule notI) | |
| 601 | apply (rule succ_lepoll_natE [of n]) | |
| 602 | apply (rule lepoll_trans [of _ i]) | |
| 603 | apply (erule ltE) | |
| 604 | apply (rule Ord_succ_subsetI [THEN subset_imp_lepoll], assumption+) | |
| 605 | done | |
| 606 | ||
| 607 | lemma Ord_nat_eqpoll_iff: "[| Ord(i); n:nat |] ==> i \<approx> n <-> i=n" | |
| 608 | apply (rule iffI) | |
| 609 | prefer 2 apply (simp add: eqpoll_refl) | |
| 610 | apply (rule Ord_linear_lt [of i n]) | |
| 611 | apply (simp_all add: nat_into_Ord) | |
| 612 | apply (erule lt_nat_in_nat [THEN nat_eqpoll_iff, THEN iffD1], assumption+) | |
| 613 | apply (rule lt_not_lepoll [THEN notE], assumption+) | |
| 614 | apply (erule eqpoll_imp_lepoll) | |
| 615 | done | |
| 616 | ||
| 617 | lemma Card_nat: "Card(nat)" | |
| 618 | apply (unfold Card_def cardinal_def) | |
| 619 | apply (subst Least_equality) | |
| 620 | apply (rule eqpoll_refl) | |
| 621 | apply (rule Ord_nat) | |
| 622 | apply (erule ltE) | |
| 623 | apply (simp_all add: eqpoll_iff lt_not_lepoll ltI) | |
| 624 | done | |
| 625 | ||
| 626 | (*Allows showing that |i| is a limit cardinal*) | |
| 627 | lemma nat_le_cardinal: "nat le i ==> nat le |i|" | |
| 628 | apply (rule Card_nat [THEN Card_cardinal_eq, THEN subst]) | |
| 629 | apply (erule cardinal_mono) | |
| 630 | done | |
| 631 | ||
| 632 | ||
| 13356 | 633 | subsection{*Towards Cardinal Arithmetic *}
 | 
| 13221 | 634 | (** Congruence laws for successor, cardinal addition and multiplication **) | 
| 635 | ||
| 636 | (*Congruence law for cons under equipollence*) | |
| 637 | lemma cons_lepoll_cong: | |
| 638 | "[| A \<lesssim> B; b ~: B |] ==> cons(a,A) \<lesssim> cons(b,B)" | |
| 639 | apply (unfold lepoll_def, safe) | |
| 640 | apply (rule_tac x = "lam y: cons (a,A) . if y=a then b else f`y" in exI) | |
| 641 | apply (rule_tac d = "%z. if z:B then converse (f) `z else a" in lam_injective) | |
| 642 | apply (safe elim!: consE') | |
| 643 | apply simp_all | |
| 644 | apply (blast intro: inj_is_fun [THEN apply_type])+ | |
| 645 | done | |
| 646 | ||
| 647 | lemma cons_eqpoll_cong: | |
| 648 | "[| A \<approx> B; a ~: A; b ~: B |] ==> cons(a,A) \<approx> cons(b,B)" | |
| 649 | by (simp add: eqpoll_iff cons_lepoll_cong) | |
| 650 | ||
| 651 | lemma cons_lepoll_cons_iff: | |
| 652 | "[| a ~: A; b ~: B |] ==> cons(a,A) \<lesssim> cons(b,B) <-> A \<lesssim> B" | |
| 653 | by (blast intro: cons_lepoll_cong cons_lepoll_consD) | |
| 654 | ||
| 655 | lemma cons_eqpoll_cons_iff: | |
| 656 | "[| a ~: A; b ~: B |] ==> cons(a,A) \<approx> cons(b,B) <-> A \<approx> B" | |
| 657 | by (blast intro: cons_eqpoll_cong cons_eqpoll_consD) | |
| 658 | ||
| 659 | lemma singleton_eqpoll_1: "{a} \<approx> 1"
 | |
| 660 | apply (unfold succ_def) | |
| 661 | apply (blast intro!: eqpoll_refl [THEN cons_eqpoll_cong]) | |
| 662 | done | |
| 663 | ||
| 664 | lemma cardinal_singleton: "|{a}| = 1"
 | |
| 665 | apply (rule singleton_eqpoll_1 [THEN cardinal_cong, THEN trans]) | |
| 666 | apply (simp (no_asm) add: nat_into_Card [THEN Card_cardinal_eq]) | |
| 667 | done | |
| 668 | ||
| 669 | lemma not_0_is_lepoll_1: "A ~= 0 ==> 1 \<lesssim> A" | |
| 670 | apply (erule not_emptyE) | |
| 671 | apply (rule_tac a = "cons (x, A-{x}) " in subst)
 | |
| 672 | apply (rule_tac [2] a = "cons(0,0)" and P= "%y. y \<lesssim> cons (x, A-{x})" in subst)
 | |
| 673 | prefer 3 apply (blast intro: cons_lepoll_cong subset_imp_lepoll, auto) | |
| 674 | done | |
| 675 | ||
| 676 | (*Congruence law for succ under equipollence*) | |
| 677 | lemma succ_eqpoll_cong: "A \<approx> B ==> succ(A) \<approx> succ(B)" | |
| 678 | apply (unfold succ_def) | |
| 679 | apply (simp add: cons_eqpoll_cong mem_not_refl) | |
| 680 | done | |
| 681 | ||
| 682 | (*Congruence law for + under equipollence*) | |
| 683 | lemma sum_eqpoll_cong: "[| A \<approx> C; B \<approx> D |] ==> A+B \<approx> C+D" | |
| 684 | apply (unfold eqpoll_def) | |
| 685 | apply (blast intro!: sum_bij) | |
| 686 | done | |
| 687 | ||
| 688 | (*Congruence law for * under equipollence*) | |
| 689 | lemma prod_eqpoll_cong: | |
| 690 | "[| A \<approx> C; B \<approx> D |] ==> A*B \<approx> C*D" | |
| 691 | apply (unfold eqpoll_def) | |
| 692 | apply (blast intro!: prod_bij) | |
| 693 | done | |
| 694 | ||
| 695 | lemma inj_disjoint_eqpoll: | |
| 696 | "[| f: inj(A,B); A Int B = 0 |] ==> A Un (B - range(f)) \<approx> B" | |
| 697 | apply (unfold eqpoll_def) | |
| 698 | apply (rule exI) | |
| 699 | apply (rule_tac c = "%x. if x:A then f`x else x" | |
| 700 | and d = "%y. if y: range (f) then converse (f) `y else y" | |
| 701 | in lam_bijective) | |
| 702 | apply (blast intro!: if_type inj_is_fun [THEN apply_type]) | |
| 703 | apply (simp (no_asm_simp) add: inj_converse_fun [THEN apply_funtype]) | |
| 704 | apply (safe elim!: UnE') | |
| 705 | apply (simp_all add: inj_is_fun [THEN apply_rangeI]) | |
| 706 | apply (blast intro: inj_converse_fun [THEN apply_type])+ | |
| 707 | done | |
| 708 | ||
| 709 | ||
| 13356 | 710 | subsection{*Lemmas by Krzysztof Grabczewski*}
 | 
| 711 | ||
| 712 | (*New proofs using cons_lepoll_cons. Could generalise from succ to cons.*) | |
| 13221 | 713 | |
| 714 | (*If A has at most n+1 elements and a:A then A-{a} has at most n.*)
 | |
| 715 | lemma Diff_sing_lepoll: | |
| 716 |       "[| a:A;  A \<lesssim> succ(n) |] ==> A - {a} \<lesssim> n"
 | |
| 717 | apply (unfold succ_def) | |
| 718 | apply (rule cons_lepoll_consD) | |
| 719 | apply (rule_tac [3] mem_not_refl) | |
| 720 | apply (erule cons_Diff [THEN ssubst], safe) | |
| 721 | done | |
| 722 | ||
| 723 | (*If A has at least n+1 elements then A-{a} has at least n.*)
 | |
| 724 | lemma lepoll_Diff_sing: | |
| 725 |       "[| succ(n) \<lesssim> A |] ==> n \<lesssim> A - {a}"
 | |
| 726 | apply (unfold succ_def) | |
| 727 | apply (rule cons_lepoll_consD) | |
| 728 | apply (rule_tac [2] mem_not_refl) | |
| 729 | prefer 2 apply blast | |
| 730 | apply (blast intro: subset_imp_lepoll [THEN [2] lepoll_trans]) | |
| 731 | done | |
| 732 | ||
| 733 | lemma Diff_sing_eqpoll: "[| a:A; A \<approx> succ(n) |] ==> A - {a} \<approx> n"
 | |
| 734 | by (blast intro!: eqpollI | |
| 735 | elim!: eqpollE | |
| 736 | intro: Diff_sing_lepoll lepoll_Diff_sing) | |
| 737 | ||
| 738 | lemma lepoll_1_is_sing: "[| A \<lesssim> 1; a:A |] ==> A = {a}"
 | |
| 739 | apply (frule Diff_sing_lepoll, assumption) | |
| 740 | apply (drule lepoll_0_is_0) | |
| 741 | apply (blast elim: equalityE) | |
| 742 | done | |
| 743 | ||
| 744 | lemma Un_lepoll_sum: "A Un B \<lesssim> A+B" | |
| 745 | apply (unfold lepoll_def) | |
| 746 | apply (rule_tac x = "lam x: A Un B. if x:A then Inl (x) else Inr (x) " in exI) | |
| 747 | apply (rule_tac d = "%z. snd (z) " in lam_injective) | |
| 748 | apply force | |
| 749 | apply (simp add: Inl_def Inr_def) | |
| 750 | done | |
| 751 | ||
| 752 | lemma well_ord_Un: | |
| 753 | "[| well_ord(X,R); well_ord(Y,S) |] ==> EX T. well_ord(X Un Y, T)" | |
| 754 | by (erule well_ord_radd [THEN Un_lepoll_sum [THEN lepoll_well_ord]], | |
| 755 | assumption) | |
| 756 | ||
| 757 | (*Krzysztof Grabczewski*) | |
| 758 | lemma disj_Un_eqpoll_sum: "A Int B = 0 ==> A Un B \<approx> A + B" | |
| 759 | apply (unfold eqpoll_def) | |
| 760 | apply (rule_tac x = "lam a:A Un B. if a:A then Inl (a) else Inr (a) " in exI) | |
| 761 | apply (rule_tac d = "%z. case (%x. x, %x. x, z) " in lam_bijective) | |
| 762 | apply auto | |
| 763 | done | |
| 764 | ||
| 765 | ||
| 13244 | 766 | subsection {*Finite and infinite sets*}
 | 
| 13221 | 767 | |
| 13244 | 768 | lemma Finite_0 [simp]: "Finite(0)" | 
| 13221 | 769 | apply (unfold Finite_def) | 
| 770 | apply (blast intro!: eqpoll_refl nat_0I) | |
| 771 | done | |
| 772 | ||
| 773 | lemma lepoll_nat_imp_Finite: "[| A \<lesssim> n; n:nat |] ==> Finite(A)" | |
| 774 | apply (unfold Finite_def) | |
| 775 | apply (erule rev_mp) | |
| 776 | apply (erule nat_induct) | |
| 777 | apply (blast dest!: lepoll_0_is_0 intro!: eqpoll_refl nat_0I) | |
| 778 | apply (blast dest!: lepoll_succ_disj) | |
| 779 | done | |
| 780 | ||
| 781 | lemma lesspoll_nat_is_Finite: | |
| 782 | "A \<prec> nat ==> Finite(A)" | |
| 783 | apply (unfold Finite_def) | |
| 784 | apply (blast dest: ltD lesspoll_cardinal_lt | |
| 785 | lesspoll_imp_eqpoll [THEN eqpoll_sym]) | |
| 786 | done | |
| 787 | ||
| 788 | lemma lepoll_Finite: | |
| 789 | "[| Y \<lesssim> X; Finite(X) |] ==> Finite(Y)" | |
| 790 | apply (unfold Finite_def) | |
| 791 | apply (blast elim!: eqpollE | |
| 792 | intro: lepoll_trans [THEN lepoll_nat_imp_Finite | |
| 793 | [unfolded Finite_def]]) | |
| 794 | done | |
| 795 | ||
| 796 | lemmas subset_Finite = subset_imp_lepoll [THEN lepoll_Finite, standard] | |
| 797 | ||
| 14883 | 798 | lemma Finite_Int: "Finite(A) | Finite(B) ==> Finite(A Int B)" | 
| 799 | by (blast intro: subset_Finite) | |
| 800 | ||
| 13221 | 801 | lemmas Finite_Diff = Diff_subset [THEN subset_Finite, standard] | 
| 802 | ||
| 803 | lemma Finite_cons: "Finite(x) ==> Finite(cons(y,x))" | |
| 804 | apply (unfold Finite_def) | |
| 14153 | 805 | apply (case_tac "y:x") | 
| 13221 | 806 | apply (simp add: cons_absorb) | 
| 807 | apply (erule bexE) | |
| 808 | apply (rule bexI) | |
| 809 | apply (erule_tac [2] nat_succI) | |
| 810 | apply (simp (no_asm_simp) add: succ_def cons_eqpoll_cong mem_not_refl) | |
| 811 | done | |
| 812 | ||
| 813 | lemma Finite_succ: "Finite(x) ==> Finite(succ(x))" | |
| 814 | apply (unfold succ_def) | |
| 815 | apply (erule Finite_cons) | |
| 816 | done | |
| 817 | ||
| 13269 | 818 | lemma Finite_cons_iff [iff]: "Finite(cons(y,x)) <-> Finite(x)" | 
| 13244 | 819 | by (blast intro: Finite_cons subset_Finite) | 
| 820 | ||
| 13269 | 821 | lemma Finite_succ_iff [iff]: "Finite(succ(x)) <-> Finite(x)" | 
| 13244 | 822 | by (simp add: succ_def) | 
| 823 | ||
| 13221 | 824 | lemma nat_le_infinite_Ord: | 
| 825 | "[| Ord(i); ~ Finite(i) |] ==> nat le i" | |
| 826 | apply (unfold Finite_def) | |
| 827 | apply (erule Ord_nat [THEN [2] Ord_linear2]) | |
| 828 | prefer 2 apply assumption | |
| 829 | apply (blast intro!: eqpoll_refl elim!: ltE) | |
| 830 | done | |
| 831 | ||
| 832 | lemma Finite_imp_well_ord: | |
| 833 | "Finite(A) ==> EX r. well_ord(A,r)" | |
| 834 | apply (unfold Finite_def eqpoll_def) | |
| 835 | apply (blast intro: well_ord_rvimage bij_is_inj well_ord_Memrel nat_into_Ord) | |
| 836 | done | |
| 837 | ||
| 13244 | 838 | lemma succ_lepoll_imp_not_empty: "succ(x) \<lesssim> y ==> y \<noteq> 0" | 
| 839 | by (fast dest!: lepoll_0_is_0) | |
| 840 | ||
| 841 | lemma eqpoll_succ_imp_not_empty: "x \<approx> succ(n) ==> x \<noteq> 0" | |
| 842 | by (fast elim!: eqpoll_sym [THEN eqpoll_0_is_0, THEN succ_neq_0]) | |
| 843 | ||
| 844 | lemma Finite_Fin_lemma [rule_format]: | |
| 845 | "n \<in> nat ==> \<forall>A. (A\<approx>n & A \<subseteq> X) --> A \<in> Fin(X)" | |
| 846 | apply (induct_tac n) | |
| 847 | apply (rule allI) | |
| 848 | apply (fast intro!: Fin.emptyI dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) | |
| 849 | apply (rule allI) | |
| 850 | apply (rule impI) | |
| 851 | apply (erule conjE) | |
| 852 | apply (rule eqpoll_succ_imp_not_empty [THEN not_emptyE], assumption) | |
| 853 | apply (frule Diff_sing_eqpoll, assumption) | |
| 854 | apply (erule allE) | |
| 855 | apply (erule impE, fast) | |
| 856 | apply (drule subsetD, assumption) | |
| 857 | apply (drule Fin.consI, assumption) | |
| 858 | apply (simp add: cons_Diff) | |
| 859 | done | |
| 860 | ||
| 861 | lemma Finite_Fin: "[| Finite(A); A \<subseteq> X |] ==> A \<in> Fin(X)" | |
| 862 | by (unfold Finite_def, blast intro: Finite_Fin_lemma) | |
| 863 | ||
| 864 | lemma eqpoll_imp_Finite_iff: "A \<approx> B ==> Finite(A) <-> Finite(B)" | |
| 865 | apply (unfold Finite_def) | |
| 866 | apply (blast intro: eqpoll_trans eqpoll_sym) | |
| 867 | done | |
| 868 | ||
| 869 | lemma Fin_lemma [rule_format]: "n: nat ==> ALL A. A \<approx> n --> A : Fin(A)" | |
| 870 | apply (induct_tac n) | |
| 871 | apply (simp add: eqpoll_0_iff, clarify) | |
| 872 | apply (subgoal_tac "EX u. u:A") | |
| 873 | apply (erule exE) | |
| 874 | apply (rule Diff_sing_eqpoll [THEN revcut_rl]) | |
| 875 | prefer 2 apply assumption | |
| 876 | apply assumption | |
| 13784 | 877 | apply (rule_tac b = A in cons_Diff [THEN subst], assumption) | 
| 13244 | 878 | apply (rule Fin.consI, blast) | 
| 879 | apply (blast intro: subset_consI [THEN Fin_mono, THEN subsetD]) | |
| 880 | (*Now for the lemma assumed above*) | |
| 881 | apply (unfold eqpoll_def) | |
| 882 | apply (blast intro: bij_converse_bij [THEN bij_is_fun, THEN apply_type]) | |
| 883 | done | |
| 884 | ||
| 885 | lemma Finite_into_Fin: "Finite(A) ==> A : Fin(A)" | |
| 886 | apply (unfold Finite_def) | |
| 887 | apply (blast intro: Fin_lemma) | |
| 888 | done | |
| 889 | ||
| 890 | lemma Fin_into_Finite: "A : Fin(U) ==> Finite(A)" | |
| 891 | by (fast intro!: Finite_0 Finite_cons elim: Fin_induct) | |
| 892 | ||
| 893 | lemma Finite_Fin_iff: "Finite(A) <-> A : Fin(A)" | |
| 894 | by (blast intro: Finite_into_Fin Fin_into_Finite) | |
| 895 | ||
| 896 | lemma Finite_Un: "[| Finite(A); Finite(B) |] ==> Finite(A Un B)" | |
| 897 | by (blast intro!: Fin_into_Finite Fin_UnI | |
| 898 | dest!: Finite_into_Fin | |
| 899 | intro: Un_upper1 [THEN Fin_mono, THEN subsetD] | |
| 900 | Un_upper2 [THEN Fin_mono, THEN subsetD]) | |
| 901 | ||
| 14883 | 902 | lemma Finite_Un_iff [simp]: "Finite(A Un B) <-> (Finite(A) & Finite(B))" | 
| 903 | by (blast intro: subset_Finite Finite_Un) | |
| 904 | ||
| 905 | text{*The converse must hold too.*}
 | |
| 13244 | 906 | lemma Finite_Union: "[| ALL y:X. Finite(y); Finite(X) |] ==> Finite(Union(X))" | 
| 907 | apply (simp add: Finite_Fin_iff) | |
| 908 | apply (rule Fin_UnionI) | |
| 909 | apply (erule Fin_induct, simp) | |
| 910 | apply (blast intro: Fin.consI Fin_mono [THEN [2] rev_subsetD]) | |
| 911 | done | |
| 912 | ||
| 913 | (* Induction principle for Finite(A), by Sidi Ehmety *) | |
| 13524 | 914 | lemma Finite_induct [case_names 0 cons, induct set: Finite]: | 
| 13244 | 915 | "[| Finite(A); P(0); | 
| 916 | !! x B. [| Finite(B); x ~: B; P(B) |] ==> P(cons(x, B)) |] | |
| 917 | ==> P(A)" | |
| 918 | apply (erule Finite_into_Fin [THEN Fin_induct]) | |
| 919 | apply (blast intro: Fin_into_Finite)+ | |
| 920 | done | |
| 921 | ||
| 922 | (*Sidi Ehmety.  The contrapositive says ~Finite(A) ==> ~Finite(A-{a}) *)
 | |
| 923 | lemma Diff_sing_Finite: "Finite(A - {a}) ==> Finite(A)"
 | |
| 924 | apply (unfold Finite_def) | |
| 925 | apply (case_tac "a:A") | |
| 926 | apply (subgoal_tac [2] "A-{a}=A", auto)
 | |
| 927 | apply (rule_tac x = "succ (n) " in bexI) | |
| 928 | apply (subgoal_tac "cons (a, A - {a}) = A & cons (n, n) = succ (n) ")
 | |
| 13784 | 929 | apply (drule_tac a = a and b = n in cons_eqpoll_cong) | 
| 13244 | 930 | apply (auto dest: mem_irrefl) | 
| 931 | done | |
| 932 | ||
| 933 | (*Sidi Ehmety. And the contrapositive of this says | |
| 934 | [| ~Finite(A); Finite(B) |] ==> ~Finite(A-B) *) | |
| 935 | lemma Diff_Finite [rule_format]: "Finite(B) ==> Finite(A-B) --> Finite(A)" | |
| 936 | apply (erule Finite_induct, auto) | |
| 937 | apply (case_tac "x:A") | |
| 938 | apply (subgoal_tac [2] "A-cons (x, B) = A - B") | |
| 13615 
449a70d88b38
Numerous cosmetic changes, prompted by the new simplifier
 paulson parents: 
13524diff
changeset | 939 | apply (subgoal_tac "A - cons (x, B) = (A - B) - {x}", simp)
 | 
| 13244 | 940 | apply (drule Diff_sing_Finite, auto) | 
| 941 | done | |
| 942 | ||
| 943 | lemma Finite_RepFun: "Finite(A) ==> Finite(RepFun(A,f))" | |
| 944 | by (erule Finite_induct, simp_all) | |
| 945 | ||
| 946 | lemma Finite_RepFun_iff_lemma [rule_format]: | |
| 947 | "[|Finite(x); !!x y. f(x)=f(y) ==> x=y|] | |
| 948 | ==> \<forall>A. x = RepFun(A,f) --> Finite(A)" | |
| 949 | apply (erule Finite_induct) | |
| 950 | apply clarify | |
| 951 | apply (case_tac "A=0", simp) | |
| 952 | apply (blast del: allE, clarify) | |
| 953 | apply (subgoal_tac "\<exists>z\<in>A. x = f(z)") | |
| 954 | prefer 2 apply (blast del: allE elim: equalityE, clarify) | |
| 955 | apply (subgoal_tac "B = {f(u) . u \<in> A - {z}}")
 | |
| 956 | apply (blast intro: Diff_sing_Finite) | |
| 957 | apply (thin_tac "\<forall>A. ?P(A) --> Finite(A)") | |
| 958 | apply (rule equalityI) | |
| 959 | apply (blast intro: elim: equalityE) | |
| 960 | apply (blast intro: elim: equalityCE) | |
| 961 | done | |
| 962 | ||
| 963 | text{*I don't know why, but if the premise is expressed using meta-connectives
 | |
| 964 | then the simplifier cannot prove it automatically in conditional rewriting.*} | |
| 965 | lemma Finite_RepFun_iff: | |
| 966 | "(\<forall>x y. f(x)=f(y) --> x=y) ==> Finite(RepFun(A,f)) <-> Finite(A)" | |
| 967 | by (blast intro: Finite_RepFun Finite_RepFun_iff_lemma [of _ f]) | |
| 968 | ||
| 969 | lemma Finite_Pow: "Finite(A) ==> Finite(Pow(A))" | |
| 970 | apply (erule Finite_induct) | |
| 971 | apply (simp_all add: Pow_insert Finite_Un Finite_RepFun) | |
| 972 | done | |
| 973 | ||
| 974 | lemma Finite_Pow_imp_Finite: "Finite(Pow(A)) ==> Finite(A)" | |
| 975 | apply (subgoal_tac "Finite({{x} . x \<in> A})")
 | |
| 976 | apply (simp add: Finite_RepFun_iff ) | |
| 977 | apply (blast intro: subset_Finite) | |
| 978 | done | |
| 979 | ||
| 980 | lemma Finite_Pow_iff [iff]: "Finite(Pow(A)) <-> Finite(A)" | |
| 981 | by (blast intro: Finite_Pow Finite_Pow_imp_Finite) | |
| 982 | ||
| 983 | ||
| 13221 | 984 | |
| 985 | (*Krzysztof Grabczewski's proof that the converse of a finite, well-ordered | |
| 986 | set is well-ordered. Proofs simplified by lcp. *) | |
| 987 | ||
| 988 | lemma nat_wf_on_converse_Memrel: "n:nat ==> wf[n](converse(Memrel(n)))" | |
| 989 | apply (erule nat_induct) | |
| 990 | apply (blast intro: wf_onI) | |
| 991 | apply (rule wf_onI) | |
| 992 | apply (simp add: wf_on_def wf_def) | |
| 14153 | 993 | apply (case_tac "x:Z") | 
| 13221 | 994 |  txt{*x:Z case*}
 | 
| 995 | apply (drule_tac x = x in bspec, assumption) | |
| 996 | apply (blast elim: mem_irrefl mem_asym) | |
| 997 | txt{*other case*} 
 | |
| 13784 | 998 | apply (drule_tac x = Z in spec, blast) | 
| 13221 | 999 | done | 
| 1000 | ||
| 1001 | lemma nat_well_ord_converse_Memrel: "n:nat ==> well_ord(n,converse(Memrel(n)))" | |
| 1002 | apply (frule Ord_nat [THEN Ord_in_Ord, THEN well_ord_Memrel]) | |
| 1003 | apply (unfold well_ord_def) | |
| 1004 | apply (blast intro!: tot_ord_converse nat_wf_on_converse_Memrel) | |
| 1005 | done | |
| 1006 | ||
| 1007 | lemma well_ord_converse: | |
| 1008 | "[|well_ord(A,r); | |
| 1009 | well_ord(ordertype(A,r), converse(Memrel(ordertype(A, r)))) |] | |
| 1010 | ==> well_ord(A,converse(r))" | |
| 1011 | apply (rule well_ord_Int_iff [THEN iffD1]) | |
| 1012 | apply (frule ordermap_bij [THEN bij_is_inj, THEN well_ord_rvimage], assumption) | |
| 1013 | apply (simp add: rvimage_converse converse_Int converse_prod | |
| 1014 | ordertype_ord_iso [THEN ord_iso_rvimage_eq]) | |
| 1015 | done | |
| 1016 | ||
| 1017 | lemma ordertype_eq_n: | |
| 1018 | "[| well_ord(A,r); A \<approx> n; n:nat |] ==> ordertype(A,r)=n" | |
| 1019 | apply (rule Ord_ordertype [THEN Ord_nat_eqpoll_iff, THEN iffD1], assumption+) | |
| 1020 | apply (rule eqpoll_trans) | |
| 1021 | prefer 2 apply assumption | |
| 1022 | apply (unfold eqpoll_def) | |
| 1023 | apply (blast intro!: ordermap_bij [THEN bij_converse_bij]) | |
| 1024 | done | |
| 1025 | ||
| 1026 | lemma Finite_well_ord_converse: | |
| 1027 | "[| Finite(A); well_ord(A,r) |] ==> well_ord(A,converse(r))" | |
| 1028 | apply (unfold Finite_def) | |
| 1029 | apply (rule well_ord_converse, assumption) | |
| 1030 | apply (blast dest: ordertype_eq_n intro!: nat_well_ord_converse_Memrel) | |
| 1031 | done | |
| 1032 | ||
| 1033 | lemma nat_into_Finite: "n:nat ==> Finite(n)" | |
| 1034 | apply (unfold Finite_def) | |
| 1035 | apply (fast intro!: eqpoll_refl) | |
| 1036 | done | |
| 1037 | ||
| 14076 | 1038 | lemma nat_not_Finite: "~Finite(nat)" | 
| 1039 | apply (unfold Finite_def, clarify) | |
| 1040 | apply (drule eqpoll_imp_lepoll [THEN lepoll_cardinal_le], simp) | |
| 1041 | apply (insert Card_nat) | |
| 1042 | apply (simp add: Card_def) | |
| 1043 | apply (drule le_imp_subset) | |
| 1044 | apply (blast elim: mem_irrefl) | |
| 1045 | done | |
| 1046 | ||
| 13221 | 1047 | ML | 
| 1048 | {*
 | |
| 1049 | val Least_def = thm "Least_def"; | |
| 1050 | val eqpoll_def = thm "eqpoll_def"; | |
| 1051 | val lepoll_def = thm "lepoll_def"; | |
| 1052 | val lesspoll_def = thm "lesspoll_def"; | |
| 1053 | val cardinal_def = thm "cardinal_def"; | |
| 1054 | val Finite_def = thm "Finite_def"; | |
| 1055 | val Card_def = thm "Card_def"; | |
| 1056 | val eq_imp_not_mem = thm "eq_imp_not_mem"; | |
| 1057 | val decomp_bnd_mono = thm "decomp_bnd_mono"; | |
| 1058 | val Banach_last_equation = thm "Banach_last_equation"; | |
| 1059 | val decomposition = thm "decomposition"; | |
| 1060 | val schroeder_bernstein = thm "schroeder_bernstein"; | |
| 1061 | val bij_imp_eqpoll = thm "bij_imp_eqpoll"; | |
| 1062 | val eqpoll_refl = thm "eqpoll_refl"; | |
| 1063 | val eqpoll_sym = thm "eqpoll_sym"; | |
| 1064 | val eqpoll_trans = thm "eqpoll_trans"; | |
| 1065 | val subset_imp_lepoll = thm "subset_imp_lepoll"; | |
| 1066 | val lepoll_refl = thm "lepoll_refl"; | |
| 1067 | val le_imp_lepoll = thm "le_imp_lepoll"; | |
| 1068 | val eqpoll_imp_lepoll = thm "eqpoll_imp_lepoll"; | |
| 1069 | val lepoll_trans = thm "lepoll_trans"; | |
| 1070 | val eqpollI = thm "eqpollI"; | |
| 1071 | val eqpollE = thm "eqpollE"; | |
| 1072 | val eqpoll_iff = thm "eqpoll_iff"; | |
| 1073 | val lepoll_0_is_0 = thm "lepoll_0_is_0"; | |
| 1074 | val empty_lepollI = thm "empty_lepollI"; | |
| 1075 | val lepoll_0_iff = thm "lepoll_0_iff"; | |
| 1076 | val Un_lepoll_Un = thm "Un_lepoll_Un"; | |
| 1077 | val eqpoll_0_is_0 = thm "eqpoll_0_is_0"; | |
| 1078 | val eqpoll_0_iff = thm "eqpoll_0_iff"; | |
| 1079 | val eqpoll_disjoint_Un = thm "eqpoll_disjoint_Un"; | |
| 1080 | val lesspoll_not_refl = thm "lesspoll_not_refl"; | |
| 1081 | val lesspoll_irrefl = thm "lesspoll_irrefl"; | |
| 1082 | val lesspoll_imp_lepoll = thm "lesspoll_imp_lepoll"; | |
| 1083 | val lepoll_well_ord = thm "lepoll_well_ord"; | |
| 1084 | val lepoll_iff_leqpoll = thm "lepoll_iff_leqpoll"; | |
| 1085 | val inj_not_surj_succ = thm "inj_not_surj_succ"; | |
| 1086 | val lesspoll_trans = thm "lesspoll_trans"; | |
| 1087 | val lesspoll_trans1 = thm "lesspoll_trans1"; | |
| 1088 | val lesspoll_trans2 = thm "lesspoll_trans2"; | |
| 1089 | val Least_equality = thm "Least_equality"; | |
| 1090 | val LeastI = thm "LeastI"; | |
| 1091 | val Least_le = thm "Least_le"; | |
| 1092 | val less_LeastE = thm "less_LeastE"; | |
| 1093 | val LeastI2 = thm "LeastI2"; | |
| 1094 | val Least_0 = thm "Least_0"; | |
| 1095 | val Ord_Least = thm "Ord_Least"; | |
| 1096 | val Least_cong = thm "Least_cong"; | |
| 1097 | val cardinal_cong = thm "cardinal_cong"; | |
| 1098 | val well_ord_cardinal_eqpoll = thm "well_ord_cardinal_eqpoll"; | |
| 1099 | val Ord_cardinal_eqpoll = thm "Ord_cardinal_eqpoll"; | |
| 1100 | val well_ord_cardinal_eqE = thm "well_ord_cardinal_eqE"; | |
| 1101 | val well_ord_cardinal_eqpoll_iff = thm "well_ord_cardinal_eqpoll_iff"; | |
| 1102 | val Ord_cardinal_le = thm "Ord_cardinal_le"; | |
| 1103 | val Card_cardinal_eq = thm "Card_cardinal_eq"; | |
| 1104 | val CardI = thm "CardI"; | |
| 1105 | val Card_is_Ord = thm "Card_is_Ord"; | |
| 1106 | val Card_cardinal_le = thm "Card_cardinal_le"; | |
| 1107 | val Ord_cardinal = thm "Ord_cardinal"; | |
| 1108 | val Card_iff_initial = thm "Card_iff_initial"; | |
| 1109 | val lt_Card_imp_lesspoll = thm "lt_Card_imp_lesspoll"; | |
| 1110 | val Card_0 = thm "Card_0"; | |
| 1111 | val Card_Un = thm "Card_Un"; | |
| 1112 | val Card_cardinal = thm "Card_cardinal"; | |
| 1113 | val cardinal_mono = thm "cardinal_mono"; | |
| 1114 | val cardinal_lt_imp_lt = thm "cardinal_lt_imp_lt"; | |
| 1115 | val Card_lt_imp_lt = thm "Card_lt_imp_lt"; | |
| 1116 | val Card_lt_iff = thm "Card_lt_iff"; | |
| 1117 | val Card_le_iff = thm "Card_le_iff"; | |
| 1118 | val well_ord_lepoll_imp_Card_le = thm "well_ord_lepoll_imp_Card_le"; | |
| 1119 | val lepoll_cardinal_le = thm "lepoll_cardinal_le"; | |
| 1120 | val lepoll_Ord_imp_eqpoll = thm "lepoll_Ord_imp_eqpoll"; | |
| 1121 | val lesspoll_imp_eqpoll = thm "lesspoll_imp_eqpoll"; | |
| 14046 | 1122 | val cardinal_subset_Ord = thm "cardinal_subset_Ord"; | 
| 13221 | 1123 | val cons_lepoll_consD = thm "cons_lepoll_consD"; | 
| 1124 | val cons_eqpoll_consD = thm "cons_eqpoll_consD"; | |
| 1125 | val succ_lepoll_succD = thm "succ_lepoll_succD"; | |
| 1126 | val nat_lepoll_imp_le = thm "nat_lepoll_imp_le"; | |
| 1127 | val nat_eqpoll_iff = thm "nat_eqpoll_iff"; | |
| 1128 | val nat_into_Card = thm "nat_into_Card"; | |
| 1129 | val cardinal_0 = thm "cardinal_0"; | |
| 1130 | val cardinal_1 = thm "cardinal_1"; | |
| 1131 | val succ_lepoll_natE = thm "succ_lepoll_natE"; | |
| 1132 | val n_lesspoll_nat = thm "n_lesspoll_nat"; | |
| 1133 | val nat_lepoll_imp_ex_eqpoll_n = thm "nat_lepoll_imp_ex_eqpoll_n"; | |
| 1134 | val lepoll_imp_lesspoll_succ = thm "lepoll_imp_lesspoll_succ"; | |
| 1135 | val lesspoll_succ_imp_lepoll = thm "lesspoll_succ_imp_lepoll"; | |
| 1136 | val lesspoll_succ_iff = thm "lesspoll_succ_iff"; | |
| 1137 | val lepoll_succ_disj = thm "lepoll_succ_disj"; | |
| 1138 | val lesspoll_cardinal_lt = thm "lesspoll_cardinal_lt"; | |
| 1139 | val lt_not_lepoll = thm "lt_not_lepoll"; | |
| 1140 | val Ord_nat_eqpoll_iff = thm "Ord_nat_eqpoll_iff"; | |
| 1141 | val Card_nat = thm "Card_nat"; | |
| 1142 | val nat_le_cardinal = thm "nat_le_cardinal"; | |
| 1143 | val cons_lepoll_cong = thm "cons_lepoll_cong"; | |
| 1144 | val cons_eqpoll_cong = thm "cons_eqpoll_cong"; | |
| 1145 | val cons_lepoll_cons_iff = thm "cons_lepoll_cons_iff"; | |
| 1146 | val cons_eqpoll_cons_iff = thm "cons_eqpoll_cons_iff"; | |
| 1147 | val singleton_eqpoll_1 = thm "singleton_eqpoll_1"; | |
| 1148 | val cardinal_singleton = thm "cardinal_singleton"; | |
| 1149 | val not_0_is_lepoll_1 = thm "not_0_is_lepoll_1"; | |
| 1150 | val succ_eqpoll_cong = thm "succ_eqpoll_cong"; | |
| 1151 | val sum_eqpoll_cong = thm "sum_eqpoll_cong"; | |
| 1152 | val prod_eqpoll_cong = thm "prod_eqpoll_cong"; | |
| 1153 | val inj_disjoint_eqpoll = thm "inj_disjoint_eqpoll"; | |
| 1154 | val Diff_sing_lepoll = thm "Diff_sing_lepoll"; | |
| 1155 | val lepoll_Diff_sing = thm "lepoll_Diff_sing"; | |
| 1156 | val Diff_sing_eqpoll = thm "Diff_sing_eqpoll"; | |
| 1157 | val lepoll_1_is_sing = thm "lepoll_1_is_sing"; | |
| 1158 | val Un_lepoll_sum = thm "Un_lepoll_sum"; | |
| 1159 | val well_ord_Un = thm "well_ord_Un"; | |
| 1160 | val disj_Un_eqpoll_sum = thm "disj_Un_eqpoll_sum"; | |
| 1161 | val Finite_0 = thm "Finite_0"; | |
| 1162 | val lepoll_nat_imp_Finite = thm "lepoll_nat_imp_Finite"; | |
| 1163 | val lesspoll_nat_is_Finite = thm "lesspoll_nat_is_Finite"; | |
| 1164 | val lepoll_Finite = thm "lepoll_Finite"; | |
| 1165 | val subset_Finite = thm "subset_Finite"; | |
| 1166 | val Finite_Diff = thm "Finite_Diff"; | |
| 1167 | val Finite_cons = thm "Finite_cons"; | |
| 1168 | val Finite_succ = thm "Finite_succ"; | |
| 1169 | val nat_le_infinite_Ord = thm "nat_le_infinite_Ord"; | |
| 1170 | val Finite_imp_well_ord = thm "Finite_imp_well_ord"; | |
| 1171 | val nat_wf_on_converse_Memrel = thm "nat_wf_on_converse_Memrel"; | |
| 1172 | val nat_well_ord_converse_Memrel = thm "nat_well_ord_converse_Memrel"; | |
| 1173 | val well_ord_converse = thm "well_ord_converse"; | |
| 1174 | val ordertype_eq_n = thm "ordertype_eq_n"; | |
| 1175 | val Finite_well_ord_converse = thm "Finite_well_ord_converse"; | |
| 1176 | val nat_into_Finite = thm "nat_into_Finite"; | |
| 1177 | *} | |
| 9683 | 1178 | |
| 435 | 1179 | end |