src/ZF/AC/WO1_AC.thy
author haftmann
Fri, 17 Jun 2005 16:12:49 +0200
changeset 16417 9bc16273c2d4
parent 12776 249600a63ba9
child 27678 85ea2be46c71
permissions -rw-r--r--
migrated theory headers to new format
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12776
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     1
(*  Title:      ZF/AC/WO1_AC.thy
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     2
    ID:         $Id$
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     3
    Author:     Krzysztof Grabczewski
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     4
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     5
The proofs of WO1 ==> AC1 and WO1 ==> AC10(n) for n >= 1
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     6
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     7
The latter proof is referred to as clear by the Rubins.
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     8
However it seems to be quite complicated.
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
     9
The formal proof presented below is a mechanisation of the proof 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    10
by Lawrence C. Paulson which is the following:
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    11
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    12
Assume WO1.  Let s be a set of infinite sets.
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    13
 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    14
Suppose x \<in> s.  Then x is equipollent to |x| (by WO1), an infinite cardinal
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    15
call it K.  Since K = K |+| K = |K+K| (by InfCard_cdouble_eq) there is an 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    16
isomorphism h \<in> bij(K+K, x).  (Here + means disjoint sum.)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    17
 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    18
So there is a partition of x into 2-element sets, namely
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    19
 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    20
        {{h(Inl(i)), h(Inr(i))} . i \<in> K}
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    21
 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    22
So for all x \<in> s the desired partition exists.  By AC1 (which follows from WO1) 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    23
there exists a function f that chooses a partition for each x \<in> s.  Therefore we 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    24
have AC10(2).
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    25
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    26
*)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    27
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 12776
diff changeset
    28
theory WO1_AC imports AC_Equiv begin
12776
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    29
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    30
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    31
(* WO1 ==> AC1                                                            *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    32
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    33
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    34
theorem WO1_AC1: "WO1 ==> AC1"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    35
by (unfold AC1_def WO1_def, fast elim!: ex_choice_fun)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    36
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    37
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    38
(* WO1 ==> AC10(n) (n >= 1)                                               *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    39
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    40
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    41
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)"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    42
apply (unfold WO1_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    43
apply (erule_tac x = "Union ({{C \<in> D (B) . P (C,B) }. B \<in> A}) " in allE)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    44
apply (erule exE, drule ex_choice_fun, fast)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    45
apply (erule exE)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    46
apply (rule_tac x = "\<lambda>x \<in> A. f`{C \<in> D (x) . P (C,x) }" in exI)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    47
apply (simp, blast dest!: apply_type [OF _ RepFunI])
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    48
done
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    49
12776
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    50
lemma lemma2_1: "[| ~Finite(B); WO1 |] ==> |B| + |B| \<approx>  B"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    51
apply (unfold WO1_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    52
apply (rule eqpoll_trans)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    53
prefer 2 apply (fast elim!: well_ord_cardinal_eqpoll)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    54
apply (rule eqpoll_sym [THEN eqpoll_trans])
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    55
apply (fast elim!: well_ord_cardinal_eqpoll)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    56
apply (drule spec [of _ B]) 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    57
apply (clarify dest!: eqpoll_imp_Finite_iff [OF well_ord_cardinal_eqpoll]) 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    58
apply (simp add: cadd_def [symmetric] 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    59
            eqpoll_refl InfCard_cdouble_eq Card_cardinal Inf_Card_is_InfCard) 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    60
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    61
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    62
lemma lemma2_2:
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    63
     "f \<in> bij(D+D, B) ==> {{f`Inl(i), f`Inr(i)}. i \<in> D} \<in> Pow(Pow(B))"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    64
by (fast elim!: bij_is_fun [THEN apply_type])
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    65
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    66
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    67
lemma lemma2_3: 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    68
        "f \<in> bij(D+D, B) ==> pairwise_disjoint({{f`Inl(i), f`Inr(i)}. i \<in> D})"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    69
apply (unfold pairwise_disjoint_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    70
apply (blast dest: bij_is_inj [THEN inj_apply_equality])
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    71
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    72
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    73
lemma lemma2_4:
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    74
     "[| f \<in> bij(D+D, B); 1\<le>n |] 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    75
      ==> sets_of_size_between({{f`Inl(i), f`Inr(i)}. i \<in> D}, 2, succ(n))"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    76
apply (simp (no_asm_simp) add: sets_of_size_between_def succ_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    77
apply (blast intro!: cons_lepoll_cong 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    78
            intro: singleton_eqpoll_1 [THEN eqpoll_imp_lepoll]  
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    79
                   le_imp_subset [THEN subset_imp_lepoll]  lepoll_trans 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    80
            dest: bij_is_inj [THEN inj_apply_equality] elim!: mem_irrefl)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    81
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    82
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    83
lemma lemma2_5: 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    84
     "f \<in> bij(D+D, B) ==> Union({{f`Inl(i), f`Inr(i)}. i \<in> D})=B"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    85
apply (unfold bij_def surj_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    86
apply (fast elim!: inj_is_fun [THEN apply_type])
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    87
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    88
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    89
lemma lemma2:
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    90
     "[| WO1; ~Finite(B); 1\<le>n  |]   
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    91
      ==> \<exists>C \<in> Pow(Pow(B)). pairwise_disjoint(C) &   
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    92
                sets_of_size_between(C, 2, succ(n)) &   
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    93
                Union(C)=B"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    94
apply (drule lemma2_1 [THEN eqpoll_def [THEN def_imp_iff, THEN iffD1]], 
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    95
       assumption)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    96
apply (blast intro!: lemma2_2 lemma2_3 lemma2_4 lemma2_5)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    97
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    98
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
    99
theorem WO1_AC10: "[| WO1; 1\<le>n |] ==> AC10(n)"
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   100
apply (unfold AC10_def)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   101
apply (fast intro!: lemma1 elim!: lemma2)
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   102
done
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   103
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   104
end
249600a63ba9 Isar version of AC
paulson
parents: 1196
diff changeset
   105