src/ZF/Cardinal_AC.ML
changeset 5147 825877190618
parent 5137 60205b0de9b9
child 6068 2d8f3e1f1151
equal deleted inserted replaced
5146:1ea751ae62b2 5147:825877190618
    28 
    28 
    29 Goal "|X| = |Y| <-> X eqpoll Y";
    29 Goal "|X| = |Y| <-> X eqpoll Y";
    30 by (blast_tac (claset() addIs [cardinal_cong, cardinal_eqE]) 1);
    30 by (blast_tac (claset() addIs [cardinal_cong, cardinal_eqE]) 1);
    31 qed "cardinal_eqpoll_iff";
    31 qed "cardinal_eqpoll_iff";
    32 
    32 
    33 Goal
    33 Goal "[| |A|=|B|;  |C|=|D|;  A Int C = 0;  B Int D = 0 |] ==> \
    34     "!!A. [| |A|=|B|;  |C|=|D|;  A Int C = 0;  B Int D = 0 |] ==> \
       
    35 \         |A Un C| = |B Un D|";
    34 \         |A Un C| = |B Un D|";
    36 by (asm_full_simp_tac (simpset() addsimps [cardinal_eqpoll_iff, 
    35 by (asm_full_simp_tac (simpset() addsimps [cardinal_eqpoll_iff, 
    37                                        eqpoll_disjoint_Un]) 1);
    36                                        eqpoll_disjoint_Un]) 1);
    38 qed "cardinal_disjoint_Un";
    37 qed "cardinal_disjoint_Un";
    39 
    38 
   104 by (rewtac lepoll_def);
   103 by (rewtac lepoll_def);
   105 by (etac exI 1);
   104 by (etac exI 1);
   106 qed "surj_implies_cardinal_le";
   105 qed "surj_implies_cardinal_le";
   107 
   106 
   108 (*Kunen's Lemma 10.21*)
   107 (*Kunen's Lemma 10.21*)
   109 Goal
   108 Goal "[| InfCard(K);  ALL i:K. |X(i)| le K |] ==> |UN i:K. X(i)| le K";
   110     "!!K. [| InfCard(K);  ALL i:K. |X(i)| le K |] ==> |UN i:K. X(i)| le K";
       
   111 by (asm_full_simp_tac (simpset() addsimps [InfCard_is_Card, le_Card_iff]) 1);
   109 by (asm_full_simp_tac (simpset() addsimps [InfCard_is_Card, le_Card_iff]) 1);
   112 by (rtac lepoll_trans 1);
   110 by (rtac lepoll_trans 1);
   113 by (resolve_tac [InfCard_square_eq RS eqpoll_imp_lepoll] 2);
   111 by (resolve_tac [InfCard_square_eq RS eqpoll_imp_lepoll] 2);
   114 by (asm_simp_tac (simpset() addsimps [InfCard_is_Card, Card_cardinal_eq]) 2);
   112 by (asm_simp_tac (simpset() addsimps [InfCard_is_Card, Card_cardinal_eq]) 2);
   115 by (rewtac lepoll_def);
   113 by (rewtac lepoll_def);
   132 by (etac conjunct2 1);
   130 by (etac conjunct2 1);
   133 by (asm_simp_tac (simpset() addsimps [left_inverse]) 1);
   131 by (asm_simp_tac (simpset() addsimps [left_inverse]) 1);
   134 qed "cardinal_UN_le";
   132 qed "cardinal_UN_le";
   135 
   133 
   136 (*The same again, using csucc*)
   134 (*The same again, using csucc*)
   137 Goal
   135 Goal "[| InfCard(K);  ALL i:K. |X(i)| < csucc(K) |] ==> \
   138     "!!K. [| InfCard(K);  ALL i:K. |X(i)| < csucc(K) |] ==> \
       
   139 \         |UN i:K. X(i)| < csucc(K)";
   136 \         |UN i:K. X(i)| < csucc(K)";
   140 by (asm_full_simp_tac 
   137 by (asm_full_simp_tac 
   141     (simpset() addsimps [Card_lt_csucc_iff, cardinal_UN_le, 
   138     (simpset() addsimps [Card_lt_csucc_iff, cardinal_UN_le, 
   142                      InfCard_is_Card, Card_cardinal]) 1);
   139                      InfCard_is_Card, Card_cardinal]) 1);
   143 qed "cardinal_UN_lt_csucc";
   140 qed "cardinal_UN_lt_csucc";
   144 
   141 
   145 (*The same again, for a union of ordinals.  In use, j(i) is a bit like rank(i),
   142 (*The same again, for a union of ordinals.  In use, j(i) is a bit like rank(i),
   146   the least ordinal j such that i:Vfrom(A,j). *)
   143   the least ordinal j such that i:Vfrom(A,j). *)
   147 Goal
   144 Goal "[| InfCard(K);  ALL i:K. j(i) < csucc(K) |] ==> \
   148     "!!K. [| InfCard(K);  ALL i:K. j(i) < csucc(K) |] ==> \
       
   149 \         (UN i:K. j(i)) < csucc(K)";
   145 \         (UN i:K. j(i)) < csucc(K)";
   150 by (resolve_tac [cardinal_UN_lt_csucc RS Card_lt_imp_lt] 1);
   146 by (resolve_tac [cardinal_UN_lt_csucc RS Card_lt_imp_lt] 1);
   151 by (assume_tac 1);
   147 by (assume_tac 1);
   152 by (blast_tac (claset() addIs [Ord_cardinal_le RS lt_trans1] addEs [ltE]) 1);
   148 by (blast_tac (claset() addIs [Ord_cardinal_le RS lt_trans1] addEs [ltE]) 1);
   153 by (blast_tac (claset() addSIs [Ord_UN] addEs [ltE]) 1);
   149 by (blast_tac (claset() addSIs [Ord_UN] addEs [ltE]) 1);
   176     (simpset() addsimps [inj_is_fun RS apply_rangeI, left_inverse]) 1);
   172     (simpset() addsimps [inj_is_fun RS apply_rangeI, left_inverse]) 1);
   177 val inj_UN_subset = result();
   173 val inj_UN_subset = result();
   178 
   174 
   179 (*Simpler to require |W|=K; we'd have a bijection; but the theorem would
   175 (*Simpler to require |W|=K; we'd have a bijection; but the theorem would
   180   be weaker.*)
   176   be weaker.*)
   181 Goal
   177 Goal "[| InfCard(K);  |W| le K;  ALL w:W. j(w) < csucc(K) |] ==> \
   182     "!!K. [| InfCard(K);  |W| le K;  ALL w:W. j(w) < csucc(K) |] ==> \
       
   183 \         (UN w:W. j(w)) < csucc(K)";
   178 \         (UN w:W. j(w)) < csucc(K)";
   184 by (excluded_middle_tac "W=0" 1);
   179 by (excluded_middle_tac "W=0" 1);
   185 by (asm_simp_tac        (*solve the easy 0 case*)
   180 by (asm_simp_tac        (*solve the easy 0 case*)
   186     (simpset() addsimps [UN_0, InfCard_is_Card, Card_is_Ord RS Card_csucc, 
   181     (simpset() addsimps [UN_0, InfCard_is_Card, Card_is_Ord RS Card_csucc, 
   187                      Card_is_Ord, Ord_0_lt_csucc]) 2);
   182                      Card_is_Ord, Ord_0_lt_csucc]) 2);