src/ZF/AC/AC16_lemmas.thy
changeset 12820 02e2ff3e4d37
parent 12776 249600a63ba9
child 13339 0f89104dd377
equal deleted inserted replaced
12819:2f61bca07de7 12820:02e2ff3e4d37
    38 apply (erule CollectE)
    38 apply (erule CollectE)
    39 apply (drule eqpoll_1_iff_singleton [THEN iffD1])
    39 apply (drule eqpoll_1_iff_singleton [THEN iffD1])
    40 apply (fast intro!: RepFunI)
    40 apply (fast intro!: RepFunI)
    41 apply (rule subsetI)
    41 apply (rule subsetI)
    42 apply (erule RepFunE)
    42 apply (erule RepFunE)
    43 apply (rule CollectI)
    43 apply (rule CollectI, fast)
    44 apply fast
       
    45 apply (fast intro!: singleton_eqpoll_1)
    44 apply (fast intro!: singleton_eqpoll_1)
    46 done
    45 done
    47 
    46 
    48 lemma eqpoll_RepFun_sing: "X\<approx>{{x}. x \<in> X}"
    47 lemma eqpoll_RepFun_sing: "X\<approx>{{x}. x \<in> X}"
    49 apply (unfold eqpoll_def bij_def)
    48 apply (unfold eqpoll_def bij_def)
    50 apply (rule_tac x = "\<lambda>x \<in> X. {x}" in exI)
    49 apply (rule_tac x = "\<lambda>x \<in> X. {x}" in exI)
    51 apply (rule IntI)
    50 apply (rule IntI)
    52 apply (unfold inj_def surj_def)
    51 apply (unfold inj_def surj_def, simp)
    53 apply simp
    52 apply (fast intro!: lam_type RepFunI intro: singleton_eq_iff [THEN iffD1], simp)
    54 apply (fast intro!: lam_type RepFunI intro: singleton_eq_iff [THEN iffD1])
       
    55 apply simp
       
    56 apply (fast intro!: lam_type)
    53 apply (fast intro!: lam_type)
    57 done
    54 done
    58 
    55 
    59 lemma subsets_eqpoll_1_eqpoll: "{Y \<in> Pow(X). Y\<approx>1}\<approx>X"
    56 lemma subsets_eqpoll_1_eqpoll: "{Y \<in> Pow(X). Y\<approx>1}\<approx>X"
    60 apply (rule subsets_eqpoll_1_eq [THEN ssubst])
    57 apply (rule subsets_eqpoll_1_eq [THEN ssubst])
    74      "[| InfCard(x); n \<in> nat |] 
    71      "[| InfCard(x); n \<in> nat |] 
    75       ==> {y \<in> Pow(x). y\<approx>succ(succ(n))} \<lesssim> x*{y \<in> Pow(x). y\<approx>succ(n)}"
    72       ==> {y \<in> Pow(x). y\<approx>succ(succ(n))} \<lesssim> x*{y \<in> Pow(x). y\<approx>succ(n)}"
    76 apply (unfold lepoll_def)
    73 apply (unfold lepoll_def)
    77 apply (rule_tac x = "\<lambda>y \<in> {y \<in> Pow(x) . y\<approx>succ (succ (n))}. 
    74 apply (rule_tac x = "\<lambda>y \<in> {y \<in> Pow(x) . y\<approx>succ (succ (n))}. 
    78                       <LEAST i. i \<in> y, y-{LEAST i. i \<in> y}>" in exI)
    75                       <LEAST i. i \<in> y, y-{LEAST i. i \<in> y}>" in exI)
    79 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective);
    76 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective)
    80  apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in);
    77  apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in)
    81 apply (simp, blast intro: InfCard_Least_in);
    78 apply (simp, blast intro: InfCard_Least_in)
    82 done
    79 done
    83 
    80 
    84 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))"
    81 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))"
    85 apply (rule subsetI)
    82 apply (rule subsetI)
    86 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast );
    83 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast )
    87 apply (simp, erule bexE); 
    84 apply (simp, erule bexE) 
    88 apply (rule_tac i=xa and j=x in Ord_linear_le)
    85 apply (rule_tac i=xa and j=x in Ord_linear_le)
    89 apply (blast dest: le_imp_subset elim: leE ltE)+
    86 apply (blast dest: le_imp_subset elim: leE ltE)+
    90 done
    87 done
    91 
    88 
    92 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j"
    89 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j"
    93 by (fast elim!: mem_irrefl)
    90 by (fast elim!: mem_irrefl)
    94 
    91 
    95 lemma succ_Union_not_mem:
    92 lemma succ_Union_not_mem:
    96      "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z"
    93      "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z"
    97 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem]);
    94 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast)
    98 apply blast
       
    99 done
    95 done
   100 
    96 
   101 lemma Union_cons_eq_succ_Union:
    97 lemma Union_cons_eq_succ_Union:
   102      "Union(cons(succ(Union(z)),z)) = succ(Union(z))"
    98      "Union(cons(succ(Union(z)),z)) = succ(Union(z))"
   103 by fast
    99 by fast
   113 apply (induct_tac "n")
   109 apply (induct_tac "n")
   114 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0])
   110 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0])
   115 apply (intro allI impI)
   111 apply (intro allI impI)
   116 apply (erule natE)
   112 apply (erule natE)
   117 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1]
   113 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1]
   118             intro!: Union_singleton)
   114             intro!: Union_singleton, clarify) 
   119 apply (clarify ); 
       
   120 apply (elim not_emptyE)
   115 apply (elim not_emptyE)
   121 apply (erule_tac x = "z-{xb}" in allE)
   116 apply (erule_tac x = "z-{xb}" in allE)
   122 apply (erule impE)
   117 apply (erule impE)
   123 apply (fast elim!: Diff_sing_eqpoll
   118 apply (fast elim!: Diff_sing_eqpoll
   124                    Diff_sing_eqpoll [THEN eqpoll_succ_imp_not_empty])
   119                    Diff_sing_eqpoll [THEN eqpoll_succ_imp_not_empty])
   125 apply (subgoal_tac "xb \<union> \<Union>(z - {xb}) \<in> z");
   120 apply (subgoal_tac "xb \<union> \<Union>(z - {xb}) \<in> z")
   126 apply (simp add: Union_eq_Un [symmetric]);
   121 apply (simp add: Union_eq_Un [symmetric])
   127 apply (frule bspec, assumption)
   122 apply (frule bspec, assumption)
   128 apply (drule bspec); 
   123 apply (drule bspec) 
   129 apply (erule Diff_subset [THEN subsetD]);
   124 apply (erule Diff_subset [THEN subsetD])
   130 apply (drule Un_Ord_disj, assumption)
   125 apply (drule Un_Ord_disj, assumption, auto) 
   131 apply (auto ); 
       
   132 done
   126 done
   133 
   127 
   134 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z"
   128 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z"
   135 apply (blast intro: Union_in_lemma); 
   129 by (blast intro: Union_in_lemma)
   136 done
       
   137 
   130 
   138 lemma succ_Union_in_x:
   131 lemma succ_Union_in_x:
   139      "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x"
   132      "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x"
   140 apply (rule Limit_has_succ [THEN ltE]);
   133 apply (rule Limit_has_succ [THEN ltE])
   141 prefer 3 apply assumption
   134 prefer 3 apply assumption
   142 apply (erule InfCard_is_Limit)
   135 apply (erule InfCard_is_Limit)
   143 apply (case_tac "z=0");
   136 apply (case_tac "z=0")
   144 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]);
   137 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0])
   145 apply (rule ltI [OF PowD [THEN subsetD] InfCard_is_Card [THEN Card_is_Ord]]);
   138 apply (rule ltI [OF PowD [THEN subsetD] InfCard_is_Card [THEN Card_is_Ord]], assumption)
   146 apply assumption; 
       
   147 apply (blast intro: Union_in
   139 apply (blast intro: Union_in
   148                     InfCard_is_Card [THEN Card_is_Ord, THEN Ord_in_Ord])+
   140                     InfCard_is_Card [THEN Card_is_Ord, THEN Ord_in_Ord])+
   149 done
   141 done
   150 
   142 
   151 lemma succ_lepoll_succ_succ:
   143 lemma succ_lepoll_succ_succ:
   152      "[| InfCard(x); n \<in> nat |] 
   144      "[| InfCard(x); n \<in> nat |] 
   153       ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}"
   145       ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}"
   154 apply (unfold lepoll_def);
   146 apply (unfold lepoll_def)
   155 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" 
   147 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" 
   156        in exI)
   148        in exI)
   157 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective)
   149 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective)
   158 apply (blast intro!: succ_Union_in_x succ_Union_not_mem
   150 apply (blast intro!: succ_Union_in_x succ_Union_not_mem
   159              intro: cons_eqpoll_succ Ord_in_Ord
   151              intro: cons_eqpoll_succ Ord_in_Ord
   160              dest!: InfCard_is_Card [THEN Card_is_Ord])
   152              dest!: InfCard_is_Card [THEN Card_is_Ord])
   161 apply (simp only: Union_cons_eq_succ_Union); 
   153 apply (simp only: Union_cons_eq_succ_Union) 
   162 apply (rule cons_Diff_eq);
   154 apply (rule cons_Diff_eq)
   163 apply (fast dest!: InfCard_is_Card [THEN Card_is_Ord]
   155 apply (fast dest!: InfCard_is_Card [THEN Card_is_Ord]
   164             elim: Ord_in_Ord 
   156             elim: Ord_in_Ord 
   165             intro!: succ_Union_not_mem);
   157             intro!: succ_Union_not_mem)
   166 done
   158 done
   167 
   159 
   168 lemma subsets_eqpoll_X:
   160 lemma subsets_eqpoll_X:
   169      "[| InfCard(X); n \<in> nat |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)} \<approx> X"
   161      "[| InfCard(X); n \<in> nat |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)} \<approx> X"
   170 apply (induct_tac "n")
   162 apply (induct_tac "n")
   171 apply (rule subsets_eqpoll_1_eqpoll)
   163 apply (rule subsets_eqpoll_1_eqpoll)
   172 apply (rule eqpollI)
   164 apply (rule eqpollI)
   173 apply (rule subsets_lepoll_lemma1 [THEN lepoll_trans], assumption+);
   165 apply (rule subsets_lepoll_lemma1 [THEN lepoll_trans], assumption+)
   174 apply (rule eqpoll_trans [THEN eqpoll_imp_lepoll]); 
   166 apply (rule eqpoll_trans [THEN eqpoll_imp_lepoll]) 
   175  apply (erule eqpoll_refl [THEN prod_eqpoll_cong]);
   167  apply (erule eqpoll_refl [THEN prod_eqpoll_cong])
   176 apply (erule InfCard_square_eqpoll)
   168 apply (erule InfCard_square_eqpoll)
   177 apply (fast elim: eqpoll_sym [THEN eqpoll_imp_lepoll, THEN lepoll_trans] 
   169 apply (fast elim: eqpoll_sym [THEN eqpoll_imp_lepoll, THEN lepoll_trans] 
   178             intro!: succ_lepoll_succ_succ)
   170             intro!: succ_lepoll_succ_succ)
   179 done
   171 done
   180 
   172 
   183 apply (unfold surj_def)
   175 apply (unfold surj_def)
   184 apply (fast dest: apply_equality2 elim: apply_iff [THEN iffD2])
   176 apply (fast dest: apply_equality2 elim: apply_iff [THEN iffD2])
   185 done
   177 done
   186 
   178 
   187 lemma vimage_image_eq: "[| f \<in> inj(A,B); y \<subseteq> A |] ==> converse(f)``(f``y) = y"
   179 lemma vimage_image_eq: "[| f \<in> inj(A,B); y \<subseteq> A |] ==> converse(f)``(f``y) = y"
   188 apply (fast elim!: inj_is_fun [THEN apply_Pair] dest: inj_equality)
   180 by (fast elim!: inj_is_fun [THEN apply_Pair] dest: inj_equality)
   189 done
       
   190 
   181 
   191 lemma subsets_eqpoll:
   182 lemma subsets_eqpoll:
   192      "A\<approx>B ==> {Y \<in> Pow(A). Y\<approx>n}\<approx>{Y \<in> Pow(B). Y\<approx>n}"
   183      "A\<approx>B ==> {Y \<in> Pow(A). Y\<approx>n}\<approx>{Y \<in> Pow(B). Y\<approx>n}"
   193 apply (unfold eqpoll_def)
   184 apply (unfold eqpoll_def)
   194 apply (erule exE)
   185 apply (erule exE)
   220 done
   211 done
   221 
   212 
   222 lemma WO2_infinite_subsets_eqpoll_X: "[| WO2; n \<in> nat; ~Finite(X) |]   
   213 lemma WO2_infinite_subsets_eqpoll_X: "[| WO2; n \<in> nat; ~Finite(X) |]   
   223         ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
   214         ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
   224 apply (drule WO2_imp_ex_Card)
   215 apply (drule WO2_imp_ex_Card)
   225 apply (elim allE exE conjE);
   216 apply (elim allE exE conjE)
   226 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption)
   217 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption)
   227 apply (drule infinite_Card_is_InfCard, assumption)
   218 apply (drule infinite_Card_is_InfCard, assumption)
   228 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans); 
   219 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans) 
   229 done
   220 done
   230 
   221 
   231 lemma well_ord_imp_ex_Card: "well_ord(X,R) ==> \<exists>a. Card(a) & X\<approx>a"
   222 lemma well_ord_imp_ex_Card: "well_ord(X,R) ==> \<exists>a. Card(a) & X\<approx>a"
   232 by (fast elim!: well_ord_cardinal_eqpoll [THEN eqpoll_sym] 
   223 by (fast elim!: well_ord_cardinal_eqpoll [THEN eqpoll_sym] 
   233          intro!: Card_cardinal)
   224          intro!: Card_cardinal)
   236      "[| well_ord(X,R); n \<in> nat; ~Finite(X) |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
   227      "[| well_ord(X,R); n \<in> nat; ~Finite(X) |] ==> {Y \<in> Pow(X). Y\<approx>succ(n)}\<approx>X"
   237 apply (drule well_ord_imp_ex_Card)
   228 apply (drule well_ord_imp_ex_Card)
   238 apply (elim allE exE conjE)
   229 apply (elim allE exE conjE)
   239 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption)
   230 apply (frule eqpoll_imp_lepoll [THEN lepoll_infinite], assumption)
   240 apply (drule infinite_Card_is_InfCard, assumption)
   231 apply (drule infinite_Card_is_InfCard, assumption)
   241 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans); 
   232 apply (blast intro: subsets_eqpoll subsets_eqpoll_X eqpoll_sym eqpoll_trans) 
   242 done
   233 done
   243 
   234 
   244 end
   235 end