definition
cmult :: "[i,i]\i" (infixl \\\ 70) where "i \ j \ |i*j|"
definition
cadd :: "[i,i]\i" (infixl \\\ 65) where "i \ j \ |i+j|"
definition
csquare_rel :: "i\i" where "csquare_rel(K) \
rvimage(K*K,
lam \<langle>x,y\<rangle>:K*K. <x \<union> y, x, y>,
rmult(K,Memrel(K), K*K, rmult(K,Memrel(K), K,Memrel(K))))"
definition
jump_cardinal :: "i\i" where \<comment> \<open>This definition is more complex than Kunen's but it more easily proved to
be a cardinal\<close> "jump_cardinal(K) \ \<Union>X\<in>Pow(K). {z. r \<in> Pow(K*K), well_ord(X,r) \<and> z = ordertype(X,r)}"
definition
csucc :: "i\i" where \<comment> \<open>needed because \<^term>\<open>jump_cardinal(K)\<close> might not be the successor
of \<^term>\<open>K\<close>\<close> "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\<open>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.\<close>
subsubsection\<open>Cardinal addition is commutative\<close>
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\<open>Addition of finite cardinals is "ordinary" addition\<close>
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\<open>Cardinal multiplication\<close>
subsubsection\<open>Cardinal multiplication is commutative\<close>
lemma prod_commute_eqpoll: "A*B \ B*A" unfolding eqpoll_def apply (rule exI) apply (rule_tac c = "\\x,y\.\y,x\" and d = "\\x,y\.\y,x\" in lam_bijective,
auto) done
subsection\<open>Infinite Cardinals are Limit Ordinals\<close>
(*This proof is modelled upon one assuming nat<=A, with injection \<lambda>z\<in>cons(u,A). if z=u then 0 else if z \<in> nat then succ(z) else z and inverse \<lambda>y. if y \<in> nat then nat_case(u, \<lambda>z. z, y) else y. \
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 \<in> 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\<open>Establishing the well-ordering\<close>
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\<open>Characterising initial segments of the well-ordering\<close>
text\<open>Kunen: "each \<^term>\<open>\<langle>x,y\<rangle> \<in> K \<times> K\<close> has no more than \<^term>\<open>z \<times> z\<close> predecessors..." (page 29)\<close> lemma ordermap_csquare_le: assumes K: "Limit(K)"and x: "xand y: " y 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: "zusing 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) alsohave"... \ 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 alsohave"... \ succ(z) \ succ(z)" using zK by (rule pred_csquare_subset [THEN subset_imp_lepoll]) alsohave"... \ |succ(z)| \ |succ(z)|" using oz by (blast intro: prod_eqpoll_cong Ord_succ Ord_cardinal_eqpoll eqpoll_sym) finallyshow"ordermap(K \ K, csquare_rel(K)) ` \x,y\ \ |succ(z)| \ |succ(z)|" . qed
text\<open>Kunen: "... so the order type is \<open>\<le>\<close> K"\<close> 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) \<Longrightarrow> |list(K)| = K.
*)
subsection\<open>For Every Cardinal Number There Exists A Greater One\<close>
text\<open>This result is Kunen's Theorem 10.16, which would be trivial using AC\<close>
(*Allows selective unfolding. Less work than deriving intro/elim rules*) lemma jump_cardinal_iff: "i \ jump_cardinal(K) \
(\<exists>r X. r \<subseteq> K*K \<and> X \<subseteq> K \<and> well_ord(X,r) \<and> 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\<open>Removing elements from a finite set decreases its cardinality\<close>
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) \
(\<forall>c\<in>C. |c| = k) \<Longrightarrow>
(\<forall>c1 \<in> C. \<forall>c2 \<in> C. c1 \<noteq> c2 \<longrightarrow> c1 \<inter> c2 = 0) \<Longrightarrow>
k #* |C| = |\<Union> 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\<open>Theorems by Krzysztof Grabczewski, proofs by lcp\<close>
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
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.