Ayberk Tosun, 12 September 2023
Split out from the `CompactRegular` module.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan hiding (𝟚)
open import UF.PropTrunc
open import UF.FunExt
open import UF.Size
module Locales.ScottContinuity (pt : propositional-truncations-exist)
(fe : Fun-Ext)
(sr : Set-Replacement pt) where
open import Locales.Frame pt fe
open import Slice.Family
open import UF.SubtypeClassifier
open import UF.Logic
open AllCombinators pt fe
open PropositionalTruncation pt
\end{code}
\begin{code}
∨-is-scott-continuous : (F : Frame 𝓤 𝓥 𝓦)
→ (U : ⟨ F ⟩)
→ is-scott-continuous F F (λ - → U ∨[ F ] -) holds
∨-is-scott-continuous F U S dir = β , γ
where
open PosetNotation (poset-of F) using (_≤_)
open PosetReasoning (poset-of F)
open Joins _≤_
β : ((U ∨[ F ] (⋁[ F ] S)) is-an-upper-bound-of ⁅ U ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆) holds
β i = ∨[ F ]-right-monotone (⋁[ F ]-upper S i)
γ : (Ɐ (U′ , _) ꞉ upper-bound ⁅ U ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ ,
((U ∨[ F ] (⋁[ F ] S)) ≤ U′)) holds
γ (u′ , p) = ∨[ F ]-least γ₁ γ₂
where
δ₁ : index S → (U ≤ u′) holds
δ₁ i = U ≤⟨ ∨[ F ]-upper₁ U (S [ i ]) ⟩
U ∨[ F ] (S [ i ]) ≤⟨ p i ⟩
u′ ■
γ₁ : (U ≤[ poset-of F ] u′) holds
γ₁ = ∥∥-rec (holds-is-prop (U ≤[ poset-of F ] u′)) δ₁ (pr₁ dir)
γ₂ : ((⋁[ F ] S) ≤[ poset-of F ] u′) holds
γ₂ = ⋁[ F ]-least S (u′ , δ₂)
where
δ₂ : (u′ is-an-upper-bound-of S) holds
δ₂ i = S [ i ] ≤⟨ ∨[ F ]-upper₂ U (S [ i ]) ⟩
U ∨[ F ] (S [ i ]) ≤⟨ p i ⟩
u′ ■
\end{code}
\begin{code}
∨-is-scott-continuous-eq : (F : Frame 𝓤 𝓥 𝓦)
→ (U : ⟨ F ⟩)
→ (S : Fam 𝓦 ⟨ F ⟩)
→ is-directed F S holds
→ U ∨[ F ] (⋁[ F ] S) = ⋁[ F ] ⁅ U ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆
∨-is-scott-continuous-eq F U S dir =
⋁[ F ]-unique ⁅ U ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ (U ∨[ F ] (⋁[ F ] S)) (γ , δ)
where
γ = pr₁ ((∨-is-scott-continuous F U) S dir)
δ = pr₂ ((∨-is-scott-continuous F U) S dir)
\end{code}