32 card_of_image[simp] |
32 card_of_image[simp] |
33 card_of_singl_ordLeq[simp] |
33 card_of_singl_ordLeq[simp] |
34 Card_order_singl_ordLeq[simp] |
34 Card_order_singl_ordLeq[simp] |
35 card_of_Pow[simp] |
35 card_of_Pow[simp] |
36 Card_order_Pow[simp] |
36 Card_order_Pow[simp] |
37 card_of_set_type[simp] |
|
38 card_of_Plus1[simp] |
37 card_of_Plus1[simp] |
39 Card_order_Plus1[simp] |
38 Card_order_Plus1[simp] |
40 card_of_Plus2[simp] |
39 card_of_Plus2[simp] |
41 Card_order_Plus2[simp] |
40 Card_order_Plus2[simp] |
42 card_of_Plus_mono1[simp] |
41 card_of_Plus_mono1[simp] |
43 card_of_Plus_mono2[simp] |
42 card_of_Plus_mono2[simp] |
44 card_of_Plus_mono[simp] |
43 card_of_Plus_mono[simp] |
45 card_of_Plus_cong2[simp] |
44 card_of_Plus_cong2[simp] |
46 card_of_Plus_cong[simp] |
45 card_of_Plus_cong[simp] |
47 card_of_Un1[simp] |
|
48 card_of_diff[simp] |
|
49 card_of_Un_Plus_ordLeq[simp] |
46 card_of_Un_Plus_ordLeq[simp] |
50 card_of_Times1[simp] |
47 card_of_Times1[simp] |
51 card_of_Times2[simp] |
48 card_of_Times2[simp] |
52 card_of_Times3[simp] |
49 card_of_Times3[simp] |
53 card_of_Times_mono1[simp] |
50 card_of_Times_mono1[simp] |
54 card_of_Times_mono2[simp] |
51 card_of_Times_mono2[simp] |
55 card_of_Times_cong1[simp] |
|
56 card_of_Times_cong2[simp] |
|
57 card_of_ordIso_finite[simp] |
52 card_of_ordIso_finite[simp] |
58 finite_ordLess_infinite2[simp] |
|
59 card_of_Times_same_infinite[simp] |
53 card_of_Times_same_infinite[simp] |
60 card_of_Times_infinite_simps[simp] |
54 card_of_Times_infinite_simps[simp] |
61 card_of_Plus_infinite1[simp] |
55 card_of_Plus_infinite1[simp] |
62 card_of_Plus_infinite2[simp] |
56 card_of_Plus_infinite2[simp] |
63 card_of_Plus_ordLess_infinite[simp] |
57 card_of_Plus_ordLess_infinite[simp] |
64 card_of_Plus_ordLess_infinite_Field[simp] |
58 card_of_Plus_ordLess_infinite_Field[simp] |
65 card_of_lists_infinite[simp] |
|
66 infinite_cartesian_product[simp] |
59 infinite_cartesian_product[simp] |
67 cardSuc_Card_order[simp] |
60 cardSuc_Card_order[simp] |
68 cardSuc_greater[simp] |
61 cardSuc_greater[simp] |
69 cardSuc_ordLeq[simp] |
62 cardSuc_ordLeq[simp] |
70 cardSuc_ordLeq_ordLess[simp] |
63 cardSuc_ordLeq_ordLess[simp] |
141 qed |
134 qed |
142 |
135 |
143 |
136 |
144 subsection {* Cardinals versus set operations on arbitrary sets *} |
137 subsection {* Cardinals versus set operations on arbitrary sets *} |
145 |
138 |
|
139 lemma infinite_Pow: |
|
140 assumes "infinite A" |
|
141 shows "infinite (Pow A)" |
|
142 proof- |
|
143 have "|A| \<le>o |Pow A|" by (metis card_of_Pow ordLess_imp_ordLeq) |
|
144 thus ?thesis by (metis assms finite_Pow_iff) |
|
145 qed |
|
146 |
|
147 corollary card_of_set_type[simp]: "|UNIV::'a set| <o |UNIV::'a set set|" |
|
148 using card_of_Pow[of "UNIV::'a set"] by simp |
|
149 |
|
150 lemma card_of_Un1[simp]: |
|
151 shows "|A| \<le>o |A \<union> B| " |
|
152 using inj_on_id[of A] card_of_ordLeq[of A _] by fastforce |
|
153 |
|
154 lemma card_of_diff[simp]: |
|
155 shows "|A - B| \<le>o |A|" |
|
156 using inj_on_id[of "A - B"] card_of_ordLeq[of "A - B" _] by fastforce |
|
157 |
146 lemma subset_ordLeq_strict: |
158 lemma subset_ordLeq_strict: |
147 assumes "A \<le> B" and "|A| <o |B|" |
159 assumes "A \<le> B" and "|A| <o |B|" |
148 shows "A < B" |
160 shows "A < B" |
149 proof- |
161 proof- |
150 {assume "\<not>(A < B)" |
162 {assume "\<not>(A < B)" |
305 corollary Card_order_Times3: |
317 corollary Card_order_Times3: |
306 "Card_order r \<Longrightarrow> |Field r| \<le>o |(Field r) \<times> (Field r)|" |
318 "Card_order r \<Longrightarrow> |Field r| \<le>o |(Field r) \<times> (Field r)|" |
307 using card_of_Times3 card_of_Field_ordIso |
319 using card_of_Times3 card_of_Field_ordIso |
308 ordIso_ordLeq_trans ordIso_symmetric by blast |
320 ordIso_ordLeq_trans ordIso_symmetric by blast |
309 |
321 |
|
322 lemma card_of_Times_cong1[simp]: |
|
323 assumes "|A| =o |B|" |
|
324 shows "|A \<times> C| =o |B \<times> C|" |
|
325 using assms by (simp add: ordIso_iff_ordLeq card_of_Times_mono1) |
|
326 |
|
327 lemma card_of_Times_cong2[simp]: |
|
328 assumes "|A| =o |B|" |
|
329 shows "|C \<times> A| =o |C \<times> B|" |
|
330 using assms by (simp add: ordIso_iff_ordLeq card_of_Times_mono2) |
|
331 |
310 lemma card_of_Times_mono[simp]: |
332 lemma card_of_Times_mono[simp]: |
311 assumes "|A| \<le>o |B|" and "|C| \<le>o |D|" |
333 assumes "|A| \<le>o |B|" and "|C| \<le>o |D|" |
312 shows "|A \<times> C| \<le>o |B \<times> D|" |
334 shows "|A \<times> C| \<le>o |B \<times> D|" |
313 using assms card_of_Times_mono1[of A B C] card_of_Times_mono2[of C D B] |
335 using assms card_of_Times_mono1[of A B C] card_of_Times_mono2[of C D B] |
314 ordLeq_transitive[of "|A \<times> C|"] by blast |
336 ordLeq_transitive[of "|A \<times> C|"] by blast |
320 |
342 |
321 corollary ordIso_Times_cong1[simp]: |
343 corollary ordIso_Times_cong1[simp]: |
322 assumes "r =o r'" |
344 assumes "r =o r'" |
323 shows "|(Field r) \<times> C| =o |(Field r') \<times> C|" |
345 shows "|(Field r) \<times> C| =o |(Field r') \<times> C|" |
324 using assms card_of_cong card_of_Times_cong1 by blast |
346 using assms card_of_cong card_of_Times_cong1 by blast |
|
347 |
|
348 corollary ordIso_Times_cong2: |
|
349 assumes "r =o r'" |
|
350 shows "|A \<times> (Field r)| =o |A \<times> (Field r')|" |
|
351 using assms card_of_cong card_of_Times_cong2 by blast |
325 |
352 |
326 lemma card_of_Times_cong[simp]: |
353 lemma card_of_Times_cong[simp]: |
327 assumes "|A| =o |B|" and "|C| =o |D|" |
354 assumes "|A| =o |B|" and "|C| =o |D|" |
328 shows "|A \<times> C| =o |B \<times> D|" |
355 shows "|A \<times> C| =o |B \<times> D|" |
329 using assms |
356 using assms |
499 BIJ: "inj(g::'b \<Rightarrow> 'a)" |
526 BIJ: "inj(g::'b \<Rightarrow> 'a)" |
500 shows "(\<exists>(f::('b + 'a) => 'a). bij f) \<and> (\<exists>(h::('a + 'b) => 'a). bij h)" |
527 shows "(\<exists>(f::('b + 'a) => 'a). bij f) \<and> (\<exists>(h::('a + 'b) => 'a). bij h)" |
501 using assms Plus_infinite_bij_betw[of "UNIV::'a set" g "UNIV::'b set"] |
528 using assms Plus_infinite_bij_betw[of "UNIV::'a set" g "UNIV::'b set"] |
502 by auto |
529 by auto |
503 |
530 |
|
531 lemma card_of_Un_infinite: |
|
532 assumes INF: "infinite A" and LEQ: "|B| \<le>o |A|" |
|
533 shows "|A \<union> B| =o |A| \<and> |B \<union> A| =o |A|" |
|
534 proof- |
|
535 have "|A \<union> B| \<le>o |A <+> B|" by (rule card_of_Un_Plus_ordLeq) |
|
536 moreover have "|A <+> B| =o |A|" |
|
537 using assms by (metis card_of_Plus_infinite) |
|
538 ultimately have "|A \<union> B| \<le>o |A|" using ordLeq_ordIso_trans by blast |
|
539 hence "|A \<union> B| =o |A|" using card_of_Un1 ordIso_iff_ordLeq by blast |
|
540 thus ?thesis using Un_commute[of B A] by auto |
|
541 qed |
|
542 |
504 lemma card_of_Un_infinite_simps[simp]: |
543 lemma card_of_Un_infinite_simps[simp]: |
505 "\<lbrakk>infinite A; |B| \<le>o |A| \<rbrakk> \<Longrightarrow> |A \<union> B| =o |A|" |
544 "\<lbrakk>infinite A; |B| \<le>o |A| \<rbrakk> \<Longrightarrow> |A \<union> B| =o |A|" |
506 "\<lbrakk>infinite A; |B| \<le>o |A| \<rbrakk> \<Longrightarrow> |B \<union> A| =o |A|" |
545 "\<lbrakk>infinite A; |B| \<le>o |A| \<rbrakk> \<Longrightarrow> |B \<union> A| =o |A|" |
507 using card_of_Un_infinite by auto |
546 using card_of_Un_infinite by auto |
|
547 |
|
548 lemma card_of_Un_diff_infinite: |
|
549 assumes INF: "infinite A" and LESS: "|B| <o |A|" |
|
550 shows "|A - B| =o |A|" |
|
551 proof- |
|
552 obtain C where C_def: "C = A - B" by blast |
|
553 have "|A \<union> B| =o |A|" |
|
554 using assms ordLeq_iff_ordLess_or_ordIso card_of_Un_infinite by blast |
|
555 moreover have "C \<union> B = A \<union> B" unfolding C_def by auto |
|
556 ultimately have 1: "|C \<union> B| =o |A|" by auto |
|
557 (* *) |
|
558 {assume *: "|C| \<le>o |B|" |
|
559 moreover |
|
560 {assume **: "finite B" |
|
561 hence "finite C" |
|
562 using card_of_ordLeq_finite * by blast |
|
563 hence False using ** INF card_of_ordIso_finite 1 by blast |
|
564 } |
|
565 hence "infinite B" by auto |
|
566 ultimately have False |
|
567 using card_of_Un_infinite 1 ordIso_equivalence(1,3) LESS not_ordLess_ordIso by metis |
|
568 } |
|
569 hence 2: "|B| \<le>o |C|" using card_of_Well_order ordLeq_total by blast |
|
570 {assume *: "finite C" |
|
571 hence "finite B" using card_of_ordLeq_finite 2 by blast |
|
572 hence False using * INF card_of_ordIso_finite 1 by blast |
|
573 } |
|
574 hence "infinite C" by auto |
|
575 hence "|C| =o |A|" |
|
576 using card_of_Un_infinite 1 2 ordIso_equivalence(1,3) by metis |
|
577 thus ?thesis unfolding C_def . |
|
578 qed |
508 |
579 |
509 corollary Card_order_Un_infinite: |
580 corollary Card_order_Un_infinite: |
510 assumes INF: "infinite(Field r)" and CARD: "Card_order r" and |
581 assumes INF: "infinite(Field r)" and CARD: "Card_order r" and |
511 LEQ: "p \<le>o r" |
582 LEQ: "p \<le>o r" |
512 shows "| (Field r) \<union> (Field p) | =o r \<and> | (Field p) \<union> (Field r) | =o r" |
583 shows "| (Field r) \<union> (Field p) | =o r \<and> | (Field p) \<union> (Field r) | =o r" |
595 hence "|A Un B| <o |?C|" using INF |
666 hence "|A Un B| <o |?C|" using INF |
596 card_of_Un_ordLess_infinite by blast |
667 card_of_Un_ordLess_infinite by blast |
597 thus ?thesis using 1 ordLess_ordIso_trans by blast |
668 thus ?thesis using 1 ordLess_ordIso_trans by blast |
598 qed |
669 qed |
599 |
670 |
|
671 |
|
672 subsection {* Cardinals versus set operations involving infinite sets *} |
|
673 |
|
674 lemma finite_iff_cardOf_nat: |
|
675 "finite A = ( |A| <o |UNIV :: nat set| )" |
|
676 using infinite_iff_card_of_nat[of A] |
|
677 not_ordLeq_iff_ordLess[of "|A|" "|UNIV :: nat set|"] |
|
678 by (fastforce simp: card_of_Well_order) |
|
679 |
|
680 lemma finite_ordLess_infinite2[simp]: |
|
681 assumes "finite A" and "infinite B" |
|
682 shows "|A| <o |B|" |
|
683 using assms |
|
684 finite_ordLess_infinite[of "|A|" "|B|"] |
|
685 card_of_Well_order[of A] card_of_Well_order[of B] |
|
686 Field_card_of[of A] Field_card_of[of B] by auto |
|
687 |
|
688 lemma infinite_card_of_insert: |
|
689 assumes "infinite A" |
|
690 shows "|insert a A| =o |A|" |
|
691 proof- |
|
692 have iA: "insert a A = A \<union> {a}" by simp |
|
693 show ?thesis |
|
694 using infinite_imp_bij_betw2[OF assms] unfolding iA |
|
695 by (metis bij_betw_inv card_of_ordIso) |
|
696 qed |
|
697 |
600 lemma card_of_Un_singl_ordLess_infinite1: |
698 lemma card_of_Un_singl_ordLess_infinite1: |
601 assumes "infinite B" and "|A| <o |B|" |
699 assumes "infinite B" and "|A| <o |B|" |
602 shows "|{a} Un A| <o |B|" |
700 shows "|{a} Un A| <o |B|" |
603 proof- |
701 proof- |
604 have "|{a}| <o |B|" using assms by auto |
702 have "|{a}| <o |B|" using assms by auto |
614 moreover have "|A| <=o |insert a A|" using card_of_mono1[of A "insert a A"] by blast |
712 moreover have "|A| <=o |insert a A|" using card_of_mono1[of A "insert a A"] by blast |
615 ultimately show "|A| <o |B|" using ordLeq_ordLess_trans by blast |
713 ultimately show "|A| <o |B|" using ordLeq_ordLess_trans by blast |
616 qed |
714 qed |
617 |
715 |
618 |
716 |
619 subsection {* Cardinals versus lists *} |
717 subsection {* Cardinals versus lists *} |
|
718 |
|
719 text{* The next is an auxiliary operator, which shall be used for inductive |
|
720 proofs of facts concerning the cardinality of @{text "List"} : *} |
|
721 |
|
722 definition nlists :: "'a set \<Rightarrow> nat \<Rightarrow> 'a list set" |
|
723 where "nlists A n \<equiv> {l. set l \<le> A \<and> length l = n}" |
|
724 |
|
725 lemma lists_def2: "lists A = {l. set l \<le> A}" |
|
726 using in_listsI by blast |
|
727 |
|
728 lemma lists_UNION_nlists: "lists A = (\<Union> n. nlists A n)" |
|
729 unfolding lists_def2 nlists_def by blast |
|
730 |
|
731 lemma card_of_lists: "|A| \<le>o |lists A|" |
|
732 proof- |
|
733 let ?h = "\<lambda> a. [a]" |
|
734 have "inj_on ?h A \<and> ?h ` A \<le> lists A" |
|
735 unfolding inj_on_def lists_def2 by auto |
|
736 thus ?thesis by (metis card_of_ordLeq) |
|
737 qed |
|
738 |
|
739 lemma nlists_0: "nlists A 0 = {[]}" |
|
740 unfolding nlists_def by auto |
|
741 |
|
742 lemma nlists_not_empty: |
|
743 assumes "A \<noteq> {}" |
|
744 shows "nlists A n \<noteq> {}" |
|
745 proof(induct n, simp add: nlists_0) |
|
746 fix n assume "nlists A n \<noteq> {}" |
|
747 then obtain a and l where "a \<in> A \<and> l \<in> nlists A n" using assms by auto |
|
748 hence "a # l \<in> nlists A (Suc n)" unfolding nlists_def by auto |
|
749 thus "nlists A (Suc n) \<noteq> {}" by auto |
|
750 qed |
|
751 |
|
752 lemma Nil_in_lists: "[] \<in> lists A" |
|
753 unfolding lists_def2 by auto |
|
754 |
|
755 lemma lists_not_empty: "lists A \<noteq> {}" |
|
756 using Nil_in_lists by blast |
|
757 |
|
758 lemma card_of_nlists_Succ: "|nlists A (Suc n)| =o |A \<times> (nlists A n)|" |
|
759 proof- |
|
760 let ?B = "A \<times> (nlists A n)" let ?h = "\<lambda>(a,l). a # l" |
|
761 have "inj_on ?h ?B \<and> ?h ` ?B \<le> nlists A (Suc n)" |
|
762 unfolding inj_on_def nlists_def by auto |
|
763 moreover have "nlists A (Suc n) \<le> ?h ` ?B" |
|
764 proof(auto) |
|
765 fix l assume "l \<in> nlists A (Suc n)" |
|
766 hence 1: "length l = Suc n \<and> set l \<le> A" unfolding nlists_def by auto |
|
767 then obtain a and l' where 2: "l = a # l'" by (auto simp: length_Suc_conv) |
|
768 hence "a \<in> A \<and> set l' \<le> A \<and> length l' = n" using 1 by auto |
|
769 thus "l \<in> ?h ` ?B" using 2 unfolding nlists_def by auto |
|
770 qed |
|
771 ultimately have "bij_betw ?h ?B (nlists A (Suc n))" |
|
772 unfolding bij_betw_def by auto |
|
773 thus ?thesis using card_of_ordIso ordIso_symmetric by blast |
|
774 qed |
|
775 |
|
776 lemma card_of_nlists_infinite: |
|
777 assumes "infinite A" |
|
778 shows "|nlists A n| \<le>o |A|" |
|
779 proof(induct n) |
|
780 have "A \<noteq> {}" using assms by auto |
|
781 thus "|nlists A 0| \<le>o |A|" by (simp add: nlists_0 card_of_singl_ordLeq) |
|
782 next |
|
783 fix n assume IH: "|nlists A n| \<le>o |A|" |
|
784 have "|nlists A (Suc n)| =o |A \<times> (nlists A n)|" |
|
785 using card_of_nlists_Succ by blast |
|
786 moreover |
|
787 {have "nlists A n \<noteq> {}" using assms nlists_not_empty[of A] by blast |
|
788 hence "|A \<times> (nlists A n)| =o |A|" |
|
789 using assms IH by (auto simp add: card_of_Times_infinite) |
|
790 } |
|
791 ultimately show "|nlists A (Suc n)| \<le>o |A|" |
|
792 using ordIso_transitive ordIso_iff_ordLeq by blast |
|
793 qed |
620 |
794 |
621 lemma Card_order_lists: "Card_order r \<Longrightarrow> r \<le>o |lists(Field r) |" |
795 lemma Card_order_lists: "Card_order r \<Longrightarrow> r \<le>o |lists(Field r) |" |
622 using card_of_lists card_of_Field_ordIso ordIso_ordLeq_trans ordIso_symmetric by blast |
796 using card_of_lists card_of_Field_ordIso ordIso_ordLeq_trans ordIso_symmetric by blast |
623 |
797 |
624 lemma Union_set_lists: |
798 lemma Union_set_lists: |
688 hence "bij_betw (map f) (lists A) (lists B)" |
862 hence "bij_betw (map f) (lists A) (lists B)" |
689 by (auto simp add: bij_betw_map_lists) |
863 by (auto simp add: bij_betw_map_lists) |
690 thus ?thesis using card_of_ordIso[of "lists A"] by auto |
864 thus ?thesis using card_of_ordIso[of "lists A"] by auto |
691 qed |
865 qed |
692 |
866 |
|
867 lemma card_of_lists_infinite[simp]: |
|
868 assumes "infinite A" |
|
869 shows "|lists A| =o |A|" |
|
870 proof- |
|
871 have "|lists A| \<le>o |A|" |
|
872 using assms |
|
873 by (auto simp add: lists_UNION_nlists card_of_UNION_ordLeq_infinite |
|
874 infinite_iff_card_of_nat card_of_nlists_infinite) |
|
875 thus ?thesis using card_of_lists ordIso_iff_ordLeq by blast |
|
876 qed |
|
877 |
|
878 lemma Card_order_lists_infinite: |
|
879 assumes "Card_order r" and "infinite(Field r)" |
|
880 shows "|lists(Field r)| =o r" |
|
881 using assms card_of_lists_infinite card_of_Field_ordIso ordIso_transitive by blast |
|
882 |
693 lemma ordIso_lists_cong: |
883 lemma ordIso_lists_cong: |
694 assumes "r =o r'" |
884 assumes "r =o r'" |
695 shows "|lists(Field r)| =o |lists(Field r')|" |
885 shows "|lists(Field r)| =o |lists(Field r')|" |
696 using assms card_of_cong card_of_lists_cong by blast |
886 using assms card_of_cong card_of_lists_cong by blast |
697 |
887 |
825 subsubsection {* First as well-orders *} |
1015 subsubsection {* First as well-orders *} |
826 |
1016 |
827 lemma Field_natLess: "Field natLess = (UNIV::nat set)" |
1017 lemma Field_natLess: "Field natLess = (UNIV::nat set)" |
828 by(unfold Field_def, auto) |
1018 by(unfold Field_def, auto) |
829 |
1019 |
|
1020 lemma natLeq_well_order_on: "well_order_on UNIV natLeq" |
|
1021 using natLeq_Well_order Field_natLeq by auto |
|
1022 |
|
1023 lemma natLeq_wo_rel: "wo_rel natLeq" |
|
1024 unfolding wo_rel_def using natLeq_Well_order . |
|
1025 |
830 lemma natLeq_ofilter_less: "ofilter natLeq {0 ..< n}" |
1026 lemma natLeq_ofilter_less: "ofilter natLeq {0 ..< n}" |
831 by(auto simp add: natLeq_wo_rel wo_rel.ofilter_def, |
1027 by(auto simp add: natLeq_wo_rel wo_rel.ofilter_def, |
832 simp add: Field_natLeq, unfold rel.under_def, auto) |
1028 simp add: Field_natLeq, unfold rel.under_def, auto) |
833 |
1029 |
834 lemma natLeq_ofilter_leq: "ofilter natLeq {0 .. n}" |
1030 lemma natLeq_ofilter_leq: "ofilter natLeq {0 .. n}" |
835 by(auto simp add: natLeq_wo_rel wo_rel.ofilter_def, |
1031 by(auto simp add: natLeq_wo_rel wo_rel.ofilter_def, |
836 simp add: Field_natLeq, unfold rel.under_def, auto) |
1032 simp add: Field_natLeq, unfold rel.under_def, auto) |
|
1033 |
|
1034 lemma natLeq_UNIV_ofilter: "wo_rel.ofilter natLeq UNIV" |
|
1035 using natLeq_wo_rel Field_natLeq wo_rel.Field_ofilter[of natLeq] by auto |
837 |
1036 |
838 lemma natLeq_ofilter_iff: |
1037 lemma natLeq_ofilter_iff: |
839 "ofilter natLeq A = (A = UNIV \<or> (\<exists>n. A = {0 ..< n}))" |
1038 "ofilter natLeq A = (A = UNIV \<or> (\<exists>n. A = {0 ..< n}))" |
840 proof(rule iffI) |
1039 proof(rule iffI) |
841 assume "ofilter natLeq A" |
1040 assume "ofilter natLeq A" |
898 using assms card_of_less ordIso_symmetric ordLeq_ordIso_trans by blast |
1097 using assms card_of_less ordIso_symmetric ordLeq_ordIso_trans by blast |
899 thus ?thesis by (auto simp add: card_of_ordLeq_finite) |
1098 thus ?thesis by (auto simp add: card_of_ordLeq_finite) |
900 qed |
1099 qed |
901 |
1100 |
902 |
1101 |
903 subsubsection {* "Backwards compatibility" with the numeric cardinal operator for finite sets *} |
1102 subsubsection {* "Backward compatibility" with the numeric cardinal operator for finite sets *} |
904 |
1103 |
905 lemma finite_card_of_iff_card: |
1104 lemma finite_card_of_iff_card: |
906 assumes FIN: "finite A" and FIN': "finite B" |
1105 assumes FIN: "finite A" and FIN': "finite B" |
907 shows "( |A| =o |B| ) = (card A = card B)" |
1106 shows "( |A| =o |B| ) = (card A = card B)" |
908 using assms card_of_ordIso[of A B] bij_betw_iff_card[of A B] by blast |
1107 using assms card_of_ordIso[of A B] bij_betw_iff_card[of A B] by blast |
990 |
1189 |
991 lemma relChain_under: |
1190 lemma relChain_under: |
992 assumes "Well_order r" |
1191 assumes "Well_order r" |
993 shows "relChain r (\<lambda> i. under r i)" |
1192 shows "relChain r (\<lambda> i. under r i)" |
994 using assms unfolding relChain_def by auto |
1193 using assms unfolding relChain_def by auto |
|
1194 |
|
1195 lemma card_of_infinite_diff_finite: |
|
1196 assumes "infinite A" and "finite B" |
|
1197 shows "|A - B| =o |A|" |
|
1198 by (metis assms card_of_Un_diff_infinite finite_ordLess_infinite2) |
995 |
1199 |
996 lemma infinite_card_of_diff_singl: |
1200 lemma infinite_card_of_diff_singl: |
997 assumes "infinite A" |
1201 assumes "infinite A" |
998 shows "|A - {a}| =o |A|" |
1202 shows "|A - {a}| =o |A|" |
999 by (metis assms card_of_infinite_diff_finite finite.emptyI finite_insert) |
1203 by (metis assms card_of_infinite_diff_finite finite.emptyI finite_insert) |
1108 next |
1312 next |
1109 fix f A' assume "f \<in> Func_option A' B" and "A' \<subseteq> A" |
1313 fix f A' assume "f \<in> Func_option A' B" and "A' \<subseteq> A" |
1110 thus "f \<in> Pfunc A B" unfolding Func_option_def Pfunc_def by auto |
1314 thus "f \<in> Pfunc A B" unfolding Func_option_def Pfunc_def by auto |
1111 qed |
1315 qed |
1112 |
1316 |
|
1317 lemma card_of_Func_mono: |
|
1318 fixes A1 A2 :: "'a set" and B :: "'b set" |
|
1319 assumes A12: "A1 \<subseteq> A2" and B: "B \<noteq> {}" |
|
1320 shows "|Func A1 B| \<le>o |Func A2 B|" |
|
1321 proof- |
|
1322 obtain bb where bb: "bb \<in> B" using B by auto |
|
1323 def F \<equiv> "\<lambda> (f1::'a \<Rightarrow> 'b) a. if a \<in> A2 then (if a \<in> A1 then f1 a else bb) |
|
1324 else undefined" |
|
1325 show ?thesis unfolding card_of_ordLeq[symmetric] proof(intro exI[of _ F] conjI) |
|
1326 show "inj_on F (Func A1 B)" unfolding inj_on_def proof safe |
|
1327 fix f g assume f: "f \<in> Func A1 B" and g: "g \<in> Func A1 B" and eq: "F f = F g" |
|
1328 show "f = g" |
|
1329 proof(rule ext) |
|
1330 fix a show "f a = g a" |
|
1331 proof(cases "a \<in> A1") |
|
1332 case True |
|
1333 thus ?thesis using eq A12 unfolding F_def fun_eq_iff |
|
1334 by (elim allE[of _ a]) auto |
|
1335 qed(insert f g, unfold Func_def, fastforce) |
|
1336 qed |
|
1337 qed |
|
1338 qed(insert bb, unfold Func_def F_def, force) |
|
1339 qed |
|
1340 |
1113 lemma card_of_Func_option_mono: |
1341 lemma card_of_Func_option_mono: |
1114 fixes A1 A2 :: "'a set" and B :: "'b set" |
1342 fixes A1 A2 :: "'a set" and B :: "'b set" |
1115 assumes A12: "A1 \<subseteq> A2" and B: "B \<noteq> {}" |
1343 assumes A12: "A1 \<subseteq> A2" and B: "B \<noteq> {}" |
1116 shows "|Func_option A1 B| \<le>o |Func_option A2 B|" |
1344 shows "|Func_option A1 B| \<le>o |Func_option A2 B|" |
1117 by (metis card_of_Func_mono[OF A12 B] card_of_Func_option_Func |
1345 by (metis card_of_Func_mono[OF A12 B] card_of_Func_option_Func |
1176 |
1404 |
1177 lemma card_of_Func_UNIV_UNIV: |
1405 lemma card_of_Func_UNIV_UNIV: |
1178 "|Func (UNIV::'a set) (UNIV::'b set)| =o |UNIV::('a \<Rightarrow> 'b) set|" |
1406 "|Func (UNIV::'a set) (UNIV::'b set)| =o |UNIV::('a \<Rightarrow> 'b) set|" |
1179 using card_of_Func_UNIV[of "UNIV::'b set"] by auto |
1407 using card_of_Func_UNIV[of "UNIV::'b set"] by auto |
1180 |
1408 |
|
1409 lemma ordLeq_Func: |
|
1410 assumes "{b1,b2} \<subseteq> B" "b1 \<noteq> b2" |
|
1411 shows "|A| \<le>o |Func A B|" |
|
1412 unfolding card_of_ordLeq[symmetric] proof(intro exI conjI) |
|
1413 let ?F = "\<lambda> aa a. if a \<in> A then (if a = aa then b1 else b2) else undefined" |
|
1414 show "inj_on ?F A" using assms unfolding inj_on_def fun_eq_iff by auto |
|
1415 show "?F ` A \<subseteq> Func A B" using assms unfolding Func_def by auto |
|
1416 qed |
|
1417 |
|
1418 lemma infinite_Func: |
|
1419 assumes A: "infinite A" and B: "{b1,b2} \<subseteq> B" "b1 \<noteq> b2" |
|
1420 shows "infinite (Func A B)" |
|
1421 using ordLeq_Func[OF B] by (metis A card_of_ordLeq_finite) |
|
1422 |
1181 end |
1423 end |