equal
deleted
inserted
replaced
211 |
211 |
212 lemmas cont2cont_fst [simp, cont2cont] = cont_compose [OF cont_fst] |
212 lemmas cont2cont_fst [simp, cont2cont] = cont_compose [OF cont_fst] |
213 |
213 |
214 lemmas cont2cont_snd [simp, cont2cont] = cont_compose [OF cont_snd] |
214 lemmas cont2cont_snd [simp, cont2cont] = cont_compose [OF cont_snd] |
215 |
215 |
216 lemma cont2cont_prod_case: |
216 lemma cont2cont_case_prod: |
217 assumes f1: "\<And>a b. cont (\<lambda>x. f x a b)" |
217 assumes f1: "\<And>a b. cont (\<lambda>x. f x a b)" |
218 assumes f2: "\<And>x b. cont (\<lambda>a. f x a b)" |
218 assumes f2: "\<And>x b. cont (\<lambda>a. f x a b)" |
219 assumes f3: "\<And>x a. cont (\<lambda>b. f x a b)" |
219 assumes f3: "\<And>x a. cont (\<lambda>b. f x a b)" |
220 assumes g: "cont (\<lambda>x. g x)" |
220 assumes g: "cont (\<lambda>x. g x)" |
221 shows "cont (\<lambda>x. case g x of (a, b) \<Rightarrow> f x a b)" |
221 shows "cont (\<lambda>x. case g x of (a, b) \<Rightarrow> f x a b)" |
231 assumes f1: "\<And>y. cont (\<lambda>x. f (x, y))" |
231 assumes f1: "\<And>y. cont (\<lambda>x. f (x, y))" |
232 assumes f2: "\<And>x. cont (\<lambda>y. f (x, y))" |
232 assumes f2: "\<And>x. cont (\<lambda>y. f (x, y))" |
233 shows "cont f" |
233 shows "cont f" |
234 proof - |
234 proof - |
235 have "cont (\<lambda>(x, y). f (x, y))" |
235 have "cont (\<lambda>(x, y). f (x, y))" |
236 by (intro cont2cont_prod_case f1 f2 cont2cont) |
236 by (intro cont2cont_case_prod f1 f2 cont2cont) |
237 thus "cont f" |
237 thus "cont f" |
238 by (simp only: split_eta) |
238 by (simp only: split_eta) |
239 qed |
239 qed |
240 |
240 |
241 lemma prod_cont_iff: |
241 lemma prod_cont_iff: |
244 apply (erule cont_compose [OF _ cont_pair1]) |
244 apply (erule cont_compose [OF _ cont_pair1]) |
245 apply (erule cont_compose [OF _ cont_pair2]) |
245 apply (erule cont_compose [OF _ cont_pair2]) |
246 apply (simp only: prod_contI) |
246 apply (simp only: prod_contI) |
247 done |
247 done |
248 |
248 |
249 lemma cont2cont_prod_case' [simp, cont2cont]: |
249 lemma cont2cont_case_prod' [simp, cont2cont]: |
250 assumes f: "cont (\<lambda>p. f (fst p) (fst (snd p)) (snd (snd p)))" |
250 assumes f: "cont (\<lambda>p. f (fst p) (fst (snd p)) (snd (snd p)))" |
251 assumes g: "cont (\<lambda>x. g x)" |
251 assumes g: "cont (\<lambda>x. g x)" |
252 shows "cont (\<lambda>x. prod_case (f x) (g x))" |
252 shows "cont (\<lambda>x. case_prod (f x) (g x))" |
253 using assms by (simp add: cont2cont_prod_case prod_cont_iff) |
253 using assms by (simp add: cont2cont_case_prod prod_cont_iff) |
254 |
254 |
255 text {* The simple version (due to Joachim Breitner) is needed if |
255 text {* The simple version (due to Joachim Breitner) is needed if |
256 either element type of the pair is not a cpo. *} |
256 either element type of the pair is not a cpo. *} |
257 |
257 |
258 lemma cont2cont_split_simple [simp, cont2cont]: |
258 lemma cont2cont_split_simple [simp, cont2cont]: |
260 shows "cont (\<lambda>x. case p of (a, b) \<Rightarrow> f x a b)" |
260 shows "cont (\<lambda>x. case p of (a, b) \<Rightarrow> f x a b)" |
261 using assms by (cases p) auto |
261 using assms by (cases p) auto |
262 |
262 |
263 text {* Admissibility of predicates on product types. *} |
263 text {* Admissibility of predicates on product types. *} |
264 |
264 |
265 lemma adm_prod_case [simp]: |
265 lemma adm_case_prod [simp]: |
266 assumes "adm (\<lambda>x. P x (fst (f x)) (snd (f x)))" |
266 assumes "adm (\<lambda>x. P x (fst (f x)) (snd (f x)))" |
267 shows "adm (\<lambda>x. case f x of (a, b) \<Rightarrow> P x a b)" |
267 shows "adm (\<lambda>x. case f x of (a, b) \<Rightarrow> P x a b)" |
268 unfolding prod_case_beta using assms . |
268 unfolding case_prod_beta using assms . |
269 |
269 |
270 subsection {* Compactness and chain-finiteness *} |
270 subsection {* Compactness and chain-finiteness *} |
271 |
271 |
272 lemma fst_below_iff: "fst (x::'a \<times> 'b) \<sqsubseteq> y \<longleftrightarrow> x \<sqsubseteq> (y, snd x)" |
272 lemma fst_below_iff: "fst (x::'a \<times> 'b) \<sqsubseteq> y \<longleftrightarrow> x \<sqsubseteq> (y, snd x)" |
273 unfolding below_prod_def by simp |
273 unfolding below_prod_def by simp |