src/ZF/Cardinal.ML
changeset 1055 67f5344605b7
parent 1031 a53cbb4b06c5
child 1461 6bcb44e4d6e5
equal deleted inserted replaced
1054:f3fabffd927a 1055:67f5344605b7
   565 
   565 
   566 
   566 
   567 (*** Lemmas by Krzysztof Grabczewski.  New proofs using cons_lepoll_cons.
   567 (*** Lemmas by Krzysztof Grabczewski.  New proofs using cons_lepoll_cons.
   568      Could easily generalise from succ to cons. ***)
   568      Could easily generalise from succ to cons. ***)
   569 
   569 
       
   570 (*If A has at most n+1 elements and a:A then A-{a} has at most n.*)
   570 goalw Cardinal.thy [succ_def]
   571 goalw Cardinal.thy [succ_def]
   571       "!!A a n. [| a:A;  A lepoll succ(n) |] ==> A - {a} lepoll n";
   572       "!!A a n. [| a:A;  A lepoll succ(n) |] ==> A - {a} lepoll n";
   572 by (rtac cons_lepoll_consD 1);
   573 by (rtac cons_lepoll_consD 1);
   573 by (rtac mem_not_refl 3);
   574 by (rtac mem_not_refl 3);
   574 by (eresolve_tac [cons_Diff RS ssubst] 1);
   575 by (eresolve_tac [cons_Diff RS ssubst] 1);
   575 by (safe_tac ZF_cs);
   576 by (safe_tac ZF_cs);
   576 qed "diff_sing_lepoll";
   577 qed "Diff_sing_lepoll";
   577 
   578 
       
   579 (*If A has at least n+1 elements then A-{a} has at least n.*)
   578 goalw Cardinal.thy [succ_def]
   580 goalw Cardinal.thy [succ_def]
   579       "!!A a n. [| a:A; succ(n) lepoll A |] ==> n lepoll A - {a}";
   581       "!!A a n. [| succ(n) lepoll A |] ==> n lepoll A - {a}";
   580 by (rtac cons_lepoll_consD 1);
   582 by (rtac cons_lepoll_consD 1);
   581 by (rtac mem_not_refl 2);
   583 by (rtac mem_not_refl 2);
   582 by (eresolve_tac [cons_Diff RS ssubst] 1);
   584 by (fast_tac ZF_cs 2);
   583 by (safe_tac ZF_cs);
   585 by (fast_tac (ZF_cs addSEs [subset_imp_lepoll RSN (2, lepoll_trans)]) 1);
   584 qed "lepoll_diff_sing";
   586 qed "lepoll_Diff_sing";
   585 
   587 
   586 goal Cardinal.thy "!!A a n. [| a:A; A eqpoll succ(n) |] ==> A - {a} eqpoll n";
   588 goal Cardinal.thy "!!A a n. [| a:A; A eqpoll succ(n) |] ==> A - {a} eqpoll n";
   587 by (fast_tac (ZF_cs addSIs [eqpollI] addSEs [eqpollE] 
   589 by (fast_tac (ZF_cs addSIs [eqpollI] addSEs [eqpollE] 
   588                     addIs [diff_sing_lepoll,lepoll_diff_sing]) 1);
   590                     addIs [Diff_sing_lepoll,lepoll_Diff_sing]) 1);
   589 qed "diff_sing_eqpoll";
   591 qed "Diff_sing_eqpoll";
   590 
   592 
   591 goal Cardinal.thy "!!A. [| A lepoll 1; a:A |] ==> A = {a}";
   593 goal Cardinal.thy "!!A. [| A lepoll 1; a:A |] ==> A = {a}";
   592 by (forward_tac [diff_sing_lepoll] 1);
   594 by (forward_tac [Diff_sing_lepoll] 1);
   593 by (assume_tac 1);
   595 by (assume_tac 1);
   594 by (dtac lepoll_0_is_0 1);
   596 by (dtac lepoll_0_is_0 1);
   595 by (fast_tac (eq_cs addEs [equalityE]) 1);
   597 by (fast_tac (eq_cs addEs [equalityE]) 1);
   596 qed "lepoll_1_is_sing";
   598 qed "lepoll_1_is_sing";
   597 
   599