Theory Complete_Non_Orders.Continuity
theory Continuity
imports Complete_Relations
begin
subsection ‹Scott Continuity, $\omega$-Continuity›
text ‹In this Section, we formalize Scott continuity and $\omega$-continuity.
We then prove that a Scott continuous map is $\omega$-continuous and that an $\omega$-continuous
map is ``nearly'' monotone.›
definition continuous (‹_-continuous› [1000]1000) where
"𝒞-continuous A (⊑) B (⊴) f ≡
f ` A ⊆ B ∧
(∀X s. 𝒞 X (⊑) ⟶ X ≠ {} ⟶ X ⊆ A ⟶ extreme_bound A (⊑) X s ⟶ extreme_bound B (⊴) (f`X) (f s))"
for leA (infix ‹⊑› 50) and leB (infix ‹⊴› 50)
lemmas continuousI[intro?] =
continuous_def[unfolded atomize_eq, THEN iffD2, unfolded conj_imp_eq_imp_imp, rule_format]
lemmas continuousE =
continuous_def[unfolded atomize_eq, THEN iffD1, elim_format, unfolded conj_imp_eq_imp_imp, rule_format]
lemma
fixes prec_eq (infix ‹≼› 50) and less_eq (infix ‹⊑› 50)
assumes "𝒞-continuous I (≼) A (⊑) f"
shows continuous_carrierD[dest]: "f ` I ⊆ A"
and continuousD: "𝒞 X (≼) ⟹ X ≠ {} ⟹ X ⊆ I ⟹ extreme_bound I (≼) X b ⟹ extreme_bound A (⊑) (f ` X) (f b)"
using assms by (auto elim!: continuousE)
lemma continuous_comp:
fixes leA (infix ‹⊑⇩A› 50) and leB (infix ‹⊑⇩B› 50) and leC (infix ‹⊑⇩C› 50)
assumes KfL: "∀X ⊆ A. 𝒦 X (⊑⇩A) ⟶ ℒ (f ` X) (⊑⇩B)"
assumes f: "𝒦-continuous A (⊑⇩A) B (⊑⇩B) f" and g: "ℒ-continuous B (⊑⇩B) C (⊑⇩C) g"
shows "𝒦-continuous A (⊑⇩A) C (⊑⇩C) (g ∘ f)"
apply (intro continuousI)
proof -
from f g have fAB: "f ` A ⊆ B" and gBC: "g ` B ⊆ C" by auto
then show "(g ∘ f) ` A ⊆ C" by auto
fix X s
assume XA: "X ⊆ A" and X0: "X ≠ {}" and XK: "𝒦 X (⊑⇩A)" and Xs: "extreme_bound A (⊑⇩A) X s"
from fAB XA have fXB: "f ` X ⊆ B" by auto
from X0 have fX0: "f ` X ≠ {}" by auto
from KfL XA XK have fXL: "ℒ (f ` X) (⊑⇩B)" by auto
from continuousD[OF f XK X0 XA Xs]
have "extreme_bound B (⊑⇩B) (f ` X) (f s)".
from continuousD[OF g fXL fX0 fXB this]
show "extreme_bound C (⊑⇩C) ((g∘f)`X) ((g∘f) s)" by (auto simp: image_comp)
qed
lemma continuous_comp_top:
fixes leA (infix ‹⊑⇩A› 50) and leB (infix ‹⊑⇩B› 50) and leC (infix ‹⊑⇩C› 50)
assumes f: "𝒦-continuous A (⊑⇩A) B (⊑⇩B) f" and g: "⊤-continuous B (⊑⇩B) C (⊑⇩C) g"
shows "𝒦-continuous A (⊑⇩A) C (⊑⇩C) (g ∘ f)"
by (rule continuous_comp[OF _ f g], auto)
lemma id_continuous:
fixes leA (infix ‹⊑⇩A› 50)
shows "𝒦-continuous A (⊑⇩A) A (⊑⇩A) (λx. x)"
by (auto intro: continuousI)
lemma cst_continuous:
fixes leA (infix ‹⊑⇩A› 50) and leB (infix ‹⊑⇩B› 50)
assumes "b ∈ B" and bb: "b ⊑⇩B b"
shows "𝒦-continuous A (⊑⇩A) B (⊑⇩B) (λx. b)"
apply (intro continuousI)
using assms(1) apply auto
using assms extreme_bound_singleton_refl[of B "(⊑⇩B)" b] by blast
lemma continuous_cmono:
assumes CD: "𝒞 ≤ 𝒟" shows "𝒟-continuous ≤ 𝒞-continuous"
proof (safe intro!: le_funI le_boolI)
fix I A f and prec_eq (infix ‹≼› 50) and less_eq (infix ‹⊑› 50)
assume cont: "𝒟-continuous I (≼) A (⊑) f"
show "𝒞-continuous I (≼) A (⊑) f"
proof (rule continuousI)
from cont show "f ` I ⊆ A" by auto
fix X s assume X: "𝒞 X (≼)" and X0: "X ≠ {}" and XI: "X ⊆ I" and Xs: "extreme_bound I (≼) X s"
from CD X have "𝒟 X (≼)" by auto
from continuousD[OF cont, OF this X0 XI Xs]
show "extreme_bound A (⊑) (f ` X) (f s)".
qed
qed
context
fixes prec_eq :: "'i ⇒ 'i ⇒ bool" (infix ‹≼› 50) and less_eq :: "'a ⇒ 'a ⇒ bool" (infix ‹⊑› 50)
begin
lemma continuous_subclass:
assumes CD: "∀X⊆I. X ≠ {} ⟶ 𝒞 X (≼) ⟶ 𝒟 X (≼)" and cont: "𝒟-continuous I (≼) A (⊑) f"
shows "𝒞-continuous I (≼) A (⊑) f"
using cont by (auto simp: continuous_def CD[rule_format])
lemma chain_continuous_imp_well_continuous:
assumes cont: "connex-continuous I (≼) A (⊑) f"
shows "well_related_set-continuous I (≼) A (⊑) f"
by (rule continuous_subclass[OF _ cont], auto simp: well_related_set.connex)
lemma well_continuous_imp_omega_continous:
assumes cont: "well_related_set-continuous I (≼) A (⊑) f"
shows "omega_chain-continuous I (≼) A (⊑) f"
by (rule continuous_subclass[OF _ cont], auto simp: omega_chain_imp_well_related)
end
abbreviation "scott_continuous I (≼) ≡ directed_set-continuous I (≼)"
for prec_eq (infix ‹≼› 50)
lemma scott_continuous_imp_well_continuous:
fixes prec_eq :: "'i ⇒ 'i ⇒ bool" (infix ‹≼› 50) and less_eq :: "'a ⇒ 'a ⇒ bool" (infix ‹⊑› 50)
assumes cont: "scott_continuous I (≼) A (⊑) f"
shows "well_related_set-continuous I (≼) A (⊑) f"
by (rule continuous_subclass[OF _ cont], auto simp: well_related_set.directed_set)
lemmas scott_continuous_imp_omega_continuous =
scott_continuous_imp_well_continuous[THEN well_continuous_imp_omega_continous]
subsubsection ‹Continuity implies monotonicity›
lemma continuous_imp_mono_refl:
fixes prec_eq (infix ‹≼› 50) and less_eq (infix ‹⊑› 50)
assumes cont: "𝒞-continuous I (≼) A (⊑) f" and xyC: "𝒞 {x,y} (≼)"
and xy: "x ≼ y" and yy: "y ≼ y"
and x: "x ∈ I" and y: "y ∈ I"
shows "f x ⊑ f y"
proof-
have fboy: "extreme_bound A (⊑) (f ` {x,y}) (f y)"
proof (intro continuousD[OF cont] xyC)
from x y show CI: "{x,y} ⊆ I" by auto
show Cy: "extreme_bound I (≼) {x,y} y" using xy yy x y by auto
qed auto
then show ?thesis by auto
qed
lemma omega_continuous_imp_mono_refl:
fixes prec_eq (infix ‹≼› 50) and less_eq (infix ‹⊑› 50)
assumes cont: "omega_chain-continuous I (≼) A (⊑) f"
and xx: "x ≼ x" and xy: "x ≼ y" and yy: "y ≼ y"
and x: "x ∈ I" and y: "y ∈ I"
shows "f x ⊑ f y"
apply (rule continuous_imp_mono_refl[OF cont, OF pair_omega_chain])
using assms by auto
context reflexive begin
lemma continuous_imp_monotone_on:
fixes leB (infix ‹⊴› 50)
assumes cont: "𝒞-continuous A (⊑) B (⊴) f"
and II: "∀i ∈ A. ∀ j ∈ A. i ⊑ j ⟶ 𝒞 {i,j} (⊑)"
shows "monotone_on A (⊑) (⊴) f"
proof-
show ?thesis
apply (intro monotone_onI continuous_imp_mono_refl[OF cont])
using II by auto
qed
lemma well_complete_imp_monotone_on:
fixes leB (infix ‹⊴› 50)
assumes cont: "well_related_set-continuous A (⊑) B (⊴) f"
shows "monotone_on A (⊑) (⊴) f"
by (auto intro!: continuous_imp_monotone_on cont pair_well_related)
end
end