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 |