src/ZF/AC/WO1_AC.thy
changeset 76213 e44d86131648
parent 46822 95f1e700b712
child 76214 0c18df79b1c8
equal deleted inserted replaced
76212:f2094906e491 76213:e44d86131648
     1 (*  Title:      ZF/AC/WO1_AC.thy
     1 (*  Title:      ZF/AC/WO1_AC.thy
     2     Author:     Krzysztof Grabczewski
     2     Author:     Krzysztof Grabczewski
     3 
     3 
     4 The proofs of WO1 ==> AC1 and WO1 ==> AC10(n) for n >= 1
     4 The proofs of WO1 \<Longrightarrow> AC1 and WO1 \<Longrightarrow> AC10(n) for n >= 1
     5 
     5 
     6 The latter proof is referred to as clear by the Rubins.
     6 The latter proof is referred to as clear by the Rubins.
     7 However it seems to be quite complicated.
     7 However it seems to be quite complicated.
     8 The formal proof presented below is a mechanisation of the proof 
     8 The formal proof presented below is a mechanisation of the proof 
     9 by Lawrence C. Paulson which is the following:
     9 by Lawrence C. Paulson which is the following:
    27 theory WO1_AC
    27 theory WO1_AC
    28 imports AC_Equiv
    28 imports AC_Equiv
    29 begin
    29 begin
    30 
    30 
    31 (* ********************************************************************** *)
    31 (* ********************************************************************** *)
    32 (* WO1 ==> AC1                                                            *)
    32 (* WO1 \<Longrightarrow> AC1                                                            *)
    33 (* ********************************************************************** *)
    33 (* ********************************************************************** *)
    34 
    34 
    35 theorem WO1_AC1: "WO1 ==> AC1"
    35 theorem WO1_AC1: "WO1 \<Longrightarrow> AC1"
    36 by (unfold AC1_def WO1_def, fast elim!: ex_choice_fun)
    36 by (unfold AC1_def WO1_def, fast elim!: ex_choice_fun)
    37 
    37 
    38 (* ********************************************************************** *)
    38 (* ********************************************************************** *)
    39 (* WO1 ==> AC10(n) (n >= 1)                                               *)
    39 (* WO1 \<Longrightarrow> AC10(n) (n >= 1)                                               *)
    40 (* ********************************************************************** *)
    40 (* ********************************************************************** *)
    41 
    41 
    42 lemma lemma1: "[| WO1; \<forall>B \<in> A. \<exists>C \<in> D(B). P(C,B) |] ==> \<exists>f. \<forall>B \<in> A. P(f`B,B)"
    42 lemma lemma1: "\<lbrakk>WO1; \<forall>B \<in> A. \<exists>C \<in> D(B). P(C,B)\<rbrakk> \<Longrightarrow> \<exists>f. \<forall>B \<in> A. P(f`B,B)"
    43 apply (unfold WO1_def)
    43 apply (unfold WO1_def)
    44 apply (erule_tac x = "\<Union>({{C \<in> D (B) . P (C,B) }. B \<in> A}) " in allE)
    44 apply (erule_tac x = "\<Union>({{C \<in> D (B) . P (C,B) }. B \<in> A}) " in allE)
    45 apply (erule exE, drule ex_choice_fun, fast)
    45 apply (erule exE, drule ex_choice_fun, fast)
    46 apply (erule exE)
    46 apply (erule exE)
    47 apply (rule_tac x = "\<lambda>x \<in> A. f`{C \<in> D (x) . P (C,x) }" in exI)
    47 apply (rule_tac x = "\<lambda>x \<in> A. f`{C \<in> D (x) . P (C,x) }" in exI)
    48 apply (simp, blast dest!: apply_type [OF _ RepFunI])
    48 apply (simp, blast dest!: apply_type [OF _ RepFunI])
    49 done
    49 done
    50 
    50 
    51 lemma lemma2_1: "[| ~Finite(B); WO1 |] ==> |B| + |B| \<approx>  B"
    51 lemma lemma2_1: "\<lbrakk>\<not>Finite(B); WO1\<rbrakk> \<Longrightarrow> |B| + |B| \<approx>  B"
    52 apply (unfold WO1_def)
    52 apply (unfold WO1_def)
    53 apply (rule eqpoll_trans)
    53 apply (rule eqpoll_trans)
    54 prefer 2 apply (fast elim!: well_ord_cardinal_eqpoll)
    54 prefer 2 apply (fast elim!: well_ord_cardinal_eqpoll)
    55 apply (rule eqpoll_sym [THEN eqpoll_trans])
    55 apply (rule eqpoll_sym [THEN eqpoll_trans])
    56 apply (fast elim!: well_ord_cardinal_eqpoll)
    56 apply (fast elim!: well_ord_cardinal_eqpoll)
    59 apply (simp add: cadd_def [symmetric] 
    59 apply (simp add: cadd_def [symmetric] 
    60             eqpoll_refl InfCard_cdouble_eq Card_cardinal Inf_Card_is_InfCard) 
    60             eqpoll_refl InfCard_cdouble_eq Card_cardinal Inf_Card_is_InfCard) 
    61 done
    61 done
    62 
    62 
    63 lemma lemma2_2:
    63 lemma lemma2_2:
    64      "f \<in> bij(D+D, B) ==> {{f`Inl(i), f`Inr(i)}. i \<in> D} \<in> Pow(Pow(B))"
    64      "f \<in> bij(D+D, B) \<Longrightarrow> {{f`Inl(i), f`Inr(i)}. i \<in> D} \<in> Pow(Pow(B))"
    65 by (fast elim!: bij_is_fun [THEN apply_type])
    65 by (fast elim!: bij_is_fun [THEN apply_type])
    66 
    66 
    67 
    67 
    68 lemma lemma2_3: 
    68 lemma lemma2_3: 
    69         "f \<in> bij(D+D, B) ==> pairwise_disjoint({{f`Inl(i), f`Inr(i)}. i \<in> D})"
    69         "f \<in> bij(D+D, B) \<Longrightarrow> pairwise_disjoint({{f`Inl(i), f`Inr(i)}. i \<in> D})"
    70 apply (unfold pairwise_disjoint_def)
    70 apply (unfold pairwise_disjoint_def)
    71 apply (blast dest: bij_is_inj [THEN inj_apply_equality])
    71 apply (blast dest: bij_is_inj [THEN inj_apply_equality])
    72 done
    72 done
    73 
    73 
    74 lemma lemma2_4:
    74 lemma lemma2_4:
    75      "[| f \<in> bij(D+D, B); 1\<le>n |] 
    75      "\<lbrakk>f \<in> bij(D+D, B); 1\<le>n\<rbrakk> 
    76       ==> sets_of_size_between({{f`Inl(i), f`Inr(i)}. i \<in> D}, 2, succ(n))"
    76       \<Longrightarrow> sets_of_size_between({{f`Inl(i), f`Inr(i)}. i \<in> D}, 2, succ(n))"
    77 apply (simp (no_asm_simp) add: sets_of_size_between_def succ_def)
    77 apply (simp (no_asm_simp) add: sets_of_size_between_def succ_def)
    78 apply (blast intro!: cons_lepoll_cong 
    78 apply (blast intro!: cons_lepoll_cong 
    79             intro: singleton_eqpoll_1 [THEN eqpoll_imp_lepoll]  
    79             intro: singleton_eqpoll_1 [THEN eqpoll_imp_lepoll]  
    80                    le_imp_subset [THEN subset_imp_lepoll]  lepoll_trans 
    80                    le_imp_subset [THEN subset_imp_lepoll]  lepoll_trans 
    81             dest: bij_is_inj [THEN inj_apply_equality] elim!: mem_irrefl)
    81             dest: bij_is_inj [THEN inj_apply_equality] elim!: mem_irrefl)
    82 done
    82 done
    83 
    83 
    84 lemma lemma2_5: 
    84 lemma lemma2_5: 
    85      "f \<in> bij(D+D, B) ==> \<Union>({{f`Inl(i), f`Inr(i)}. i \<in> D})=B"
    85      "f \<in> bij(D+D, B) \<Longrightarrow> \<Union>({{f`Inl(i), f`Inr(i)}. i \<in> D})=B"
    86 apply (unfold bij_def surj_def)
    86 apply (unfold bij_def surj_def)
    87 apply (fast elim!: inj_is_fun [THEN apply_type])
    87 apply (fast elim!: inj_is_fun [THEN apply_type])
    88 done
    88 done
    89 
    89 
    90 lemma lemma2:
    90 lemma lemma2:
    91      "[| WO1; ~Finite(B); 1\<le>n  |]   
    91      "\<lbrakk>WO1; \<not>Finite(B); 1\<le>n\<rbrakk>   
    92       ==> \<exists>C \<in> Pow(Pow(B)). pairwise_disjoint(C) &   
    92       \<Longrightarrow> \<exists>C \<in> Pow(Pow(B)). pairwise_disjoint(C) &   
    93                 sets_of_size_between(C, 2, succ(n)) &   
    93                 sets_of_size_between(C, 2, succ(n)) &   
    94                 \<Union>(C)=B"
    94                 \<Union>(C)=B"
    95 apply (drule lemma2_1 [THEN eqpoll_def [THEN def_imp_iff, THEN iffD1]], 
    95 apply (drule lemma2_1 [THEN eqpoll_def [THEN def_imp_iff, THEN iffD1]], 
    96        assumption)
    96        assumption)
    97 apply (blast intro!: lemma2_2 lemma2_3 lemma2_4 lemma2_5)
    97 apply (blast intro!: lemma2_2 lemma2_3 lemma2_4 lemma2_5)
    98 done
    98 done
    99 
    99 
   100 theorem WO1_AC10: "[| WO1; 1\<le>n |] ==> AC10(n)"
   100 theorem WO1_AC10: "\<lbrakk>WO1; 1\<le>n\<rbrakk> \<Longrightarrow> AC10(n)"
   101 apply (unfold AC10_def)
   101 apply (unfold AC10_def)
   102 apply (fast intro!: lemma1 elim!: lemma2)
   102 apply (fast intro!: lemma1 elim!: lemma2)
   103 done
   103 done
   104 
   104 
   105 end
   105 end