9 begin |
9 begin |
10 |
10 |
11 lemma cons_Diff_eq: "a\<notin>A ==> cons(a,A)-{a}=A" |
11 lemma cons_Diff_eq: "a\<notin>A ==> cons(a,A)-{a}=A" |
12 by fast |
12 by fast |
13 |
13 |
14 lemma nat_1_lepoll_iff: "1\<lesssim>X <-> (\<exists>x. x \<in> X)" |
14 lemma nat_1_lepoll_iff: "1\<lesssim>X \<longleftrightarrow> (\<exists>x. x \<in> X)" |
15 apply (unfold lepoll_def) |
15 apply (unfold lepoll_def) |
16 apply (rule iffI) |
16 apply (rule iffI) |
17 apply (fast intro: inj_is_fun [THEN apply_type]) |
17 apply (fast intro: inj_is_fun [THEN apply_type]) |
18 apply (erule exE) |
18 apply (erule exE) |
19 apply (rule_tac x = "\<lambda>a \<in> 1. x" in exI) |
19 apply (rule_tac x = "\<lambda>a \<in> 1. x" in exI) |
20 apply (fast intro!: lam_injective) |
20 apply (fast intro!: lam_injective) |
21 done |
21 done |
22 |
22 |
23 lemma eqpoll_1_iff_singleton: "X\<approx>1 <-> (\<exists>x. X={x})" |
23 lemma eqpoll_1_iff_singleton: "X\<approx>1 \<longleftrightarrow> (\<exists>x. X={x})" |
24 apply (rule iffI) |
24 apply (rule iffI) |
25 apply (erule eqpollE) |
25 apply (erule eqpollE) |
26 apply (drule nat_1_lepoll_iff [THEN iffD1]) |
26 apply (drule nat_1_lepoll_iff [THEN iffD1]) |
27 apply (fast intro!: lepoll_1_is_sing) |
27 apply (fast intro!: lepoll_1_is_sing) |
28 apply (fast intro!: singleton_eqpoll_1) |
28 apply (fast intro!: singleton_eqpoll_1) |
77 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective) |
77 apply (rule_tac d = "%z. cons (fst(z), snd(z))" in lam_injective) |
78 apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in) |
78 apply (blast intro!: Diff_sing_eqpoll intro: InfCard_Least_in) |
79 apply (simp, blast intro: InfCard_Least_in) |
79 apply (simp, blast intro: InfCard_Least_in) |
80 done |
80 done |
81 |
81 |
82 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(Union(z))" |
82 lemma set_of_Ord_succ_Union: "(\<forall>y \<in> z. Ord(y)) ==> z \<subseteq> succ(\<Union>(z))" |
83 apply (rule subsetI) |
83 apply (rule subsetI) |
84 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast ) |
84 apply (case_tac "\<forall>y \<in> z. y \<subseteq> x", blast ) |
85 apply (simp, erule bexE) |
85 apply (simp, erule bexE) |
86 apply (rule_tac i=y and j=x in Ord_linear_le) |
86 apply (rule_tac i=y and j=x in Ord_linear_le) |
87 apply (blast dest: le_imp_subset elim: leE ltE)+ |
87 apply (blast dest: le_imp_subset elim: leE ltE)+ |
89 |
89 |
90 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j" |
90 lemma subset_not_mem: "j \<subseteq> i ==> i \<notin> j" |
91 by (fast elim!: mem_irrefl) |
91 by (fast elim!: mem_irrefl) |
92 |
92 |
93 lemma succ_Union_not_mem: |
93 lemma succ_Union_not_mem: |
94 "(!!y. y \<in> z ==> Ord(y)) ==> succ(Union(z)) \<notin> z" |
94 "(!!y. y \<in> z ==> Ord(y)) ==> succ(\<Union>(z)) \<notin> z" |
95 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast) |
95 apply (rule set_of_Ord_succ_Union [THEN subset_not_mem], blast) |
96 done |
96 done |
97 |
97 |
98 lemma Union_cons_eq_succ_Union: |
98 lemma Union_cons_eq_succ_Union: |
99 "Union(cons(succ(Union(z)),z)) = succ(Union(z))" |
99 "\<Union>(cons(succ(\<Union>(z)),z)) = succ(\<Union>(z))" |
100 by fast |
100 by fast |
101 |
101 |
102 lemma Un_Ord_disj: "[| Ord(i); Ord(j) |] ==> i Un j = i | i Un j = j" |
102 lemma Un_Ord_disj: "[| Ord(i); Ord(j) |] ==> i \<union> j = i | i \<union> j = j" |
103 by (fast dest!: le_imp_subset elim: Ord_linear_le) |
103 by (fast dest!: le_imp_subset elim: Ord_linear_le) |
104 |
104 |
105 lemma Union_eq_Un: "x \<in> X ==> Union(X) = x Un Union(X-{x})" |
105 lemma Union_eq_Un: "x \<in> X ==> \<Union>(X) = x \<union> \<Union>(X-{x})" |
106 by fast |
106 by fast |
107 |
107 |
108 lemma Union_in_lemma [rule_format]: |
108 lemma Union_in_lemma [rule_format]: |
109 "n \<in> nat ==> \<forall>z. (\<forall>y \<in> z. Ord(y)) & z\<approx>n & z\<noteq>0 --> Union(z) \<in> z" |
109 "n \<in> nat ==> \<forall>z. (\<forall>y \<in> z. Ord(y)) & z\<approx>n & z\<noteq>0 \<longrightarrow> \<Union>(z) \<in> z" |
110 apply (induct_tac "n") |
110 apply (induct_tac "n") |
111 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) |
111 apply (fast dest!: eqpoll_imp_lepoll [THEN lepoll_0_is_0]) |
112 apply (intro allI impI) |
112 apply (intro allI impI) |
113 apply (erule natE) |
113 apply (erule natE) |
114 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1] |
114 apply (fast dest!: eqpoll_1_iff_singleton [THEN iffD1] |
124 apply (drule bspec) |
124 apply (drule bspec) |
125 apply (erule Diff_subset [THEN subsetD]) |
125 apply (erule Diff_subset [THEN subsetD]) |
126 apply (drule Un_Ord_disj, assumption, auto) |
126 apply (drule Un_Ord_disj, assumption, auto) |
127 done |
127 done |
128 |
128 |
129 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> Union(z) \<in> z" |
129 lemma Union_in: "[| \<forall>x \<in> z. Ord(x); z\<approx>n; z\<noteq>0; n \<in> nat |] ==> \<Union>(z) \<in> z" |
130 by (blast intro: Union_in_lemma) |
130 by (blast intro: Union_in_lemma) |
131 |
131 |
132 lemma succ_Union_in_x: |
132 lemma succ_Union_in_x: |
133 "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(Union(z)) \<in> x" |
133 "[| InfCard(x); z \<in> Pow(x); z\<approx>n; n \<in> nat |] ==> succ(\<Union>(z)) \<in> x" |
134 apply (rule Limit_has_succ [THEN ltE]) |
134 apply (rule Limit_has_succ [THEN ltE]) |
135 prefer 3 apply assumption |
135 prefer 3 apply assumption |
136 apply (erule InfCard_is_Limit) |
136 apply (erule InfCard_is_Limit) |
137 apply (case_tac "z=0") |
137 apply (case_tac "z=0") |
138 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]) |
138 apply (simp, fast intro!: InfCard_is_Limit [THEN Limit_has_0]) |
143 |
143 |
144 lemma succ_lepoll_succ_succ: |
144 lemma succ_lepoll_succ_succ: |
145 "[| InfCard(x); n \<in> nat |] |
145 "[| InfCard(x); n \<in> nat |] |
146 ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}" |
146 ==> {y \<in> Pow(x). y\<approx>succ(n)} \<lesssim> {y \<in> Pow(x). y\<approx>succ(succ(n))}" |
147 apply (unfold lepoll_def) |
147 apply (unfold lepoll_def) |
148 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(Union(z)), z)" |
148 apply (rule_tac x = "\<lambda>z \<in> {y\<in>Pow(x). y\<approx>succ(n)}. cons(succ(\<Union>(z)), z)" |
149 in exI) |
149 in exI) |
150 apply (rule_tac d = "%z. z-{Union (z) }" in lam_injective) |
150 apply (rule_tac d = "%z. z-{\<Union>(z) }" in lam_injective) |
151 apply (blast intro!: succ_Union_in_x succ_Union_not_mem |
151 apply (blast intro!: succ_Union_in_x succ_Union_not_mem |
152 intro: cons_eqpoll_succ Ord_in_Ord |
152 intro: cons_eqpoll_succ Ord_in_Ord |
153 dest!: InfCard_is_Card [THEN Card_is_Ord]) |
153 dest!: InfCard_is_Card [THEN Card_is_Ord]) |
154 apply (simp only: Union_cons_eq_succ_Union) |
154 apply (simp only: Union_cons_eq_succ_Union) |
155 apply (rule cons_Diff_eq) |
155 apply (rule cons_Diff_eq) |