src/ZF/Cardinal.ML
changeset 8127 68c6159440f1
parent 7499 23e090051cb8
child 8183 344888de76c4
equal deleted inserted replaced
8126:6244be18fa55 8127:68c6159440f1
   140 
   140 
   141 Goalw [lesspoll_def] "A lesspoll B ==> A lepoll B";
   141 Goalw [lesspoll_def] "A lesspoll B ==> A lepoll B";
   142 by (Blast_tac 1);
   142 by (Blast_tac 1);
   143 qed "lesspoll_imp_lepoll";
   143 qed "lesspoll_imp_lepoll";
   144 
   144 
   145 Goalw [lepoll_def]
   145 Goalw [lepoll_def] "[| A lepoll B; well_ord(B,r) |] ==> EX s. well_ord(A,s)";
   146         "[| A lepoll B; well_ord(B,r) |] ==> EX s. well_ord(A,s)";
       
   147 by (blast_tac (claset() addIs [well_ord_rvimage]) 1);
   146 by (blast_tac (claset() addIs [well_ord_rvimage]) 1);
   148 qed "lepoll_well_ord";
   147 qed "lepoll_well_ord";
   149 
   148 
   150 Goalw [lesspoll_def] "A lepoll B <-> A lesspoll B | A eqpoll B";
   149 Goalw [lesspoll_def] "A lepoll B <-> A lesspoll B | A eqpoll B";
   151 by (blast_tac (claset() addSIs [eqpollI] addSEs [eqpollE]) 1);
   150 by (blast_tac (claset() addSIs [eqpollI] addSEs [eqpollE]) 1);
   301 by (etac ssubst 1);
   300 by (etac ssubst 1);
   302 by (rtac Ord_Least 1);
   301 by (rtac Ord_Least 1);
   303 qed "Card_is_Ord";
   302 qed "Card_is_Ord";
   304 
   303 
   305 Goal "Card(K) ==> K le |K|";
   304 Goal "Card(K) ==> K le |K|";
   306 by (asm_simp_tac (simpset() addsimps [le_refl, Card_is_Ord, Card_cardinal_eq]) 1);
   305 by (asm_simp_tac (simpset() addsimps [Card_is_Ord, Card_cardinal_eq]) 1);
   307 qed "Card_cardinal_le";
   306 qed "Card_cardinal_le";
   308 
   307 
   309 Goalw [cardinal_def] "Ord(|A|)";
   308 Goalw [cardinal_def] "Ord(|A|)";
   310 by (rtac Ord_Least 1);
   309 by (rtac Ord_Least 1);
   311 qed "Ord_cardinal";
   310 qed "Ord_cardinal";
       
   311 
       
   312 Addsimps [Ord_cardinal];
       
   313 AddSIs [Ord_cardinal];
   312 
   314 
   313 (*The cardinals are the initial ordinals*)
   315 (*The cardinals are the initial ordinals*)
   314 Goal "Card(K) <-> Ord(K) & (ALL j. j<K --> ~ j eqpoll K)";
   316 Goal "Card(K) <-> Ord(K) & (ALL j. j<K --> ~ j eqpoll K)";
   315 by (safe_tac (claset() addSIs [CardI, Card_is_Ord]));
   317 by (safe_tac (claset() addSIs [CardI, Card_is_Ord]));
   316 by (Blast_tac 2);
   318 by (Blast_tac 2);
   511 by (rtac lesspoll_succ_imp_lepoll 1);
   513 by (rtac lesspoll_succ_imp_lepoll 1);
   512 by (assume_tac 2);
   514 by (assume_tac 2);
   513 by (asm_simp_tac (simpset() addsimps [lesspoll_def]) 1);
   515 by (asm_simp_tac (simpset() addsimps [lesspoll_def]) 1);
   514 qed "lepoll_succ_disj";
   516 qed "lepoll_succ_disj";
   515 
   517 
       
   518 Goalw [lesspoll_def] "[| A lesspoll i; Ord(i) |] ==> |A| < i";
       
   519 by (Clarify_tac 1);
       
   520 by (forward_tac [lepoll_cardinal_le] 1);
       
   521 by (assume_tac 1);
       
   522 by (blast_tac (claset() addIs [well_ord_Memrel,
       
   523 			       well_ord_cardinal_eqpoll RS eqpoll_sym]
       
   524                         addDs [lepoll_well_ord] 
       
   525                         addSEs [leE]) 1);
       
   526 qed "lesspoll_cardinal_lt";
       
   527 
   516 
   528 
   517 (*** The first infinite cardinal: Omega, or nat ***)
   529 (*** The first infinite cardinal: Omega, or nat ***)
   518 
   530 
   519 (*This implies Kunen's Lemma 10.6*)
   531 (*This implies Kunen's Lemma 10.6*)
   520 Goal "[| n<i;  n:nat |] ==> ~ i lepoll n";
   532 Goal "[| n<i;  n:nat |] ==> ~ i lepoll n";
   776     "[| Finite(A);  well_ord(A,r) |] ==> well_ord(A,converse(r))";
   788     "[| Finite(A);  well_ord(A,r) |] ==> well_ord(A,converse(r))";
   777 by (rtac well_ord_converse 1 THEN assume_tac 1);
   789 by (rtac well_ord_converse 1 THEN assume_tac 1);
   778 by (blast_tac (claset() addDs [ordertype_eq_n] 
   790 by (blast_tac (claset() addDs [ordertype_eq_n] 
   779                        addSIs [nat_well_ord_converse_Memrel]) 1);
   791                        addSIs [nat_well_ord_converse_Memrel]) 1);
   780 qed "Finite_well_ord_converse";
   792 qed "Finite_well_ord_converse";
       
   793 
       
   794 Goalw [Finite_def] "n:nat ==> Finite(n)";
       
   795 by (fast_tac (claset() addSIs [eqpoll_refl]) 1);
       
   796 qed "nat_into_Finite";