61 then obtain c where c: "c\<in>A" "j < c" "Card(c)" |
61 then obtain c where c: "c\<in>A" "j < c" "Card(c)" |
62 by blast |
62 by blast |
63 hence jls: "j \<prec> c" |
63 hence jls: "j \<prec> c" |
64 by (simp add: lt_Card_imp_lesspoll) |
64 by (simp add: lt_Card_imp_lesspoll) |
65 { assume eqp: "j \<approx> \<Union>A" |
65 { assume eqp: "j \<approx> \<Union>A" |
66 hence Uls: "\<Union>A \<prec> c" using jls |
66 have "c \<lesssim> \<Union>A" using c |
67 by (blast intro: eqpoll_sym eqpoll_imp_lepoll lesspoll_trans1) |
|
68 moreover have "c \<lesssim> \<Union>A" using c |
|
69 by (blast intro: subset_imp_lepoll) |
67 by (blast intro: subset_imp_lepoll) |
70 ultimately have "c \<prec> c" |
68 also have "... \<approx> j" by (rule eqpoll_sym [OF eqp]) |
71 by (blast intro: lesspoll_trans1) |
69 also have "... \<prec> c" by (rule jls) |
|
70 finally have "c \<prec> c" . |
72 hence False |
71 hence False |
73 by auto |
72 by auto |
74 } thus "\<not> j \<approx> \<Union>A" by blast |
73 } thus "\<not> j \<approx> \<Union>A" by blast |
75 qed |
74 qed |
76 |
75 |
121 apply (unfold eqpoll_def) |
113 apply (unfold eqpoll_def) |
122 apply (rule exI) |
114 apply (rule exI) |
123 apply (rule sum_assoc_bij) |
115 apply (rule sum_assoc_bij) |
124 done |
116 done |
125 |
117 |
126 (*Unconditional version requires AC*) |
118 text{*Unconditional version requires AC*} |
127 lemma well_ord_cadd_assoc: |
119 lemma well_ord_cadd_assoc: |
128 "[| well_ord(i,ri); well_ord(j,rj); well_ord(k,rk) |] |
120 assumes i: "well_ord(i,ri)" and j: "well_ord(j,rj)" and k: "well_ord(k,rk)" |
129 ==> (i \<oplus> j) \<oplus> k = i \<oplus> (j \<oplus> k)" |
121 shows "(i \<oplus> j) \<oplus> k = i \<oplus> (j \<oplus> k)" |
130 apply (unfold cadd_def) |
122 proof (unfold cadd_def, rule cardinal_cong) |
131 apply (rule cardinal_cong) |
123 have "|i + j| + k \<approx> (i + j) + k" |
132 apply (rule eqpoll_trans) |
124 by (blast intro: sum_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_refl well_ord_radd i j) |
133 apply (rule sum_eqpoll_cong [OF well_ord_cardinal_eqpoll eqpoll_refl]) |
125 also have "... \<approx> i + (j + k)" |
134 apply (blast intro: well_ord_radd ) |
126 by (rule sum_assoc_eqpoll) |
135 apply (rule sum_assoc_eqpoll [THEN eqpoll_trans]) |
127 also have "... \<approx> i + |j + k|" |
136 apply (rule eqpoll_sym) |
128 by (blast intro: sum_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_refl well_ord_radd j k eqpoll_sym) |
137 apply (rule sum_eqpoll_cong [OF eqpoll_refl well_ord_cardinal_eqpoll]) |
129 finally show "|i + j| + k \<approx> i + |j + k|" . |
138 apply (blast intro: well_ord_radd ) |
130 qed |
139 done |
131 |
140 |
132 |
141 subsubsection{*0 is the identity for addition*} |
133 subsubsection{*0 is the identity for addition*} |
142 |
134 |
143 lemma sum_0_eqpoll: "0+A \<approx> A" |
135 lemma sum_0_eqpoll: "0+A \<approx> A" |
144 apply (unfold eqpoll_def) |
136 apply (unfold eqpoll_def) |
243 apply (unfold eqpoll_def) |
234 apply (unfold eqpoll_def) |
244 apply (rule exI) |
235 apply (rule exI) |
245 apply (rule prod_assoc_bij) |
236 apply (rule prod_assoc_bij) |
246 done |
237 done |
247 |
238 |
248 (*Unconditional version requires AC*) |
239 text{*Unconditional version requires AC*} |
249 lemma well_ord_cmult_assoc: |
240 lemma well_ord_cmult_assoc: |
250 "[| well_ord(i,ri); well_ord(j,rj); well_ord(k,rk) |] |
241 assumes i: "well_ord(i,ri)" and j: "well_ord(j,rj)" and k: "well_ord(k,rk)" |
251 ==> (i \<otimes> j) \<otimes> k = i \<otimes> (j \<otimes> k)" |
242 shows "(i \<otimes> j) \<otimes> k = i \<otimes> (j \<otimes> k)" |
252 apply (unfold cmult_def) |
243 proof (unfold cmult_def, rule cardinal_cong) |
253 apply (rule cardinal_cong) |
244 have "|i * j| * k \<approx> (i * j) * k" |
254 apply (rule eqpoll_trans) |
245 by (blast intro: prod_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_refl well_ord_rmult i j) |
255 apply (rule prod_eqpoll_cong [OF well_ord_cardinal_eqpoll eqpoll_refl]) |
246 also have "... \<approx> i * (j * k)" |
256 apply (blast intro: well_ord_rmult) |
247 by (rule prod_assoc_eqpoll) |
257 apply (rule prod_assoc_eqpoll [THEN eqpoll_trans]) |
248 also have "... \<approx> i * |j * k|" |
258 apply (rule eqpoll_sym) |
249 by (blast intro: prod_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_refl well_ord_rmult j k eqpoll_sym) |
259 apply (rule prod_eqpoll_cong [OF eqpoll_refl well_ord_cardinal_eqpoll]) |
250 finally show "|i * j| * k \<approx> i * |j * k|" . |
260 apply (blast intro: well_ord_rmult) |
251 qed |
261 done |
|
262 |
252 |
263 subsubsection{*Cardinal multiplication distributes over addition*} |
253 subsubsection{*Cardinal multiplication distributes over addition*} |
264 |
254 |
265 lemma sum_prod_distrib_eqpoll: "(A+B)*C \<approx> (A*C)+(B*C)" |
255 lemma sum_prod_distrib_eqpoll: "(A+B)*C \<approx> (A*C)+(B*C)" |
266 apply (unfold eqpoll_def) |
256 apply (unfold eqpoll_def) |
267 apply (rule exI) |
257 apply (rule exI) |
268 apply (rule sum_prod_distrib_bij) |
258 apply (rule sum_prod_distrib_bij) |
269 done |
259 done |
270 |
260 |
271 lemma well_ord_cadd_cmult_distrib: |
261 lemma well_ord_cadd_cmult_distrib: |
272 "[| well_ord(i,ri); well_ord(j,rj); well_ord(k,rk) |] |
262 assumes i: "well_ord(i,ri)" and j: "well_ord(j,rj)" and k: "well_ord(k,rk)" |
273 ==> (i \<oplus> j) \<otimes> k = (i \<otimes> k) \<oplus> (j \<otimes> k)" |
263 shows "(i \<oplus> j) \<otimes> k = (i \<otimes> k) \<oplus> (j \<otimes> k)" |
274 apply (unfold cadd_def cmult_def) |
264 proof (unfold cadd_def cmult_def, rule cardinal_cong) |
275 apply (rule cardinal_cong) |
265 have "|i + j| * k \<approx> (i + j) * k" |
276 apply (rule eqpoll_trans) |
266 by (blast intro: prod_eqpoll_cong well_ord_cardinal_eqpoll eqpoll_refl well_ord_radd i j) |
277 apply (rule prod_eqpoll_cong [OF well_ord_cardinal_eqpoll eqpoll_refl]) |
267 also have "... \<approx> i * k + j * k" |
278 apply (blast intro: well_ord_radd) |
268 by (rule sum_prod_distrib_eqpoll) |
279 apply (rule sum_prod_distrib_eqpoll [THEN eqpoll_trans]) |
269 also have "... \<approx> |i * k| + |j * k|" |
280 apply (rule eqpoll_sym) |
270 by (blast intro: sum_eqpoll_cong well_ord_cardinal_eqpoll well_ord_rmult i j k eqpoll_sym) |
281 apply (rule sum_eqpoll_cong [OF well_ord_cardinal_eqpoll |
271 finally show "|i + j| * k \<approx> |i * k| + |j * k|" . |
282 well_ord_cardinal_eqpoll]) |
272 qed |
283 apply (blast intro: well_ord_rmult)+ |
|
284 done |
|
285 |
273 |
286 subsubsection{*Multiplication by 0 yields 0*} |
274 subsubsection{*Multiplication by 0 yields 0*} |
287 |
275 |
288 lemma prod_0_eqpoll: "0*A \<approx> 0" |
276 lemma prod_0_eqpoll: "0*A \<approx> 0" |
289 apply (unfold eqpoll_def) |
277 apply (unfold eqpoll_def) |
389 done |
377 done |
390 |
378 |
391 lemma cmult_2: "Card(n) ==> 2 \<otimes> n = n \<oplus> n" |
379 lemma cmult_2: "Card(n) ==> 2 \<otimes> n = n \<oplus> n" |
392 by (simp add: cmult_succ_lemma Card_is_Ord cadd_commute [of _ 0]) |
380 by (simp add: cmult_succ_lemma Card_is_Ord cadd_commute [of _ 0]) |
393 |
381 |
394 lemma sum_lepoll_prod: "2 \<lesssim> C ==> B+B \<lesssim> C*B" |
382 lemma sum_lepoll_prod: |
395 apply (rule lepoll_trans) |
383 assumes C: "2 \<lesssim> C" shows "B+B \<lesssim> C*B" |
396 apply (rule sum_eq_2_times [THEN equalityD1, THEN subset_imp_lepoll]) |
384 proof - |
397 apply (erule prod_lepoll_mono) |
385 have "B+B \<lesssim> 2*B" |
398 apply (rule lepoll_refl) |
386 by (simp add: sum_eq_2_times) |
399 done |
387 also have "... \<lesssim> C*B" |
|
388 by (blast intro: prod_lepoll_mono lepoll_refl C) |
|
389 finally show "B+B \<lesssim> C*B" . |
|
390 qed |
400 |
391 |
401 lemma lepoll_imp_sum_lepoll_prod: "[| A \<lesssim> B; 2 \<lesssim> A |] ==> A+B \<lesssim> A*B" |
392 lemma lepoll_imp_sum_lepoll_prod: "[| A \<lesssim> B; 2 \<lesssim> A |] ==> A+B \<lesssim> A*B" |
402 by (blast intro: sum_lepoll_mono sum_lepoll_prod lepoll_trans lepoll_refl) |
393 by (blast intro: sum_lepoll_mono sum_lepoll_prod lepoll_trans lepoll_refl) |
403 |
394 |
404 |
395 |
483 apply (rule pred_subset) |
474 apply (rule pred_subset) |
484 done |
475 done |
485 |
476 |
486 subsubsection{*Establishing the well-ordering*} |
477 subsubsection{*Establishing the well-ordering*} |
487 |
478 |
488 lemma csquare_lam_inj: |
479 lemma well_ord_csquare: |
489 "Ord(K) ==> (lam <x,y>:K*K. <x \<union> y, x, y>) \<in> inj(K*K, K*K*K)" |
480 assumes K: "Ord(K)" shows "well_ord(K*K, csquare_rel(K))" |
490 apply (unfold inj_def) |
481 proof (unfold csquare_rel_def, rule well_ord_rvimage) |
491 apply (force intro: lam_type Un_least_lt [THEN ltD] ltI) |
482 show "(\<lambda>\<langle>x,y\<rangle>\<in>K \<times> K. \<langle>x \<union> y, x, y\<rangle>) \<in> inj(K \<times> K, K \<times> K \<times> K)" using K |
492 done |
483 by (force simp add: inj_def intro: lam_type Un_least_lt [THEN ltD] ltI) |
493 |
484 next |
494 lemma well_ord_csquare: "Ord(K) ==> well_ord(K*K, csquare_rel(K))" |
485 show "well_ord(K \<times> K \<times> K, rmult(K, Memrel(K), K \<times> K, rmult(K, Memrel(K), K, Memrel(K))))" |
495 apply (unfold csquare_rel_def) |
486 using K by (blast intro: well_ord_rmult well_ord_Memrel) |
496 apply (rule csquare_lam_inj [THEN well_ord_rvimage], assumption) |
487 qed |
497 apply (blast intro: well_ord_rmult well_ord_Memrel) |
|
498 done |
|
499 |
488 |
500 subsubsection{*Characterising initial segments of the well-ordering*} |
489 subsubsection{*Characterising initial segments of the well-ordering*} |
501 |
490 |
502 lemma csquareD: |
491 lemma csquareD: |
503 "[| <<x,y>, <z,z>> \<in> csquare_rel(K); x<K; y<K; z<K |] ==> x \<le> z & y \<le> z" |
492 "[| <<x,y>, <z,z>> \<in> csquare_rel(K); x<K; y<K; z<K |] ==> x \<le> z & y \<le> z" |
510 done |
499 done |
511 |
500 |
512 lemma pred_csquare_subset: |
501 lemma pred_csquare_subset: |
513 "z<K ==> Order.pred(K*K, <z,z>, csquare_rel(K)) \<subseteq> succ(z)*succ(z)" |
502 "z<K ==> Order.pred(K*K, <z,z>, csquare_rel(K)) \<subseteq> succ(z)*succ(z)" |
514 apply (unfold Order.pred_def) |
503 apply (unfold Order.pred_def) |
515 apply (safe del: SigmaI succCI) |
504 apply (safe del: SigmaI dest!: csquareD) |
516 apply (erule csquareD [THEN conjE]) |
|
517 apply (unfold lt_def, auto) |
505 apply (unfold lt_def, auto) |
518 done |
506 done |
519 |
507 |
520 lemma csquare_ltI: |
508 lemma csquare_ltI: |
521 "[| x<z; y<z; z<K |] ==> <<x,y>, <z,z>> \<in> csquare_rel(K)" |
509 "[| x<z; y<z; z<K |] ==> <<x,y>, <z,z>> \<in> csquare_rel(K)" |
551 apply (rule csquare_ltI [THEN ordermap_mono, THEN ltI]) |
539 apply (rule csquare_ltI [THEN ordermap_mono, THEN ltI]) |
552 apply (erule_tac [4] well_ord_is_wf) |
540 apply (erule_tac [4] well_ord_is_wf) |
553 apply (blast intro!: Un_upper1_le Un_upper2_le Ord_ordermap elim!: ltE)+ |
541 apply (blast intro!: Un_upper1_le Un_upper2_le Ord_ordermap elim!: ltE)+ |
554 done |
542 done |
555 |
543 |
556 (*Kunen: "each <x,y>: K*K has no more than z*z predecessors..." (page 29) *) |
544 text{*Kunen: "each @{term"\<langle>x,y\<rangle> \<in> K \<times> K"} has no more than @{term"z \<times> z"} predecessors..." (page 29) *} |
557 lemma ordermap_csquare_le: |
545 lemma ordermap_csquare_le: |
558 "[| Limit(K); x<K; y<K; z=succ(x \<union> y) |] |
546 assumes K: "Limit(K)" and x: "x<K" and y: " y<K" and z: "z=succ(x \<union> y)" |
559 ==> | ordermap(K*K, csquare_rel(K)) ` <x,y> | \<le> |succ(z)| \<otimes> |succ(z)|" |
547 shows "|ordermap(K \<times> K, csquare_rel(K)) ` \<langle>x,y\<rangle>| \<le> |succ(z)| \<otimes> |succ(z)|" |
560 apply (unfold cmult_def) |
548 proof (unfold cmult_def, rule well_ord_lepoll_imp_Card_le) |
561 apply (rule well_ord_rmult [THEN well_ord_lepoll_imp_Card_le]) |
549 show "well_ord(|succ(z)| \<times> |succ(z)|, |
562 apply (rule Ord_cardinal [THEN well_ord_Memrel])+ |
550 rmult(|succ(z)|, Memrel(|succ(z)|), |succ(z)|, Memrel(|succ(z)|)))" |
563 apply (subgoal_tac "z<K") |
551 by (blast intro: Ord_cardinal well_ord_Memrel well_ord_rmult) |
564 prefer 2 apply (blast intro!: Un_least_lt Limit_has_succ) |
552 next |
565 apply (rule ordermap_z_lt [THEN leI, THEN le_imp_lepoll, THEN lepoll_trans], |
553 have zK: "z<K" using x y z K |
566 assumption+) |
554 by (blast intro: Un_least_lt Limit_has_succ) |
567 apply (rule ordermap_eqpoll_pred [THEN eqpoll_imp_lepoll, THEN lepoll_trans]) |
555 hence oz: "Ord(z)" by (elim ltE) |
568 apply (erule Limit_is_Ord [THEN well_ord_csquare]) |
556 have "ordermap(K \<times> K, csquare_rel(K)) ` \<langle>x,y\<rangle> \<lesssim> ordermap(K \<times> K, csquare_rel(K)) ` \<langle>z,z\<rangle>" |
569 apply (blast intro: ltD) |
557 by (blast intro: ordermap_z_lt leI le_imp_lepoll K x y z) |
570 apply (rule pred_csquare_subset [THEN subset_imp_lepoll, THEN lepoll_trans], |
558 also have "... \<approx> Order.pred(K \<times> K, \<langle>z,z\<rangle>, csquare_rel(K))" |
571 assumption) |
559 proof (rule ordermap_eqpoll_pred) |
572 apply (elim ltE) |
560 show "well_ord(K \<times> K, csquare_rel(K))" using K |
573 apply (rule prod_eqpoll_cong [THEN eqpoll_sym, THEN eqpoll_imp_lepoll]) |
561 by (rule Limit_is_Ord [THEN well_ord_csquare]) |
574 apply (erule Ord_succ [THEN Ord_cardinal_eqpoll])+ |
562 next |
575 done |
563 show "\<langle>z, z\<rangle> \<in> K \<times> K" using zK |
576 |
564 by (blast intro: ltD) |
577 (*Kunen: "... so the order type is @{text"\<le>"} K" *) |
565 qed |
|
566 also have "... \<lesssim> succ(z) \<times> succ(z)" using zK |
|
567 by (rule pred_csquare_subset [THEN subset_imp_lepoll]) |
|
568 also have "... \<approx> |succ(z)| \<times> |succ(z)|" using oz |
|
569 by (blast intro: prod_eqpoll_cong Ord_succ Ord_cardinal_eqpoll eqpoll_sym) |
|
570 finally show "ordermap(K \<times> K, csquare_rel(K)) ` \<langle>x,y\<rangle> \<lesssim> |succ(z)| \<times> |succ(z)|" . |
|
571 qed |
|
572 |
|
573 text{*Kunen: "... so the order type is @{text"\<le>"} K" *} |
578 lemma ordertype_csquare_le: |
574 lemma ordertype_csquare_le: |
579 "[| InfCard(K); \<forall>y\<in>K. InfCard(y) \<longrightarrow> y \<otimes> y = y |] |
575 "[| InfCard(K); \<forall>y\<in>K. InfCard(y) \<longrightarrow> y \<otimes> y = y |] |
580 ==> ordertype(K*K, csquare_rel(K)) \<le> K" |
576 ==> ordertype(K*K, csquare_rel(K)) \<le> K" |
581 apply (frule InfCard_is_Card [THEN Card_is_Ord]) |
577 apply (frule InfCard_is_Card [THEN Card_is_Ord]) |
582 apply (rule all_lt_imp_le, assumption) |
578 apply (rule all_lt_imp_le, assumption) |