definition
jump_cardinal :: "i==>i"where 🍋‹This definition is more complex than Kunen's but it more easily proved to be a cardinal› "jump_cardinal(K) ≡ ∪X∈Pow(K). {z. r ∈ Pow(K*K), well_ord(X,r) ∧ z = ordertype(X,r)}"
definition
csucc :: "i==>i"where 🍋‹needed because 🍋‹jump_cardinal(K)›might not be the successor of 🍋‹K›\› "csucc(K) ≡ μ L. Card(L) ∧ K
lemma Card_Union [simp,intro,TC]: assumes A: "∧x. x∈A ==> Card(x)"shows"Card(∪(A))" proof (rule CardI) show"Ord(∪A)"using A by (simp add: Card_is_Ord) next fix j assume j: "j < ∪A" hence"∃c∈A. j < c ∧ Card(c)"using A by (auto simp add: lt_def intro: Card_is_Ord) thenobtain c where c: "c∈A""j < c""Card(c)" by blast hence jls: "j ≺ c" by (simp add: lt_Card_imp_lesspoll)
{ assume eqp: "j ≈∪A" have"c <∪A"using c by (blast intro: subset_imp_lepoll) alsohave"... ≈ j"by (rule eqpoll_sym [OF eqp]) alsohave"... ≺ c"by (rule jls) finallyhave"c ≺ c" . hence False by auto
} thus"¬ j ≈∪A"by blast qed
lemma Card_UN: "(∧x. x ∈ A ==> Card(K(x))) ==> Card(∪x∈A. K(x))" by blast
lemma Card_OUN [simp,intro,TC]: "(∧x. x ∈ A ==> Card(K(x))) ==> Card(∪x by (auto simp add: OUnion_def Card_0)
text‹Note: Could omit proving the algebraic laws for cardinal addition and multiplication. On finite cardinals these operations coincide with addition and multiplication of natural numbers; on infinite cardinals they coincide with union (maximum). Either way we get most laws for free.›
subsubsection‹Cardinal addition is commutative›
lemma sum_commute_eqpoll: "A+B ≈ B+A" proof (unfold eqpoll_def, rule exI) show"(λz∈A+B. case(Inr,Inl,z)) ∈ bij(A+B, B+A)" by (auto intro: lam_bijective [where d = "case(Inr,Inl)"]) qed
subsubsection‹Addition of finite cardinals is "ordinary" addition›
lemma sum_succ_eqpoll: "succ(A)+B ≈ succ(A+B)" unfolding eqpoll_def apply (rule exI) apply (rule_tac c = "λz. if z=Inl (A) then A+B else z" and d = "λz. if z=A+B then Inl (A) else z"in lam_bijective) apply simp_all apply (blast dest: sym [THEN eq_imp_not_mem] elim: mem_irrefl)+ done
(*Pulling the succ(...) outside the |...| requires m, n \<in> nat *) (*Unconditional version requires AC*) lemma cadd_succ_lemma: assumes"Ord(m)""Ord(n)"shows"succ(m) ⊕ n = |succ(m ⊕ n)|" proof (unfold cadd_def) have [intro]: "m + n ≈ |m + n|"using assms by (blast intro: eqpoll_sym well_ord_cardinal_eqpoll well_ord_radd well_ord_Memrel)
lemma nat_cadd_eq_add: assumes m: "m ∈ nat"and [simp]: "n ∈ nat"shows"m ⊕ n = m #+ n" using m proof (induct m) case 0 thus ?caseby (simp add: nat_into_Card cadd_0) next case (succ m) thus ?caseby (simp add: cadd_succ_lemma nat_into_Card Card_cardinal_eq) qed
subsection‹Cardinal multiplication›
subsubsection‹Cardinal multiplication is commutative›
(*This proof is modelled upon one assuming nat<=A, with injection λz∈cons(u,A). if z=u then 0 else if z ∈ nat then succ(z) else z
java.lang.NullPointerException If f \<in> inj(nat,A) then range(f) behaves like the natural numbers.*) lemma nat_cons_lepoll: "nat < A ==> cons(u,A) < A" unfolding lepoll_def apply (erule exE) apply (rule_tac x = "λz∈cons (u,A). if z=u then f`0 else if z ∈ range (f) then f`succ (converse (f) `z) else z" in exI) apply (rule_tac d = "λy. if y ∈ range(f) then nat_case (u, λz. f`z, converse(f) `y) else y" in lam_injective) apply (fast intro!: if_type apply_type intro: inj_is_fun inj_converse_fun) apply (simp add: inj_is_fun [THEN apply_rangeI]
inj_converse_fun [THEN apply_rangeI]
inj_converse_fun [THEN apply_funtype]) done
(*** An infinite cardinal equals its square (Kunen, Thm 10.12, page 29) ***)
(*A general fact about ordermap*) lemma ordermap_eqpoll_pred: "[well_ord(A,r); x ∈ A]==> ordermap(A,r)`x ≈ Order.pred(A,x,r)" unfolding eqpoll_def apply (rule exI) apply (simp add: ordermap_eq_image well_ord_is_wf) apply (erule ordermap_bij [THEN bij_is_inj, THEN restrict_bij, THEN bij_converse_bij]) apply (rule pred_subset) done
subsubsection‹Establishing the well-ordering›
lemma well_ord_csquare: assumes K: "Ord(K)"shows"well_ord(K*K, csquare_rel(K))" proof (unfold csquare_rel_def, rule well_ord_rvimage) show"(λ⟨x,y⟩∈K × K. ⟨x ∪ y, x, y⟩) ∈ inj(K × K, K × K × K)"using K by (force simp add: inj_def intro: lam_type Un_least_lt [THEN ltD] ltI) next show"well_ord(K × K × K, rmult(K, Memrel(K), K × K, rmult(K, Memrel(K), K, Memrel(K))))" using K by (blast intro: well_ord_rmult well_ord_Memrel) qed
subsubsection‹Characterising initial segments of the well-ordering›
text‹Kunen: "each 🍋‹⟨x,y⟩∈ K × K› has no more than 🍋‹z × z› predecessors..." (page 29)› lemma ordermap_csquare_le: assumes K: "Limit(K)" and x: "x<K" and y: " y<K" defines "z ≡ succ(x ∪ y)" shows "|ordermap(K × K, csquare_rel(K)) ` ⟨x,y⟩| ≤ |succ(z)| ⊗ |succ(z)|" proof (unfold cmult_def, rule well_ord_lepoll_imp_cardinal_le) show "well_ord(|succ(z)| × |succ(z)|,
rmult(|succ(z)|, Memrel(|succ(z)|), |succ(z)|, Memrel(|succ(z)|)))" by (blast intro: Ord_cardinal well_ord_Memrel well_ord_rmult) next have zK: "z<K" using x y K z_def by (blast intro: Un_least_lt Limit_has_succ) hence oz: "Ord(z)" by (elim ltE) have "ordermap(K × K, csquare_rel(K)) ` ⟨x,y⟩< ordermap(K × K, csquare_rel(K)) ` ⟨z,z⟩" using z_def by (blast intro: ordermap_z_lt leI le_imp_lepoll K x y) also have "... ≈ Order.pred(K × K, ⟨z,z⟩, csquare_rel(K))" proof (rule ordermap_eqpoll_pred) show "well_ord(K × K, csquare_rel(K))" using K by (rule Limit_is_Ord [THEN well_ord_csquare]) next show "⟨z, z⟩∈ K × K" using zK by (blast intro: ltD) qed also have "... < succ(z) × succ(z)" using zK by (rule pred_csquare_subset [THEN subset_imp_lepoll]) also have "... ≈ |succ(z)| × |succ(z)|" using oz by (blast intro: prod_eqpoll_cong Ord_succ Ord_cardinal_eqpoll eqpoll_sym) finally show "ordermap(K × K, csquare_rel(K)) ` ⟨x,y⟩< |succ(z)| × |succ(z)|" . qed
text‹Kunen: "... so the order type is ‹≤› K"› lemma ordertype_csquare_le: assumes IK: "InfCard(K)"and eq: "∧y. y∈K ==> InfCard(y) ==> y ⊗ y = y" shows"ordertype(K*K, csquare_rel(K)) ≤ K" proof - have CK: "Card(K)"using IK by (rule InfCard_is_Card) hence OK: "Ord(K)"by (rule Card_is_Ord) moreoverhave"Ord(ordertype(K × K, csquare_rel(K)))"using OK by (rule well_ord_csquare [THEN Ord_ordertype]) ultimatelyshow ?thesis proof (rule all_lt_imp_le) fix i assume i: "i < ordertype(K × K, csquare_rel(K))" hence Oi: "Ord(i)"by (elim ltE) obtain x y where x: "x ∈ K"and y: "y ∈ K" and ieq: "i = ordermap(K × K, csquare_rel(K)) ` ⟨x,y⟩" using i by (auto simp add: ordertype_unfold elim: ltE) hence xy: "Ord(x)""Ord(y)""x < K""y < K"using OK by (blast intro: Ord_in_Ord ltI)+ hence ou: "Ord(x ∪ y)" by (simp add: Ord_Un) show"i < K" proof (rule Card_lt_imp_lt [OF _ Oi CK]) have"|i| ≤ |succ(succ(x ∪ y))| ⊗ |succ(succ(x ∪ y))|"using IK xy by (auto simp add: ieq intro: InfCard_is_Limit [THEN ordermap_csquare_le]) moreoverhave"|succ(succ(x ∪ y))| ⊗ |succ(succ(x ∪ y))| < K" proof (cases rule: Ord_linear2 [OF ou Ord_nat]) assume"x ∪ y < nat" hence"|succ(succ(x ∪ y))| ⊗ |succ(succ(x ∪ y))| ∈ nat" by (simp add: lt_def nat_cmult_eq_mult nat_succI mult_type
nat_into_Card [THEN Card_cardinal_eq] Ord_nat) alsohave"... ⊆ K"using IK by (simp add: InfCard_def le_imp_subset) finallyshow"|succ(succ(x ∪ y))| ⊗ |succ(succ(x ∪ y))| < K" by (simp add: ltI OK) next assume natxy: "nat ≤ x ∪ y" hence seq: "|succ(succ(x ∪ y))| = |x ∪ y|"using xy by (simp add: le_imp_subset nat_succ_eqpoll [THEN cardinal_cong] le_succ_iff) alsohave"... < K"using xy by (simp add: Un_least_lt Ord_cardinal_le [THEN lt_trans1]) finallyhave"|succ(succ(x ∪ y))| < K" . moreoverhave"InfCard(|succ(succ(x ∪ y))|)"using xy natxy by (simp add: seq InfCard_def Card_cardinal nat_le_cardinal) ultimatelyshow ?thesis by (simp add: eq ltD) qed ultimatelyshow"|i| < K"by (blast intro: lt_trans1) qed qed qed
(*Main result: Kunen's Theorem 10.12*) lemma InfCard_csquare_eq: assumes IK: "InfCard(K)"shows"K ⊗ K = K" proof - have OK: "Ord(K)"using IK by (simp add: Card_is_Ord InfCard_is_Card) show"K ⊗ K = K"using OK IK proof (induct rule: trans_induct) case (step i) show"i ⊗ i = i" proof (rule le_anti_sym) have"|i × i| = |ordertype(i × i, csquare_rel(i))|" by (rule cardinal_cong,
simp add: step.hyps well_ord_csquare [THEN ordermap_bij, THEN bij_imp_eqpoll]) hence"i ⊗ i ≤ ordertype(i × i, csquare_rel(i))" by (simp add: step.hyps cmult_def Ord_cardinal_le well_ord_csquare [THEN Ord_ordertype]) moreover have"ordertype(i × i, csquare_rel(i)) ≤ i"using step by (simp add: ordertype_csquare_le) ultimatelyshow"i ⊗ i ≤ i"by (rule le_trans) next show"i ≤ i ⊗ i"using step by (blast intro: cmult_square_le InfCard_is_Card) qed qed qed
(*Corollary for arbitrary well-ordered sets (all sets, assuming AC)*) lemma well_ord_InfCard_square_eq: assumes r: "well_ord(A,r)"and I: "InfCard(|A|)"shows"A × A ≈ A" proof - have"A × A ≈ |A| × |A|" by (blast intro: prod_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_sym r) alsohave"... ≈ A" proof (rule well_ord_cardinal_eqE [OF _ r]) show"well_ord(|A| × |A|, rmult(|A|, Memrel(|A|), |A|, Memrel(|A|)))" by (blast intro: Ord_cardinal well_ord_rmult well_ord_Memrel r) next show"||A| × |A|| = |A|"using InfCard_csquare_eq I by (simp add: cmult_def) qed finallyshow ?thesis . qed
lemma InfCard_square_eqpoll: "InfCard(K) ==> K × K ≈ K" apply (rule well_ord_InfCard_square_eq) apply (erule InfCard_is_Card [THEN Card_is_Ord, THEN well_ord_Memrel]) apply (simp add: InfCard_is_Card [THEN Card_cardinal_eq]) done
(*Corollary 10.13 (1), for cardinal addition*) lemma InfCard_le_cadd_eq: "[InfCard(K); L ≤ K]==> K ⊕ L = K" apply (rule le_anti_sym) prefer 2 apply (erule ltE, blast intro: cadd_le_self InfCard_is_Card) apply (frule InfCard_is_Card [THEN Card_is_Ord, THEN le_refl]) apply (rule cadd_le_mono [THEN le_trans], assumption+) apply (simp add: InfCard_cdouble_eq) done
lemma InfCard_cadd_eq: "[InfCard(K); InfCard(L)]==> K ⊕ L = K ∪ L" apply (rule_tac i = K and j = L in Ord_linear_le) apply (typecheck add: InfCard_is_Card Card_is_Ord) apply (rule cadd_commute [THEN ssubst]) apply (rule Un_commute [THEN ssubst]) apply (simp_all add: InfCard_le_cadd_eq subset_Un_iff2 [THEN iffD1] le_imp_subset) done
(*The other part, Corollary 10.13 (2), refers to the cardinality of the set of all n-tuples of elements of K. A better version for the Isabelle theory might be InfCard(K) ==> |list(K)| = K. *)
subsection‹For Every Cardinal Number There Exists A Greater One›
text‹This result is Kunen's Theorem 10.16, which would be trivial using AC›
(*Allows selective unfolding. Less work than deriving intro/elim rules*) lemma jump_cardinal_iff: "i ∈ jump_cardinal(K) ⟷ (∃r X. r ⊆ K*K ∧ X ⊆ K ∧ well_ord(X,r) ∧ i = ordertype(X,r))" unfolding jump_cardinal_def apply (blast del: subsetI) done
lemma Card_lt_csucc_iff: "[Card(K'); Card(K)]==> K' < csucc(K) ⟷ K' ≤ K" by (simp add: lt_csucc_iff Card_cardinal_eq Card_is_Ord)
lemma InfCard_csucc: "InfCard(K) ==> InfCard(csucc(K))" by (simp add: InfCard_def Card_csucc Card_is_Ord
lt_csucc [THEN leI, THEN [2] le_trans])
subsubsection‹Removing elements from a finite set decreases its cardinality›
lemma Finite_imp_cardinal_cons [simp]: assumes FA: "Finite(A)"and a: "a∉A"shows"|cons(a,A)| = succ(|A|)" proof -
{ fix X have"Finite(X) ==> a ∉ X ==> cons(a,X) < X ==> False" proof (induct X rule: Finite_induct) case 0 thus False by (simp add: lepoll_0_iff) next case (cons x Y) hence"cons(x, cons(a, Y)) < cons(x, Y)"by (simp add: cons_commute) hence"cons(a, Y) < Y"using cons by (blast dest: cons_lepoll_consD) thus False using cons by auto qed
} hence [simp]: "¬ cons(a,A) < A"using a FA by auto have [simp]: "|A| ≈ A"using Finite_imp_well_ord [OF FA] by (blast intro: well_ord_cardinal_eqpoll) have"(μ i. i ≈ cons(a, A)) = succ(|A|)" proof (rule Least_equality [OF _ _ notI]) show"succ(|A|) ≈ cons(a, A)" by (simp add: succ_def cons_eqpoll_cong mem_not_refl a) next show"Ord(succ(|A|))"by simp next fix i assume i: "i ≤ |A|""i ≈ cons(a, A)" have"cons(a, A) ≈ i"by (rule eqpoll_sym) (rule i) alsohave"... < |A|"by (rule le_imp_lepoll) (rule i) alsohave"... ≈ A"by simp finallyhave"cons(a, A) < A" . thus False by simp qed thus ?thesis by (simp add: cardinal_def) qed
lemma Finite_imp_succ_cardinal_Diff: "[Finite(A); a ∈ A]==> succ(|A-{a}|) = |A|" apply (rule_tac b = A in cons_Diff [THEN subst], assumption) apply (simp add: Finite_imp_cardinal_cons Diff_subset [THEN subset_Finite]) apply (simp add: cons_Diff) done
lemma Finite_cardinal_in_nat [simp]: "Finite(A) ==> |A| ∈ nat" proof (induct rule: Finite_induct) case 0 thus ?caseby (simp add: cardinal_0) next case (cons x A) thus ?caseby (simp add: Finite_imp_cardinal_cons) qed
lemma card_Un_disjoint: "[Finite(A); Finite(B); A ∩ B = 0]==> |A ∪ B| = |A| #+ |B|" by (simp add: Finite_Un card_Un_Int)
lemma card_partition: assumes FC: "Finite(C)" shows "Finite (∪ C) ==> (∀c∈C. |c| = k) ==> (∀c1 ∈ C. ∀c2 ∈ C. c1 ≠ c2 ⟶ c1 ∩ c2 = 0) ==> k #* |C| = |∪ C|" using FC proof (induct rule: Finite_induct) case 0 thus ?caseby simp next case (cons x B) hence"x ∩∪B = 0"by auto thus ?caseusing cons by (auto simp add: card_Un_disjoint) qed
subsubsection‹Theorems by Krzysztof Grabczewski, proofs by lcp›
lemma nat_sum_eqpoll_sum: assumes m: "m ∈ nat"and n: "n ∈ nat"shows"m + n ≈ m #+ n" proof - have"m + n ≈ |m+n|"using m n by (blast intro: nat_implies_well_ord well_ord_radd well_ord_cardinal_eqpoll eqpoll_sym) alsohave"... = m #+ n"using m n by (simp add: nat_cadd_eq_add [symmetric] cadd_def) finallyshow ?thesis . qed
lemma Ord_subset_natD [rule_format]: "Ord(i) ==> i ⊆ nat ==> i ∈ nat | i=nat" proof (induct i rule: trans_induct3) case 0 thus ?caseby auto next case (succ i) thus ?caseby auto next case (limit l) thus ?case by (blast dest: nat_le_Limit le_imp_subset) qed
lemma Ord_nat_subset_into_Card: "[Ord(i); i ⊆ nat]==> Card(i)" by (blast dest: Ord_subset_natD intro: Card_nat nat_into_Card)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.36 Sekunden
(vorverarbeitet am 2026-04-30)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.