diff -r f2094906e491 -r e44d86131648 src/ZF/Cardinal.thy --- a/src/ZF/Cardinal.thy Tue Sep 27 13:34:54 2022 +0200 +++ b/src/ZF/Cardinal.thy Tue Sep 27 16:51:35 2022 +0100 @@ -10,31 +10,31 @@ definition (*least ordinal operator*) Least :: "(i=>o) => i" (binder \\ \ 10) where - "Least(P) == THE i. Ord(i) & P(i) & (\j. j ~P(j))" + "Least(P) \ THE i. Ord(i) & P(i) & (\j. j \P(j))" definition eqpoll :: "[i,i] => o" (infixl \\\ 50) where - "A \ B == \f. f \ bij(A,B)" + "A \ B \ \f. f \ bij(A,B)" definition lepoll :: "[i,i] => o" (infixl \\\ 50) where - "A \ B == \f. f \ inj(A,B)" + "A \ B \ \f. f \ inj(A,B)" definition lesspoll :: "[i,i] => o" (infixl \\\ 50) where - "A \ B == A \ B & ~(A \ B)" + "A \ B \ A \ B & \(A \ B)" definition cardinal :: "i=>i" (\|_|\) where - "|A| == (\ i. i \ A)" + "|A| \ (\ i. i \ A)" definition Finite :: "i=>o" where - "Finite(A) == \n\nat. A \ n" + "Finite(A) \ \n\nat. A \ n" definition Card :: "i=>o" where - "Card(i) == (i = |i|)" + "Card(i) \ (i = |i|)" subsection\The Schroeder-Bernstein Theorem\ @@ -47,7 +47,7 @@ lemma Banach_last_equation: "g \ Y->X - ==> g``(Y - f`` lfp(X, %W. X - g``(Y - f``W))) = + \ g``(Y - f`` lfp(X, %W. X - g``(Y - f``W))) = X - lfp(X, %W. X - g``(Y - f``W))" apply (rule_tac P = "%u. v = X-u" for v in decomp_bnd_mono [THEN lfp_unfold, THEN ssubst]) @@ -55,7 +55,7 @@ done lemma decomposition: - "[| f \ X->Y; g \ Y->X |] ==> + "\f \ X->Y; g \ Y->X\ \ \XA XB YA YB. (XA \ XB = 0) & (XA \ XB = X) & (YA \ YB = 0) & (YA \ YB = Y) & f``XA=YA & g``YB=XB" @@ -67,18 +67,18 @@ done lemma schroeder_bernstein: - "[| f \ inj(X,Y); g \ inj(Y,X) |] ==> \h. h \ bij(X,Y)" + "\f \ inj(X,Y); g \ inj(Y,X)\ \ \h. h \ bij(X,Y)" apply (insert decomposition [of f X Y g]) apply (simp add: inj_is_fun) apply (blast intro!: restrict_bij bij_disjoint_Un intro: bij_converse_bij) (* The instantiation of exI to @{term"restrict(f,XA) \ converse(restrict(g,YB))"} - is forced by the context!! *) + is forced by the context\*) done (** Equipollence is an equivalence relation **) -lemma bij_imp_eqpoll: "f \ bij(A,B) ==> A \ B" +lemma bij_imp_eqpoll: "f \ bij(A,B) \ A \ B" apply (unfold eqpoll_def) apply (erule exI) done @@ -86,20 +86,20 @@ (*A \ A*) lemmas eqpoll_refl = id_bij [THEN bij_imp_eqpoll, simp] -lemma eqpoll_sym: "X \ Y ==> Y \ X" +lemma eqpoll_sym: "X \ Y \ Y \ X" apply (unfold eqpoll_def) apply (blast intro: bij_converse_bij) done lemma eqpoll_trans [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" apply (unfold eqpoll_def) apply (blast intro: comp_bij) done (** Le-pollence is a partial ordering **) -lemma subset_imp_lepoll: "X<=Y ==> X \ Y" +lemma subset_imp_lepoll: "X<=Y \ X \ Y" apply (unfold lepoll_def) apply (rule exI) apply (erule id_subset_inj) @@ -109,35 +109,35 @@ lemmas le_imp_lepoll = le_imp_subset [THEN subset_imp_lepoll] -lemma eqpoll_imp_lepoll: "X \ Y ==> X \ Y" +lemma eqpoll_imp_lepoll: "X \ Y \ X \ Y" by (unfold eqpoll_def bij_def lepoll_def, blast) -lemma lepoll_trans [trans]: "[| X \ Y; Y \ Z |] ==> X \ Z" +lemma lepoll_trans [trans]: "\X \ Y; Y \ Z\ \ X \ Z" apply (unfold lepoll_def) apply (blast intro: comp_inj) done -lemma eq_lepoll_trans [trans]: "[| X \ Y; Y \ Z |] ==> X \ Z" +lemma eq_lepoll_trans [trans]: "\X \ Y; Y \ Z\ \ X \ Z" by (blast intro: eqpoll_imp_lepoll lepoll_trans) -lemma lepoll_eq_trans [trans]: "[| X \ Y; Y \ Z |] ==> X \ Z" +lemma lepoll_eq_trans [trans]: "\X \ Y; Y \ Z\ \ X \ Z" by (blast intro: eqpoll_imp_lepoll lepoll_trans) (*Asymmetry law*) -lemma eqpollI: "[| X \ Y; Y \ X |] ==> X \ Y" +lemma eqpollI: "\X \ Y; Y \ X\ \ X \ Y" apply (unfold lepoll_def eqpoll_def) apply (elim exE) apply (rule schroeder_bernstein, assumption+) done lemma eqpollE: - "[| X \ Y; [| X \ Y; Y \ X |] ==> P |] ==> P" + "\X \ Y; \X \ Y; Y \ X\ \ P\ \ P" by (blast intro: eqpoll_imp_lepoll eqpoll_sym) lemma eqpoll_iff: "X \ Y \ X \ Y & Y \ X" by (blast intro: eqpollI elim!: eqpollE) -lemma lepoll_0_is_0: "A \ 0 ==> A = 0" +lemma lepoll_0_is_0: "A \ 0 \ A = 0" apply (unfold lepoll_def inj_def) apply (blast dest: apply_type) done @@ -149,20 +149,20 @@ by (blast intro: lepoll_0_is_0 lepoll_refl) lemma Un_lepoll_Un: - "[| A \ B; C \ D; B \ D = 0 |] ==> A \ C \ B \ D" + "\A \ B; C \ D; B \ D = 0\ \ A \ C \ B \ D" apply (unfold lepoll_def) apply (blast intro: inj_disjoint_Un) done -(*A \ 0 ==> A=0*) +(*A \ 0 \ A=0*) lemmas eqpoll_0_is_0 = eqpoll_imp_lepoll [THEN lepoll_0_is_0] lemma eqpoll_0_iff: "A \ 0 \ A=0" by (blast intro: eqpoll_0_is_0 eqpoll_refl) lemma eqpoll_disjoint_Un: - "[| A \ B; C \ D; A \ C = 0; B \ D = 0 |] - ==> A \ C \ B \ D" + "\A \ B; C \ D; A \ C = 0; B \ D = 0\ + \ A \ C \ B \ D" apply (unfold eqpoll_def) apply (blast intro: bij_disjoint_Un) done @@ -170,16 +170,16 @@ subsection\lesspoll: contributions by Krzysztof Grabczewski\ -lemma lesspoll_not_refl: "~ (i \ i)" +lemma lesspoll_not_refl: "\ (i \ i)" by (simp add: lesspoll_def) -lemma lesspoll_irrefl [elim!]: "i \ i ==> P" +lemma lesspoll_irrefl [elim!]: "i \ i \ P" by (simp add: lesspoll_def) -lemma lesspoll_imp_lepoll: "A \ B ==> A \ B" +lemma lesspoll_imp_lepoll: "A \ B \ A \ B" by (unfold lesspoll_def, blast) -lemma lepoll_well_ord: "[| A \ B; well_ord(B,r) |] ==> \s. well_ord(A,s)" +lemma lepoll_well_ord: "\A \ B; well_ord(B,r)\ \ \s. well_ord(A,s)" apply (unfold lepoll_def) apply (blast intro: well_ord_rvimage) done @@ -207,36 +207,36 @@ (** Variations on transitivity **) lemma lesspoll_trans [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" apply (unfold lesspoll_def) apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) done lemma lesspoll_trans1 [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" apply (unfold lesspoll_def) apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) done lemma lesspoll_trans2 [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" apply (unfold lesspoll_def) apply (blast elim!: eqpollE intro: eqpollI lepoll_trans) done lemma eq_lesspoll_trans [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" by (blast intro: eqpoll_imp_lepoll lesspoll_trans1) lemma lesspoll_eq_trans [trans]: - "[| X \ Y; Y \ Z |] ==> X \ Z" + "\X \ Y; Y \ Z\ \ X \ Z" by (blast intro: eqpoll_imp_lepoll lesspoll_trans2) (** \ -- the least number operator [from HOL/Univ.ML] **) lemma Least_equality: - "[| P(i); Ord(i); !!x. x ~P(x) |] ==> (\ x. P(x)) = i" + "\P(i); Ord(i); \x. x \P(x)\ \ (\ x. P(x)) = i" apply (unfold Least_def) apply (rule the_equality, blast) apply (elim conjE) @@ -254,7 +254,7 @@ case True thus ?thesis . next case False - hence "\x. x \ i \ ~P(x)" using step + hence "\x. x \ i \ \P(x)" using step by blast hence "(\ a. P(a)) = i" using step by (blast intro: Least_equality ltD) @@ -278,7 +278,7 @@ case True thus ?thesis . next case False - hence "\x. x \ i \ ~ (\ a. P(a)) \ i" using step + hence "\x. x \ i \ \ (\ a. P(a)) \ i" using step by blast hence "(\ a. P(a)) = i" using step by (blast elim: ltE intro: ltI Least_equality lt_trans1) @@ -291,19 +291,19 @@ qed (*\ really is the smallest*) -lemma less_LeastE: "[| P(i); i < (\ x. P(x)) |] ==> Q" +lemma less_LeastE: "\P(i); i < (\ x. P(x))\ \ Q" apply (rule Least_le [THEN [2] lt_trans2, THEN lt_irrefl], assumption+) apply (simp add: lt_Ord) done (*Easier to apply than LeastI: conclusion has only one occurrence of P*) lemma LeastI2: - "[| P(i); Ord(i); !!j. P(j) ==> Q(j) |] ==> Q(\ j. P(j))" + "\P(i); Ord(i); \j. P(j) \ Q(j)\ \ Q(\ j. P(j))" by (blast intro: LeastI ) (*If there is no such P then \ is vacuously 0*) lemma Least_0: - "[| ~ (\i. Ord(i) & P(i)) |] ==> (\ x. P(x)) = 0" + "\\ (\i. Ord(i) & P(i))\ \ (\ x. P(x)) = 0" apply (unfold Least_def) apply (rule the_0, blast) done @@ -326,12 +326,12 @@ subsection\Basic Properties of Cardinals\ (*Not needed for simplification, but helpful below*) -lemma Least_cong: "(!!y. P(y) \ Q(y)) ==> (\ x. P(x)) = (\ x. Q(x))" +lemma Least_cong: "(\y. P(y) \ Q(y)) \ (\ x. P(x)) = (\ x. Q(x))" by simp -(*Need AC to get @{term"X \ Y ==> |X| \ |Y|"}; see well_ord_lepoll_imp_cardinal_le +(*Need AC to get @{term"X \ Y \ |X| \ |Y|"}; see well_ord_lepoll_imp_cardinal_le Converse also requires AC, but see well_ord_cardinal_eqE*) -lemma cardinal_cong: "X \ Y ==> |X| = |Y|" +lemma cardinal_cong: "X \ Y \ |X| = |Y|" apply (unfold eqpoll_def cardinal_def) apply (rule Least_cong) apply (blast intro: comp_bij bij_converse_bij) @@ -345,7 +345,7 @@ by (best intro: LeastI Ord_ordertype ordermap_bij bij_converse_bij bij_imp_eqpoll r) qed -(* @{term"Ord(A) ==> |A| \ A"} *) +(* @{term"Ord(A) \ |A| \ A"} *) lemmas Ord_cardinal_eqpoll = well_ord_Memrel [THEN well_ord_cardinal_eqpoll] lemma Ord_cardinal_idem: "Ord(A) \ ||A|| = |A|" @@ -362,36 +362,36 @@ qed lemma well_ord_cardinal_eqpoll_iff: - "[| well_ord(X,r); well_ord(Y,s) |] ==> |X| = |Y| \ X \ Y" + "\well_ord(X,r); well_ord(Y,s)\ \ |X| = |Y| \ X \ Y" by (blast intro: cardinal_cong well_ord_cardinal_eqE) (** Observations from Kunen, page 28 **) -lemma Ord_cardinal_le: "Ord(i) ==> |i| \ i" +lemma Ord_cardinal_le: "Ord(i) \ |i| \ i" apply (unfold cardinal_def) apply (erule eqpoll_refl [THEN Least_le]) done -lemma Card_cardinal_eq: "Card(K) ==> |K| = K" +lemma Card_cardinal_eq: "Card(K) \ |K| = K" apply (unfold Card_def) apply (erule sym) done -(* Could replace the @{term"~(j \ i)"} by @{term"~(i \ j)"}. *) -lemma CardI: "[| Ord(i); !!j. j ~(j \ i) |] ==> Card(i)" +(* Could replace the @{term"\(j \ i)"} by @{term"\(i \ j)"}. *) +lemma CardI: "\Ord(i); \j. j \(j \ i)\ \ Card(i)" apply (unfold Card_def cardinal_def) apply (subst Least_equality) apply (blast intro: eqpoll_refl)+ done -lemma Card_is_Ord: "Card(i) ==> Ord(i)" +lemma Card_is_Ord: "Card(i) \ Ord(i)" apply (unfold Card_def cardinal_def) apply (erule ssubst) apply (rule Ord_Least) done -lemma Card_cardinal_le: "Card(K) ==> K \ |K|" +lemma Card_cardinal_le: "Card(K) \ K \ |K|" apply (simp (no_asm_simp) add: Card_is_Ord Card_cardinal_eq) done @@ -401,7 +401,7 @@ done text\The cardinals are the initial ordinals.\ -lemma Card_iff_initial: "Card(K) \ Ord(K) & (\j. j ~ j \ K)" +lemma Card_iff_initial: "Card(K) \ Ord(K) & (\j. j \ j \ K)" proof - { fix j assume K: "Card(K)" "j \ K" @@ -416,7 +416,7 @@ by (blast intro: CardI Card_is_Ord) qed -lemma lt_Card_imp_lesspoll: "[| Card(a); i i \ a" +lemma lt_Card_imp_lesspoll: "\Card(a); i \ i \ a" apply (unfold lesspoll_def) apply (drule Card_iff_initial [THEN iffD1]) apply (blast intro!: leI [THEN le_imp_lepoll]) @@ -427,7 +427,7 @@ apply (blast elim!: ltE) done -lemma Card_Un: "[| Card(K); Card(L) |] ==> Card(K \ L)" +lemma Card_Un: "\Card(K); Card(L)\ \ Card(K \ L)" apply (rule Ord_linear_le [of K L]) apply (simp_all add: subset_Un_iff [THEN iffD1] Card_is_Ord le_imp_subset subset_Un_iff2 [THEN iffD1]) @@ -491,19 +491,19 @@ qed text\Since we have \<^term>\|succ(nat)| \ |nat|\, the converse of \cardinal_mono\ fails!\ -lemma cardinal_lt_imp_lt: "[| |i| < |j|; Ord(i); Ord(j) |] ==> i < j" +lemma cardinal_lt_imp_lt: "\|i| < |j|; Ord(i); Ord(j)\ \ i < j" apply (rule Ord_linear2 [of i j], assumption+) apply (erule lt_trans2 [THEN lt_irrefl]) apply (erule cardinal_mono) done -lemma Card_lt_imp_lt: "[| |i| < K; Ord(i); Card(K) |] ==> i < K" +lemma Card_lt_imp_lt: "\|i| < K; Ord(i); Card(K)\ \ i < K" by (simp (no_asm_simp) add: cardinal_lt_imp_lt Card_is_Ord Card_cardinal_eq) -lemma Card_lt_iff: "[| Ord(i); Card(K) |] ==> (|i| < K) \ (i < K)" +lemma Card_lt_iff: "\Ord(i); Card(K)\ \ (|i| < K) \ (i < K)" by (blast intro: Card_lt_imp_lt Ord_cardinal_le [THEN lt_trans1]) -lemma Card_le_iff: "[| Ord(i); Card(K) |] ==> (K \ |i|) \ (K \ i)" +lemma Card_le_iff: "\Ord(i); Card(K)\ \ (K \ |i|) \ (K \ i)" by (simp add: Card_lt_iff Card_is_Ord Ord_cardinal not_lt_iff_le [THEN iff_sym]) (*Can use AC or finiteness to discharge first premise*) @@ -526,21 +526,21 @@ thus ?thesis by simp qed -lemma lepoll_cardinal_le: "[| A \ i; Ord(i) |] ==> |A| \ i" +lemma lepoll_cardinal_le: "\A \ i; Ord(i)\ \ |A| \ i" apply (rule le_trans) apply (erule well_ord_Memrel [THEN well_ord_lepoll_imp_cardinal_le], assumption) apply (erule Ord_cardinal_le) done -lemma lepoll_Ord_imp_eqpoll: "[| A \ i; Ord(i) |] ==> |A| \ A" +lemma lepoll_Ord_imp_eqpoll: "\A \ i; Ord(i)\ \ |A| \ A" by (blast intro: lepoll_cardinal_le well_ord_Memrel well_ord_cardinal_eqpoll dest!: lepoll_well_ord) -lemma lesspoll_imp_eqpoll: "[| A \ i; Ord(i) |] ==> |A| \ A" +lemma lesspoll_imp_eqpoll: "\A \ i; Ord(i)\ \ |A| \ A" apply (unfold lesspoll_def) apply (blast intro: lepoll_Ord_imp_eqpoll) done -lemma cardinal_subset_Ord: "[|A<=i; Ord(i)|] ==> |A| \ i" +lemma cardinal_subset_Ord: "\A<=i; Ord(i)\ \ |A| \ i" apply (drule subset_imp_lepoll [THEN lepoll_cardinal_le]) apply (auto simp add: lt_def) apply (blast intro: Ord_trans) @@ -549,7 +549,7 @@ subsection\The finite cardinals\ lemma cons_lepoll_consD: - "[| cons(u,A) \ cons(v,B); u\A; v\B |] ==> A \ B" + "\cons(u,A) \ cons(v,B); u\A; v\B\ \ A \ B" apply (unfold lepoll_def inj_def, safe) apply (rule_tac x = "\x\A. if f`x=v then f`u else f`x" in exI) apply (rule CollectI) @@ -562,13 +562,13 @@ apply blast done -lemma cons_eqpoll_consD: "[| cons(u,A) \ cons(v,B); u\A; v\B |] ==> A \ B" +lemma cons_eqpoll_consD: "\cons(u,A) \ cons(v,B); u\A; v\B\ \ A \ B" apply (simp add: eqpoll_iff) apply (blast intro: cons_lepoll_consD) done (*Lemma suggested by Mike Fourman*) -lemma succ_lepoll_succD: "succ(m) \ succ(n) ==> m \ n" +lemma succ_lepoll_succD: "succ(m) \ succ(n) \ m \ n" apply (unfold succ_def) apply (erule cons_lepoll_consD) apply (rule mem_not_refl)+ @@ -576,7 +576,7 @@ lemma nat_lepoll_imp_le: - "m \ nat ==> n \ nat \ m \ n \ m \ n" + "m \ nat \ n \ nat \ m \ n \ m \ n" proof (induct m arbitrary: n rule: nat_induct) case 0 thus ?case by (blast intro!: nat_0_le) next @@ -591,7 +591,7 @@ qed qed -lemma nat_eqpoll_iff: "[| m \ nat; n \ nat |] ==> m \ n \ m = n" +lemma nat_eqpoll_iff: "\m \ nat; n \ nat\ \ m \ n \ m = n" apply (rule iffI) apply (blast intro: nat_lepoll_imp_le le_anti_sym elim!: eqpollE) apply (simp add: eqpoll_refl) @@ -616,11 +616,11 @@ (*Part of Kunen's Lemma 10.6*) -lemma succ_lepoll_natE: "[| succ(n) \ n; n \ nat |] ==> P" +lemma succ_lepoll_natE: "\succ(n) \ n; n \ nat\ \ P" by (rule nat_lepoll_imp_le [THEN lt_irrefl], auto) lemma nat_lepoll_imp_ex_eqpoll_n: - "[| n \ nat; nat \ X |] ==> \Y. Y \ X & n \ Y" + "\n \ nat; nat \ X\ \ \Y. Y \ X & n \ Y" apply (unfold lepoll_def eqpoll_def) apply (fast del: subsetI subsetCE intro!: subset_SIs @@ -649,22 +649,22 @@ qed lemma lesspoll_succ_imp_lepoll: - "[| A \ succ(m); m \ nat |] ==> A \ m" + "\A \ succ(m); m \ nat\ \ A \ m" apply (unfold lesspoll_def lepoll_def eqpoll_def bij_def) apply (auto dest: inj_not_surj_succ) done -lemma lesspoll_succ_iff: "m \ nat ==> A \ succ(m) \ A \ m" +lemma lesspoll_succ_iff: "m \ nat \ A \ succ(m) \ A \ m" by (blast intro!: lepoll_imp_lesspoll_succ lesspoll_succ_imp_lepoll) -lemma lepoll_succ_disj: "[| A \ succ(m); m \ nat |] ==> A \ m | A \ succ(m)" +lemma lepoll_succ_disj: "\A \ succ(m); m \ nat\ \ A \ m | A \ succ(m)" apply (rule disjCI) apply (rule lesspoll_succ_imp_lepoll) prefer 2 apply assumption apply (simp (no_asm_simp) add: lesspoll_def) done -lemma lesspoll_cardinal_lt: "[| A \ i; Ord(i) |] ==> |A| < i" +lemma lesspoll_cardinal_lt: "\A \ i; Ord(i)\ \ |A| < i" apply (unfold lesspoll_def, clarify) apply (frule lepoll_cardinal_le, assumption) apply (blast intro: well_ord_Memrel well_ord_cardinal_eqpoll [THEN eqpoll_sym] @@ -676,7 +676,7 @@ (*This implies Kunen's Lemma 10.6*) lemma lt_not_lepoll: - assumes n: "n nat" shows "~ i \ n" + assumes n: "n nat" shows "\ i \ n" proof - { assume i: "i \ n" have "succ(n) \ i" using n @@ -700,8 +700,8 @@ thus ?thesis by (simp add: eqpoll_refl) next case gt - hence "~ i \ n" using n by (rule lt_not_lepoll) - hence "~ i \ n" using n by (blast intro: eqpoll_imp_lepoll) + hence "\ i \ n" using n by (rule lt_not_lepoll) + hence "\ i \ n" using n by (blast intro: eqpoll_imp_lepoll) moreover have "i \ n" using \n by auto ultimately show ?thesis by blast qed @@ -710,7 +710,7 @@ proof - { fix i assume i: "i < nat" "i \ nat" - hence "~ nat \ i" + hence "\ nat \ i" by (simp add: lt_def lt_not_lepoll) hence False using i by (simp add: eqpoll_iff) @@ -721,12 +721,12 @@ qed (*Allows showing that |i| is a limit cardinal*) -lemma nat_le_cardinal: "nat \ i ==> nat \ |i|" +lemma nat_le_cardinal: "nat \ i \ nat \ |i|" apply (rule Card_nat [THEN Card_cardinal_eq, THEN subst]) apply (erule cardinal_mono) done -lemma n_lesspoll_nat: "n \ nat ==> n \ nat" +lemma n_lesspoll_nat: "n \ nat \ n \ nat" by (blast intro: Ord_nat Card_nat ltI lt_Card_imp_lesspoll) @@ -735,7 +735,7 @@ (*Congruence law for cons under equipollence*) lemma cons_lepoll_cong: - "[| A \ B; b \ B |] ==> cons(a,A) \ cons(b,B)" + "\A \ B; b \ B\ \ cons(a,A) \ cons(b,B)" apply (unfold lepoll_def, safe) apply (rule_tac x = "\y\cons (a,A) . if y=a then b else f`y" in exI) apply (rule_tac d = "%z. if z \ B then converse (f) `z else a" in lam_injective) @@ -745,15 +745,15 @@ done lemma cons_eqpoll_cong: - "[| A \ B; a \ A; b \ B |] ==> cons(a,A) \ cons(b,B)" + "\A \ B; a \ A; b \ B\ \ cons(a,A) \ cons(b,B)" by (simp add: eqpoll_iff cons_lepoll_cong) lemma cons_lepoll_cons_iff: - "[| a \ A; b \ B |] ==> cons(a,A) \ cons(b,B) \ A \ B" + "\a \ A; b \ B\ \ cons(a,A) \ cons(b,B) \ A \ B" by (blast intro: cons_lepoll_cong cons_lepoll_consD) lemma cons_eqpoll_cons_iff: - "[| a \ A; b \ B |] ==> cons(a,A) \ cons(b,B) \ A \ B" + "\a \ A; b \ B\ \ cons(a,A) \ cons(b,B) \ A \ B" by (blast intro: cons_eqpoll_cong cons_eqpoll_consD) lemma singleton_eqpoll_1: "{a} \ 1" @@ -766,7 +766,7 @@ apply (simp (no_asm) add: nat_into_Card [THEN Card_cardinal_eq]) done -lemma not_0_is_lepoll_1: "A \ 0 ==> 1 \ A" +lemma not_0_is_lepoll_1: "A \ 0 \ 1 \ A" apply (erule not_emptyE) apply (rule_tac a = "cons (x, A-{x}) " in subst) apply (rule_tac [2] a = "cons(0,0)" and P= "%y. y \ cons (x, A-{x})" in subst) @@ -774,26 +774,26 @@ done (*Congruence law for succ under equipollence*) -lemma succ_eqpoll_cong: "A \ B ==> succ(A) \ succ(B)" +lemma succ_eqpoll_cong: "A \ B \ succ(A) \ succ(B)" apply (unfold succ_def) apply (simp add: cons_eqpoll_cong mem_not_refl) done (*Congruence law for + under equipollence*) -lemma sum_eqpoll_cong: "[| A \ C; B \ D |] ==> A+B \ C+D" +lemma sum_eqpoll_cong: "\A \ C; B \ D\ \ A+B \ C+D" apply (unfold eqpoll_def) apply (blast intro!: sum_bij) done (*Congruence law for * under equipollence*) lemma prod_eqpoll_cong: - "[| A \ C; B \ D |] ==> A*B \ C*D" + "\A \ C; B \ D\ \ A*B \ C*D" apply (unfold eqpoll_def) apply (blast intro!: prod_bij) done lemma inj_disjoint_eqpoll: - "[| f \ inj(A,B); A \ B = 0 |] ==> A \ (B - range(f)) \ B" + "\f \ inj(A,B); A \ B = 0\ \ A \ (B - range(f)) \ B" apply (unfold eqpoll_def) apply (rule exI) apply (rule_tac c = "%x. if x \ A then f`x else x" @@ -814,7 +814,7 @@ text\If \<^term>\A\ has at most \<^term>\n+1\ elements and \<^term>\a \ A\ then \<^term>\A-{a}\ has at most \<^term>\n\.\ lemma Diff_sing_lepoll: - "[| a \ A; A \ succ(n) |] ==> A - {a} \ n" + "\a \ A; A \ succ(n)\ \ A - {a} \ n" apply (unfold succ_def) apply (rule cons_lepoll_consD) apply (rule_tac [3] mem_not_refl) @@ -834,12 +834,12 @@ by (blast intro: cons_lepoll_consD mem_irrefl) qed -lemma Diff_sing_eqpoll: "[| a \ A; A \ succ(n) |] ==> A - {a} \ n" +lemma Diff_sing_eqpoll: "\a \ A; A \ succ(n)\ \ A - {a} \ n" by (blast intro!: eqpollI elim!: eqpollE intro: Diff_sing_lepoll lepoll_Diff_sing) -lemma lepoll_1_is_sing: "[| A \ 1; a \ A |] ==> A = {a}" +lemma lepoll_1_is_sing: "\A \ 1; a \ A\ \ A = {a}" apply (frule Diff_sing_lepoll, assumption) apply (drule lepoll_0_is_0) apply (blast elim: equalityE) @@ -854,12 +854,12 @@ done lemma well_ord_Un: - "[| well_ord(X,R); well_ord(Y,S) |] ==> \T. well_ord(X \ Y, T)" + "\well_ord(X,R); well_ord(Y,S)\ \ \T. well_ord(X \ Y, T)" by (erule well_ord_radd [THEN Un_lepoll_sum [THEN lepoll_well_ord]], assumption) (*Krzysztof Grabczewski*) -lemma disj_Un_eqpoll_sum: "A \ B = 0 ==> A \ B \ A + B" +lemma disj_Un_eqpoll_sum: "A \ B = 0 \ A \ B \ A + B" apply (unfold eqpoll_def) apply (rule_tac x = "\a\A \ B. if a \ A then Inl (a) else Inr (a)" in exI) apply (rule_tac d = "%z. case (%x. x, %x. x, z)" in lam_bijective) @@ -869,7 +869,7 @@ subsection \Finite and infinite sets\ -lemma eqpoll_imp_Finite_iff: "A \ B ==> Finite(A) \ Finite(B)" +lemma eqpoll_imp_Finite_iff: "A \ B \ Finite(A) \ Finite(B)" apply (unfold Finite_def) apply (blast intro: eqpoll_trans eqpoll_sym) done @@ -879,7 +879,7 @@ apply (blast intro!: eqpoll_refl nat_0I) done -lemma Finite_cons: "Finite(x) ==> Finite(cons(y,x))" +lemma Finite_cons: "Finite(x) \ Finite(cons(y,x))" apply (unfold Finite_def) apply (case_tac "y \ x") apply (simp add: cons_absorb) @@ -889,7 +889,7 @@ apply (simp (no_asm_simp) add: succ_def cons_eqpoll_cong mem_not_refl) done -lemma Finite_succ: "Finite(x) ==> Finite(succ(x))" +lemma Finite_succ: "Finite(x) \ Finite(succ(x))" apply (unfold succ_def) apply (erule Finite_cons) done @@ -911,7 +911,7 @@ qed lemma lesspoll_nat_is_Finite: - "A \ nat ==> Finite(A)" + "A \ nat \ Finite(A)" apply (unfold Finite_def) apply (blast dest: ltD lesspoll_cardinal_lt lesspoll_imp_eqpoll [THEN eqpoll_sym]) @@ -936,13 +936,13 @@ lemma Finite_succ_iff [iff]: "Finite(succ(x)) \ Finite(x)" by (simp add: succ_def) -lemma Finite_Int: "Finite(A) | Finite(B) ==> Finite(A \ B)" +lemma Finite_Int: "Finite(A) | Finite(B) \ Finite(A \ B)" by (blast intro: subset_Finite) lemmas Finite_Diff = Diff_subset [THEN subset_Finite] lemma nat_le_infinite_Ord: - "[| Ord(i); ~ Finite(i) |] ==> nat \ i" + "\Ord(i); \ Finite(i)\ \ nat \ i" apply (unfold Finite_def) apply (erule Ord_nat [THEN [2] Ord_linear2]) prefer 2 apply assumption @@ -950,19 +950,19 @@ done lemma Finite_imp_well_ord: - "Finite(A) ==> \r. well_ord(A,r)" + "Finite(A) \ \r. well_ord(A,r)" apply (unfold Finite_def eqpoll_def) apply (blast intro: well_ord_rvimage bij_is_inj well_ord_Memrel nat_into_Ord) done -lemma succ_lepoll_imp_not_empty: "succ(x) \ y ==> y \ 0" +lemma succ_lepoll_imp_not_empty: "succ(x) \ y \ y \ 0" by (fast dest!: lepoll_0_is_0) -lemma eqpoll_succ_imp_not_empty: "x \ succ(n) ==> x \ 0" +lemma eqpoll_succ_imp_not_empty: "x \ succ(n) \ x \ 0" by (fast elim!: eqpoll_sym [THEN eqpoll_0_is_0, THEN succ_neq_0]) lemma Finite_Fin_lemma [rule_format]: - "n \ nat ==> \A. (A\n & A \ X) \ A \ Fin(X)" + "n \ nat \ \A. (A\n & A \ X) \ A \ Fin(X)" apply (induct_tac n) apply (rule allI) apply (fast intro!: Fin.emptyI dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) @@ -978,10 +978,10 @@ apply (simp add: cons_Diff) done -lemma Finite_Fin: "[| Finite(A); A \ X |] ==> A \ Fin(X)" +lemma Finite_Fin: "\Finite(A); A \ X\ \ A \ Fin(X)" by (unfold Finite_def, blast intro: Finite_Fin_lemma) -lemma Fin_lemma [rule_format]: "n \ nat ==> \A. A \ n \ A \ Fin(A)" +lemma Fin_lemma [rule_format]: "n \ nat \ \A. A \ n \ A \ Fin(A)" apply (induct_tac n) apply (simp add: eqpoll_0_iff, clarify) apply (subgoal_tac "\u. u \ A") @@ -997,18 +997,18 @@ apply (blast intro: bij_converse_bij [THEN bij_is_fun, THEN apply_type]) done -lemma Finite_into_Fin: "Finite(A) ==> A \ Fin(A)" +lemma Finite_into_Fin: "Finite(A) \ A \ Fin(A)" apply (unfold Finite_def) apply (blast intro: Fin_lemma) done -lemma Fin_into_Finite: "A \ Fin(U) ==> Finite(A)" +lemma Fin_into_Finite: "A \ Fin(U) \ Finite(A)" by (fast intro!: Finite_0 Finite_cons elim: Fin_induct) lemma Finite_Fin_iff: "Finite(A) \ A \ Fin(A)" by (blast intro: Finite_into_Fin Fin_into_Finite) -lemma Finite_Un: "[| Finite(A); Finite(B) |] ==> Finite(A \ B)" +lemma Finite_Un: "\Finite(A); Finite(B)\ \ Finite(A \ B)" by (blast intro!: Fin_into_Finite Fin_UnI dest!: Finite_into_Fin intro: Un_upper1 [THEN Fin_mono, THEN subsetD] @@ -1018,7 +1018,7 @@ by (blast intro: subset_Finite Finite_Un) text\The converse must hold too.\ -lemma Finite_Union: "[| \y\X. Finite(y); Finite(X) |] ==> Finite(\(X))" +lemma Finite_Union: "\\y\X. Finite(y); Finite(X)\ \ Finite(\(X))" apply (simp add: Finite_Fin_iff) apply (rule Fin_UnionI) apply (erule Fin_induct, simp) @@ -1027,15 +1027,15 @@ (* Induction principle for Finite(A), by Sidi Ehmety *) lemma Finite_induct [case_names 0 cons, induct set: Finite]: -"[| Finite(A); P(0); - !! x B. [| Finite(B); x \ B; P(B) |] ==> P(cons(x, B)) |] - ==> P(A)" +"\Finite(A); P(0); + \x B. \Finite(B); x \ B; P(B)\ \ P(cons(x, B))\ + \ P(A)" apply (erule Finite_into_Fin [THEN Fin_induct]) apply (blast intro: Fin_into_Finite)+ done -(*Sidi Ehmety. The contrapositive says ~Finite(A) ==> ~Finite(A-{a}) *) -lemma Diff_sing_Finite: "Finite(A - {a}) ==> Finite(A)" +(*Sidi Ehmety. The contrapositive says \Finite(A) \ \Finite(A-{a}) *) +lemma Diff_sing_Finite: "Finite(A - {a}) \ Finite(A)" apply (unfold Finite_def) apply (case_tac "a \ A") apply (subgoal_tac [2] "A-{a}=A", auto) @@ -1046,8 +1046,8 @@ done (*Sidi Ehmety. And the contrapositive of this says - [| ~Finite(A); Finite(B) |] ==> ~Finite(A-B) *) -lemma Diff_Finite [rule_format]: "Finite(B) ==> Finite(A-B) \ Finite(A)" + \\Finite(A); Finite(B)\ \ \Finite(A-B) *) +lemma Diff_Finite [rule_format]: "Finite(B) \ Finite(A-B) \ Finite(A)" apply (erule Finite_induct, auto) apply (case_tac "x \ A") apply (subgoal_tac [2] "A-cons (x, B) = A - B") @@ -1055,12 +1055,12 @@ apply (drule Diff_sing_Finite, auto) done -lemma Finite_RepFun: "Finite(A) ==> Finite(RepFun(A,f))" +lemma Finite_RepFun: "Finite(A) \ Finite(RepFun(A,f))" by (erule Finite_induct, simp_all) lemma Finite_RepFun_iff_lemma [rule_format]: - "[|Finite(x); !!x y. f(x)=f(y) ==> x=y|] - ==> \A. x = RepFun(A,f) \ Finite(A)" + "\Finite(x); \x y. f(x)=f(y) \ x=y\ + \ \A. x = RepFun(A,f) \ Finite(A)" apply (erule Finite_induct) apply clarify apply (case_tac "A=0", simp) @@ -1078,15 +1078,15 @@ text\I don't know why, but if the premise is expressed using meta-connectives then the simplifier cannot prove it automatically in conditional rewriting.\ lemma Finite_RepFun_iff: - "(\x y. f(x)=f(y) \ x=y) ==> Finite(RepFun(A,f)) \ Finite(A)" + "(\x y. f(x)=f(y) \ x=y) \ Finite(RepFun(A,f)) \ Finite(A)" by (blast intro: Finite_RepFun Finite_RepFun_iff_lemma [of _ f]) -lemma Finite_Pow: "Finite(A) ==> Finite(Pow(A))" +lemma Finite_Pow: "Finite(A) \ Finite(Pow(A))" apply (erule Finite_induct) apply (simp_all add: Pow_insert Finite_Un Finite_RepFun) done -lemma Finite_Pow_imp_Finite: "Finite(Pow(A)) ==> Finite(A)" +lemma Finite_Pow_imp_Finite: "Finite(Pow(A)) \ Finite(A)" apply (subgoal_tac "Finite({{x} . x \ A})") apply (simp add: Finite_RepFun_iff ) apply (blast intro: subset_Finite) @@ -1103,7 +1103,7 @@ (*Krzysztof Grabczewski's proof that the converse of a finite, well-ordered set is well-ordered. Proofs simplified by lcp. *) -lemma nat_wf_on_converse_Memrel: "n \ nat ==> wf[n](converse(Memrel(n)))" +lemma nat_wf_on_converse_Memrel: "n \ nat \ wf[n](converse(Memrel(n)))" proof (induct n rule: nat_induct) case 0 thus ?case by (blast intro: wf_onI) next @@ -1125,15 +1125,15 @@ qed qed -lemma nat_well_ord_converse_Memrel: "n \ nat ==> well_ord(n,converse(Memrel(n)))" +lemma nat_well_ord_converse_Memrel: "n \ nat \ well_ord(n,converse(Memrel(n)))" apply (frule Ord_nat [THEN Ord_in_Ord, THEN well_ord_Memrel]) apply (simp add: well_ord_def tot_ord_converse nat_wf_on_converse_Memrel) done lemma well_ord_converse: - "[|well_ord(A,r); - well_ord(ordertype(A,r), converse(Memrel(ordertype(A, r)))) |] - ==> well_ord(A,converse(r))" + "\well_ord(A,r); + well_ord(ordertype(A,r), converse(Memrel(ordertype(A, r))))\ + \ well_ord(A,converse(r))" apply (rule well_ord_Int_iff [THEN iffD1]) apply (frule ordermap_bij [THEN bij_is_inj, THEN well_ord_rvimage], assumption) apply (simp add: rvimage_converse converse_Int converse_prod @@ -1153,16 +1153,16 @@ qed lemma Finite_well_ord_converse: - "[| Finite(A); well_ord(A,r) |] ==> well_ord(A,converse(r))" + "\Finite(A); well_ord(A,r)\ \ well_ord(A,converse(r))" apply (unfold Finite_def) apply (rule well_ord_converse, assumption) apply (blast dest: ordertype_eq_n intro!: nat_well_ord_converse_Memrel) done -lemma nat_into_Finite: "n \ nat ==> Finite(n)" +lemma nat_into_Finite: "n \ nat \ Finite(n)" by (auto simp add: Finite_def intro: eqpoll_refl) -lemma nat_not_Finite: "~ Finite(nat)" +lemma nat_not_Finite: "\ Finite(nat)" proof - { fix n assume n: "n \ nat" "nat \ n"