equal
deleted
inserted
replaced
16 "chain M == !i. M i \<le> M(Suc i)" |
16 "chain M == !i. M i \<le> M(Suc i)" |
17 continuous :: "('a::order \<Rightarrow> 'a::order) \<Rightarrow> bool" |
17 continuous :: "('a::order \<Rightarrow> 'a::order) \<Rightarrow> bool" |
18 "continuous F == !M. chain M \<longrightarrow> F(SUP i. M i) = (SUP i. F(M i))" |
18 "continuous F == !M. chain M \<longrightarrow> F(SUP i. M i) = (SUP i. F(M i))" |
19 |
19 |
20 abbreviation |
20 abbreviation |
21 bot :: "'a::order" |
21 bot :: "'a::order" where |
22 "bot == Sup {}" |
22 "bot == Sup {}" |
23 |
23 |
24 lemma SUP_nat_conv: |
24 lemma SUP_nat_conv: |
25 "(SUP n::nat. M n::'a::comp_lat) = join (M 0) (SUP n. M(Suc n))" |
25 "(SUP n::nat. M n::'a::comp_lat) = join (M 0) (SUP n. M(Suc n))" |
26 apply(rule order_antisym) |
26 apply(rule order_antisym) |
27 apply(rule SUP_leI) |
27 apply(rule SUP_leI) |
89 |
89 |
90 |
90 |
91 subsection "Chains" |
91 subsection "Chains" |
92 |
92 |
93 definition |
93 definition |
94 up_chain :: "(nat => 'a set) => bool" |
94 up_chain :: "(nat => 'a set) => bool" where |
95 "up_chain F = (\<forall>i. F i \<subseteq> F (Suc i))" |
95 "up_chain F = (\<forall>i. F i \<subseteq> F (Suc i))" |
96 |
96 |
97 lemma up_chainI: "(!!i. F i \<subseteq> F (Suc i)) ==> up_chain F" |
97 lemma up_chainI: "(!!i. F i \<subseteq> F (Suc i)) ==> up_chain F" |
98 by (simp add: up_chain_def) |
98 by (simp add: up_chain_def) |
99 |
99 |
111 apply (blast dest: up_chain_less_mono) |
111 apply (blast dest: up_chain_less_mono) |
112 done |
112 done |
113 |
113 |
114 |
114 |
115 definition |
115 definition |
116 down_chain :: "(nat => 'a set) => bool" |
116 down_chain :: "(nat => 'a set) => bool" where |
117 "down_chain F = (\<forall>i. F (Suc i) \<subseteq> F i)" |
117 "down_chain F = (\<forall>i. F (Suc i) \<subseteq> F i)" |
118 |
118 |
119 lemma down_chainI: "(!!i. F (Suc i) \<subseteq> F i) ==> down_chain F" |
119 lemma down_chainI: "(!!i. F (Suc i) \<subseteq> F i) ==> down_chain F" |
120 by (simp add: down_chain_def) |
120 by (simp add: down_chain_def) |
121 |
121 |
135 |
135 |
136 |
136 |
137 subsection "Continuity" |
137 subsection "Continuity" |
138 |
138 |
139 definition |
139 definition |
140 up_cont :: "('a set => 'a set) => bool" |
140 up_cont :: "('a set => 'a set) => bool" where |
141 "up_cont f = (\<forall>F. up_chain F --> f (\<Union>(range F)) = \<Union>(f ` range F))" |
141 "up_cont f = (\<forall>F. up_chain F --> f (\<Union>(range F)) = \<Union>(f ` range F))" |
142 |
142 |
143 lemma up_contI: |
143 lemma up_contI: |
144 "(!!F. up_chain F ==> f (\<Union>(range F)) = \<Union>(f ` range F)) ==> up_cont f" |
144 "(!!F. up_chain F ==> f (\<Union>(range F)) = \<Union>(f ` range F)) ==> up_cont f" |
145 apply (unfold up_cont_def) |
145 apply (unfold up_cont_def) |
162 apply (auto simp add: nat_not_singleton) |
162 apply (auto simp add: nat_not_singleton) |
163 done |
163 done |
164 |
164 |
165 |
165 |
166 definition |
166 definition |
167 down_cont :: "('a set => 'a set) => bool" |
167 down_cont :: "('a set => 'a set) => bool" where |
168 "down_cont f = |
168 "down_cont f = |
169 (\<forall>F. down_chain F --> f (Inter (range F)) = Inter (f ` range F))" |
169 (\<forall>F. down_chain F --> f (Inter (range F)) = Inter (f ` range F))" |
170 |
170 |
171 lemma down_contI: |
171 lemma down_contI: |
172 "(!!F. down_chain F ==> f (Inter (range F)) = Inter (f ` range F)) ==> |
172 "(!!F. down_chain F ==> f (Inter (range F)) = Inter (f ` range F)) ==> |
192 |
192 |
193 |
193 |
194 subsection "Iteration" |
194 subsection "Iteration" |
195 |
195 |
196 definition |
196 definition |
197 up_iterate :: "('a set => 'a set) => nat => 'a set" |
197 up_iterate :: "('a set => 'a set) => nat => 'a set" where |
198 "up_iterate f n = (f^n) {}" |
198 "up_iterate f n = (f^n) {}" |
199 |
199 |
200 lemma up_iterate_0 [simp]: "up_iterate f 0 = {}" |
200 lemma up_iterate_0 [simp]: "up_iterate f 0 = {}" |
201 by (simp add: up_iterate_def) |
201 by (simp add: up_iterate_def) |
202 |
202 |
244 apply (erule UNION_up_iterate_is_fp [symmetric]) |
244 apply (erule UNION_up_iterate_is_fp [symmetric]) |
245 done |
245 done |
246 |
246 |
247 |
247 |
248 definition |
248 definition |
249 down_iterate :: "('a set => 'a set) => nat => 'a set" |
249 down_iterate :: "('a set => 'a set) => nat => 'a set" where |
250 "down_iterate f n = (f^n) UNIV" |
250 "down_iterate f n = (f^n) UNIV" |
251 |
251 |
252 lemma down_iterate_0 [simp]: "down_iterate f 0 = UNIV" |
252 lemma down_iterate_0 [simp]: "down_iterate f 0 = UNIV" |
253 by (simp add: down_iterate_def) |
253 by (simp add: down_iterate_def) |
254 |
254 |