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 |