Tom de Jong, 5 May 2020 - 10 May 2020
We construct bilimits of diagrams indexed by directed posets in the category of
dcpos as objects and embedding-projection pairs as morphisms.
This formalization is based on Scott's "Continuous lattices"
(doi:10.1007/BFB0073967), specifically pages 124--126, but generalizes it from
ℕ-indexed diagrams to diagrams indexed by a directed poset.
We specialize to ℕ-indexed diagrams in Sequential.lagda.
We also prove that taking the bilmit preserves local smallness and that it is
closed under structural continuity/algebraicity and having a small (compact) basis.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
\end{code}
We use the flag --lossy-unification to speed up the type-checking.
This flag was kindly implemented by Andrea Vezzosi upon request.
Documentation for the flag (written by Andrea Vezzosi) can be found here:
https://agda.readthedocs.io/en/latest/language/lossy-unification.html
The most important takeaway from the documentation is that the flag is sound:
"[...] if Agda accepts code with the flag enabled it should also accept it
without the flag (with enough resources, and possibly needing extra type
annotations)."
A related issue (originally opened by Wolfram Kahl in 2015) can be found here:
https://github.com/agda/agda/issues/1625
\begin{code}
open import MLTT.Spartan hiding (J)
open import UF.FunExt
open import UF.PropTrunc
open import UF.Sets
open import UF.Sets-Properties
module DomainTheory.Bilimits.Directed
(pt : propositional-truncations-exist)
(fe : Fun-Ext)
(𝓥 : Universe)
(𝓤 𝓣 : Universe)
where
open PropositionalTruncation pt
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.Hedberg
open import UF.ImageAndSurjection pt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import OrderedTypes.Poset fe
open import DomainTheory.Basics.Dcpo pt fe 𝓥
open import DomainTheory.Basics.Exponential pt fe 𝓥
open import DomainTheory.Basics.Miscelanea pt fe 𝓥
open import DomainTheory.Basics.WayBelow pt fe 𝓥
open import DomainTheory.BasesAndContinuity.Bases pt fe 𝓥
open import DomainTheory.BasesAndContinuity.Continuity pt fe 𝓥
module Diagram
{I : 𝓥 ̇ }
(_⊑_ : I → I → 𝓦 ̇ )
(⊑-refl : {i : I} → i ⊑ i)
(⊑-trans : {i j k : I} → i ⊑ j → j ⊑ k → i ⊑ k)
(⊑-prop-valued : (i j : I) → is-prop (i ⊑ j))
(I-inhabited : ∥ I ∥)
(I-semidirected : (i j : I) → ∃ k ꞉ I , i ⊑ k × j ⊑ k)
(𝓓 : I → DCPO {𝓤} {𝓣})
(ε : {i j : I} → i ⊑ j → ⟨ 𝓓 i ⟩ → ⟨ 𝓓 j ⟩)
(π : {i j : I} → i ⊑ j → ⟨ 𝓓 j ⟩ → ⟨ 𝓓 i ⟩)
(επ-deflation : {i j : I} (l : i ⊑ j) (x : ⟨ 𝓓 j ⟩)
→ ε l (π l x) ⊑⟨ 𝓓 j ⟩ x )
(ε-section-of-π : {i j : I} (l : i ⊑ j) → π l ∘ ε l ∼ id )
(ε-is-continuous : {i j : I} (l : i ⊑ j)
→ is-continuous (𝓓 i) (𝓓 j) (ε {i} {j} l))
(π-is-continuous : {i j : I} (l : i ⊑ j)
→ is-continuous (𝓓 j) (𝓓 i) (π {i} {j} l))
(ε-id : (i : I ) → ε (⊑-refl {i}) ∼ id)
(π-id : (i : I ) → π (⊑-refl {i}) ∼ id)
(ε-comp : {i j k : I} (l : i ⊑ j) (m : j ⊑ k)
→ ε m ∘ ε l ∼ ε (⊑-trans l m))
(π-comp : {i j k : I} (l : i ⊑ j) (m : j ⊑ k)
→ π l ∘ π m ∼ π (⊑-trans l m))
where
𝓓∞-carrier : 𝓥 ⊔ 𝓤 ⊔ 𝓦 ̇
𝓓∞-carrier =
Σ σ ꞉ ((i : I) → ⟨ 𝓓 i ⟩) , ((i j : I) (l : i ⊑ j) → π l (σ j) = σ i)
⦅_⦆ : 𝓓∞-carrier → (i : I) → ⟨ 𝓓 i ⟩
⦅_⦆ = pr₁
π-equality : (σ : 𝓓∞-carrier) {i j : I} (l : i ⊑ j) → π l (⦅ σ ⦆ j) = ⦅ σ ⦆ i
π-equality σ {i} {j} l = pr₂ σ i j l
to-𝓓∞-= : {σ τ : 𝓓∞-carrier} → ((i : I) → ⦅ σ ⦆ i = ⦅ τ ⦆ i) → σ = τ
to-𝓓∞-= h =
to-subtype-= (λ σ → Π₃-is-prop fe (λ i j l → sethood (𝓓 i))) (dfunext fe h)
family-at-ith-component : {𝓐 : 𝓥 ̇ } (α : 𝓐 → 𝓓∞-carrier) (i : I) → 𝓐 → ⟨ 𝓓 i ⟩
family-at-ith-component α i a = ⦅ α a ⦆ i
_≼_ : 𝓓∞-carrier → 𝓓∞-carrier → 𝓥 ⊔ 𝓣 ̇
σ ≼ τ = (i : I) → ⦅ σ ⦆ i ⊑⟨ 𝓓 i ⟩ ⦅ τ ⦆ i
family-at-ith-component-is-directed : {𝓐 : 𝓥 ̇ } (α : 𝓐 → 𝓓∞-carrier)
(δ : is-directed _≼_ α) (i : I)
→ is-Directed (𝓓 i)
(family-at-ith-component α i)
family-at-ith-component-is-directed {𝓐} α δ i =
(inhabited-if-directed _≼_ α δ) , γ
where
β : (i : I) → 𝓐 → ⟨ 𝓓 i ⟩
β = family-at-ith-component α
γ : is-semidirected (underlying-order (𝓓 i)) (β i)
γ a₁ a₂ = ∥∥-functor g (semidirected-if-directed _≼_ α δ a₁ a₂)
where
g : (Σ a ꞉ 𝓐 , (α a₁ ≼ α a) × (α a₂ ≼ α a))
→ (Σ a ꞉ 𝓐 , (β i a₁ ⊑⟨ 𝓓 i ⟩ β i a) × (β i a₂ ⊑⟨ 𝓓 i ⟩ β i a))
g (a , l₁ , l₂) = a , l₁ i , l₂ i
𝓓∞-∐ : {𝓐 : 𝓥 ̇ } (α : 𝓐 → 𝓓∞-carrier) (δ : is-directed _≼_ α) → 𝓓∞-carrier
𝓓∞-∐ {𝓐} α δ = (λ i → ∐ (𝓓 i) (δ' i)) , φ
where
β : (i : I) → 𝓐 → ⟨ 𝓓 i ⟩
β = family-at-ith-component α
δ' : (i : I) → is-Directed (𝓓 i) (β i)
δ' = family-at-ith-component-is-directed α δ
φ : (i j : I) (l : i ⊑ j) → π l (∐ (𝓓 j) (δ' j)) = ∐ (𝓓 i) (δ' i)
φ i j l = π l (∐ (𝓓 j) (δ' j)) =⟨ eq₁ ⟩
∐ (𝓓 i) {𝓐} {π l ∘ β j} δ₁ =⟨ eq₂ ⟩
∐ (𝓓 i) {𝓐} {β i} δ₂ =⟨ eq₃ ⟩
∐ (𝓓 i) {𝓐} {β i} (δ' i) ∎
where
δ₁ : is-Directed (𝓓 i) (π l ∘ β j)
δ₁ = image-is-directed' (𝓓 j) (𝓓 i) ((π l) , (π-is-continuous l)) (δ' j)
h : π l ∘ β j = β i
h = dfunext fe (λ a → π-equality (α a) l)
δ₂ : is-Directed (𝓓 i) (β i)
δ₂ = transport (is-Directed (𝓓 i)) h δ₁
eq₁ = continuous-∐-= (𝓓 j) (𝓓 i) ((π l) , (π-is-continuous l)) (δ' j)
eq₂ = ∐-family-= (𝓓 i) h δ₁
eq₃ = ∐-independent-of-directedness-witness (𝓓 i) δ₂ (δ' i)
𝓓∞-poset-axioms : PosetAxioms.poset-axioms _≼_
𝓓∞-poset-axioms = sl , pv , r , t , a
where
open PosetAxioms {𝓥 ⊔ 𝓤 ⊔ 𝓦} {𝓥 ⊔ 𝓣} {𝓓∞-carrier} _≼_
sl : is-set 𝓓∞-carrier
sl = subsets-of-sets-are-sets _ _
(Π-is-set fe (λ i → sethood (𝓓 i)))
(Π₃-is-prop fe (λ i j l → sethood (𝓓 i)))
pv : is-prop-valued
pv σ τ = Π-is-prop fe (λ i → prop-valuedness (𝓓 i) (⦅ σ ⦆ i) (⦅ τ ⦆ i))
r : is-reflexive
r σ i = reflexivity (𝓓 i) (⦅ σ ⦆ i)
t : is-transitive
t σ τ ρ l k i = transitivity (𝓓 i) (⦅ σ ⦆ i) (⦅ τ ⦆ i) (⦅ ρ ⦆ i) (l i) (k i)
a : is-antisymmetric
a σ τ l k =
to-𝓓∞-= (λ i → antisymmetry (𝓓 i) (⦅ σ ⦆ i) (⦅ τ ⦆ i) (l i) (k i))
𝓓∞ : DCPO {𝓥 ⊔ 𝓤 ⊔ 𝓦} {𝓥 ⊔ 𝓣}
𝓓∞ = (𝓓∞-carrier , _≼_ , 𝓓∞-poset-axioms , dc)
where
dc : is-directed-complete _≼_
dc 𝓐 α δ = (𝓓∞-∐ α δ) , ub , lb-of-ubs
where
δ' : (i : I) → is-Directed (𝓓 i) (family-at-ith-component α i)
δ' = family-at-ith-component-is-directed α δ
ub : (a : 𝓐) → α a ≼ (𝓓∞-∐ α δ)
ub a i = ∐-is-upperbound (𝓓 i) (δ' i) a
lb-of-ubs : is-lowerbound-of-upperbounds _≼_ (𝓓∞-∐ α δ) α
lb-of-ubs τ ub i = ∐-is-lowerbound-of-upperbounds (𝓓 i) (δ' i) (⦅ τ ⦆ i)
(λ a → ub a i)
π∞ : (i : I) → ⟨ 𝓓∞ ⟩ → ⟨ 𝓓 i ⟩
π∞ i (σ , _) = σ i
π∞-commutes-with-πs : (i j : I) (l : i ⊑ j) → π l ∘ π∞ j ∼ π∞ i
π∞-commutes-with-πs i j l σ = π-equality σ l
κ : {i j : I} → ⟨ 𝓓 i ⟩ → (Σ k ꞉ I , i ⊑ k × j ⊑ k) → ⟨ 𝓓 j ⟩
κ x (k , lᵢ , lⱼ) = π lⱼ (ε lᵢ x)
κ-wconstant : (i j : I) (x : ⟨ 𝓓 i ⟩) → wconstant (κ x)
κ-wconstant i j x (k , lᵢ , lⱼ) (k' , lᵢ' , lⱼ') =
∥∥-rec (sethood (𝓓 j)) γ (I-semidirected k k')
where
γ : (Σ m ꞉ I , k ⊑ m × k' ⊑ m)
→ κ x (k , lᵢ , lⱼ) = κ x (k' , lᵢ' , lⱼ')
γ (m , u , u') = π lⱼ (ε lᵢ x) =⟨ e₁ ⟩
π lⱼ (π u (ε u (ε lᵢ x))) =⟨ e₂ ⟩
π (⊑-trans lⱼ u) (ε u (ε lᵢ x)) =⟨ e₃ ⟩
π (⊑-trans lⱼ u) (ε (⊑-trans lᵢ u) x) =⟨ e₄ ⟩
π (⊑-trans lⱼ u) (ε (⊑-trans lᵢ' u') x) =⟨ e₅ ⟩
π (⊑-trans lⱼ u) (ε u' (ε lᵢ' x)) =⟨ e₆ ⟩
π (⊑-trans lⱼ' u') (ε u' (ε lᵢ' x)) =⟨ e₇ ⟩
π lⱼ' (π u' (ε u' (ε lᵢ' x))) =⟨ e₈ ⟩
π lⱼ' (ε lᵢ' x) ∎
where
e₁ = ap (π lⱼ) (ε-section-of-π u (ε lᵢ x) ⁻¹)
e₂ = π-comp lⱼ u (ε u (ε lᵢ x))
e₃ = ap (π (⊑-trans lⱼ u)) (ε-comp lᵢ u x)
e₄ = ap (π (⊑-trans lⱼ u)) (ap (λ - → ε - x)
(⊑-prop-valued i m (⊑-trans lᵢ u) (⊑-trans lᵢ' u')))
e₅ = ap (π (⊑-trans lⱼ u)) ((ε-comp lᵢ' u' x) ⁻¹)
e₆ = ap (λ - → π - _) (⊑-prop-valued j m (⊑-trans lⱼ u) (⊑-trans lⱼ' u'))
e₇ = (π-comp lⱼ' u' (ε u' (ε lᵢ' x))) ⁻¹
e₈ = ap (π lⱼ') (ε-section-of-π u' (ε lᵢ' x))
ρ : (i j : I) → ⟨ 𝓓 i ⟩ → ⟨ 𝓓 j ⟩
ρ i j x = pr₁ (wconstant-map-to-set-factors-through-truncation-of-domain
(sethood (𝓓 j)) (κ x) (κ-wconstant i j x))
(I-semidirected i j)
ρ-in-terms-of-κ : {i j k : I} (lᵢ : i ⊑ k) (lⱼ : j ⊑ k) (x : ⟨ 𝓓 i ⟩)
→ ρ i j x = κ x (k , lᵢ , lⱼ)
ρ-in-terms-of-κ {i} {j} {k} lᵢ lⱼ x =
ρ i j x =⟨ refl ⟩
ν (I-semidirected i j) =⟨ p ⟩
ν ∣ (k , lᵢ , lⱼ) ∣ =⟨ q ⟩
κ x (k , lᵢ , lⱼ) ∎
where
s : is-set ⟨ 𝓓 j ⟩
s = sethood (𝓓 j)
ω : wconstant (κ x)
ω = κ-wconstant i j x
φ : Σ r ꞉ ((∃ k' ꞉ I , i ⊑ k' × j ⊑ k') → ⟨ 𝓓 j ⟩) , κ x ∼ r ∘ ∣_∣
φ = wconstant-map-to-set-factors-through-truncation-of-domain s (κ x) ω
ν : (∃ k' ꞉ I , i ⊑ k' × j ⊑ k') → ⟨ 𝓓 j ⟩
ν = pr₁ φ
p = ap ν (∥∥-is-prop (I-semidirected i j) ∣ k , lᵢ , lⱼ ∣)
q = (pr₂ φ (k , lᵢ , lⱼ)) ⁻¹
ρ-is-continuous : (i j : I) → is-continuous (𝓓 i) (𝓓 j) (ρ i j)
ρ-is-continuous i j =
∥∥-rec (being-continuous-is-prop (𝓓 i) (𝓓 j) (ρ i j)) h (I-semidirected i j)
where
h : (Σ k ꞉ I , (i ⊑ k) × (j ⊑ k))
→ is-continuous (𝓓 i) (𝓓 j) (ρ i j)
h (k , u , v) = transport⁻¹ (is-continuous (𝓓 i) (𝓓 j)) e c
where
e : ρ i j = (λ x → κ x (k , u , v))
e = dfunext fe (ρ-in-terms-of-κ u v)
c : is-continuous (𝓓 i) (𝓓 j) (λ x → κ x (k , u , v))
c = ∘-is-continuous (𝓓 i) (𝓓 k) (𝓓 j) (ε u) (π v)
(ε-is-continuous u) (π-is-continuous v)
ε∞ : (i : I) → ⟨ 𝓓 i ⟩ → ⟨ 𝓓∞ ⟩
ε∞ i x = σ , φ
where
σ : (j : I) → ⟨ 𝓓 j ⟩
σ j = ρ i j x
φ : (j₁ j₂ : I) (l : j₁ ⊑ j₂) → π l (σ j₂) = σ j₁
φ j₁ j₂ l = ∥∥-rec (sethood (𝓓 j₁)) γ (I-semidirected i j₂)
where
γ : (Σ k ꞉ I , i ⊑ k × j₂ ⊑ k) → π l (σ j₂) = σ j₁
γ (k , lᵢ , l₂) = π l (σ j₂) =⟨ refl ⟩
π l (ρ i j₂ x) =⟨ e₁ ⟩
π l (κ x (k , lᵢ , l₂)) =⟨ refl ⟩
π l (π l₂ (ε lᵢ x)) =⟨ e₂ ⟩
π (⊑-trans l l₂) (ε lᵢ x) =⟨ refl ⟩
π (⊑-trans l l₂) (ε lᵢ x) =⟨ refl ⟩
κ x (k , lᵢ , ⊑-trans l l₂) =⟨ e₃ ⟩
ρ i j₁ x =⟨ refl ⟩
σ j₁ ∎
where
e₁ = ap (π l) (ρ-in-terms-of-κ lᵢ l₂ x)
e₂ = π-comp l l₂ (ε lᵢ x)
e₃ = (ρ-in-terms-of-κ lᵢ (⊑-trans l l₂) x) ⁻¹
ε∞-commutes-with-εs : (i j : I) (l : i ⊑ j) → ε∞ j ∘ ε l ∼ ε∞ i
ε∞-commutes-with-εs i j l x = to-𝓓∞-= γ
where
γ : (k : I) → ⦅ ε∞ j (ε l x) ⦆ k = ⦅ ε∞ i x ⦆ k
γ k = ∥∥-rec (sethood (𝓓 k)) g (I-semidirected j k)
where
g : (Σ m ꞉ I , j ⊑ m × k ⊑ m) → ⦅ ε∞ j (ε l x) ⦆ k = ⦅ ε∞ i x ⦆ k
g (m , lⱼ , lₖ) =
⦅ ε∞ j (ε l x) ⦆ k =⟨ refl ⟩
ρ j k (ε l x) =⟨ ρ-in-terms-of-κ lⱼ lₖ (ε l x) ⟩
κ (ε l x) (m , lⱼ , lₖ) =⟨ refl ⟩
π lₖ (ε lⱼ (ε l x)) =⟨ ap (π lₖ) (ε-comp l lⱼ x) ⟩
π lₖ (ε (⊑-trans l lⱼ) x) =⟨ refl ⟩
κ x (m , ⊑-trans l lⱼ , lₖ) =⟨ (ρ-in-terms-of-κ (⊑-trans l lⱼ) lₖ x) ⁻¹ ⟩
ρ i k x =⟨ refl ⟩
⦅ ε∞ i x ⦆ k ∎
ε∞-section-of-π∞ : {i : I} → π∞ i ∘ ε∞ i ∼ id
ε∞-section-of-π∞ {i} x =
π∞ i (ε∞ i x) =⟨ refl ⟩
⦅ ε∞ i x ⦆ i =⟨ refl ⟩
ρ i i x =⟨ ρ-in-terms-of-κ ⊑-refl ⊑-refl x ⟩
κ x (i , ⊑-refl , ⊑-refl) =⟨ refl ⟩
π ⊑-refl (ε ⊑-refl x) =⟨ ε-section-of-π ⊑-refl x ⟩
x ∎
ε∞π∞-deflation : {i : I} (σ : ⟨ 𝓓∞ ⟩) → ε∞ i (π∞ i σ) ⊑⟨ 𝓓∞ ⟩ σ
ε∞π∞-deflation {i} σ j =
∥∥-rec (prop-valuedness (𝓓 j) (⦅ ε∞ i (π∞ i σ) ⦆ j) (⦅ σ ⦆ j)) γ
(I-semidirected i j)
where
γ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ ⦅ ε∞ i (π∞ i σ) ⦆ j ⊑⟨ 𝓓 j ⟩ ⦅ σ ⦆ j
γ (k , lᵢ , lⱼ) = ⦅ ε∞ i (π∞ i σ) ⦆ j ⊑⟨ 𝓓 j ⟩[ reflexivity (𝓓 j) _ ]
ρ i j (⦅ σ ⦆ i) ⊑⟨ 𝓓 j ⟩[ u₁ ]
κ (⦅ σ ⦆ i) (k , lᵢ , lⱼ) ⊑⟨ 𝓓 j ⟩[ reflexivity (𝓓 j) _ ]
π lⱼ (ε lᵢ (⦅ σ ⦆ i)) ⊑⟨ 𝓓 j ⟩[ u₂ ]
π lⱼ (ε lᵢ (π lᵢ (⦅ σ ⦆ k))) ⊑⟨ 𝓓 j ⟩[ u₃ ]
π lⱼ (⦅ σ ⦆ k) ⊑⟨ 𝓓 j ⟩[ u₄ ]
⦅ σ ⦆ j ∎⟨ 𝓓 j ⟩
where
u₁ = =-to-⊑ (𝓓 j) (ρ-in-terms-of-κ lᵢ lⱼ (⦅ σ ⦆ i))
u₂ = =-to-⊒ (𝓓 j) (ap (π lⱼ ∘ ε lᵢ) (π-equality σ lᵢ))
u₃ = monotone-if-continuous (𝓓 k) (𝓓 j) (π lⱼ , π-is-continuous lⱼ)
(ε lᵢ (π lᵢ (⦅ σ ⦆ k))) (⦅ σ ⦆ k) (επ-deflation lᵢ (⦅ σ ⦆ k))
u₄ = =-to-⊑ (𝓓 j) (π-equality σ lⱼ)
π∞-is-continuous : (i : I) → is-continuous 𝓓∞ (𝓓 i) (π∞ i)
π∞-is-continuous i 𝓐 α δ = ub , lb-of-ubs
where
δ' : (j : I) → is-Directed (𝓓 j) (family-at-ith-component α j)
δ' = family-at-ith-component-is-directed α δ
ub : (a : 𝓐) → π∞ i (α a) ⊑⟨ 𝓓 i ⟩ π∞ i (∐ 𝓓∞ {𝓐} {α} δ)
ub a = π∞ i (α a) ⊑⟨ 𝓓 i ⟩[ reflexivity (𝓓 i) _ ]
⦅ α a ⦆ i ⊑⟨ 𝓓 i ⟩[ ∐-is-upperbound (𝓓 i) (δ' i) a ]
∐ (𝓓 i) (δ' i) ⊑⟨ 𝓓 i ⟩[ reflexivity (𝓓 i) _ ]
⦅ ∐ 𝓓∞ {𝓐} {α} δ ⦆ i ⊑⟨ 𝓓 i ⟩[ reflexivity (𝓓 i) _ ]
π∞ i (∐ 𝓓∞ {𝓐} {α} δ) ∎⟨ 𝓓 i ⟩
lb-of-ubs : is-lowerbound-of-upperbounds (underlying-order (𝓓 i))
(π∞ i (∐ 𝓓∞ {𝓐} {α} δ)) (π∞ i ∘ α)
lb-of-ubs x ub = π∞ i (∐ 𝓓∞ {𝓐} {α} δ) ⊑⟨ 𝓓 i ⟩[ reflexivity (𝓓 i) _ ]
∐ (𝓓 i) (δ' i) ⊑⟨ 𝓓 i ⟩[ l ]
x ∎⟨ 𝓓 i ⟩
where
l = ∐-is-lowerbound-of-upperbounds (𝓓 i) (δ' i) x ub
π∞' : (i : I) → DCPO[ 𝓓∞ , 𝓓 i ]
π∞' i = π∞ i , π∞-is-continuous i
ε∞-is-monotone : (i : I) → is-monotone (𝓓 i) 𝓓∞ (ε∞ i)
ε∞-is-monotone i x y l j =
∥∥-rec (prop-valuedness (𝓓 j) (⦅ ε∞ i x ⦆ j) (⦅ ε∞ i y ⦆ j))
γ (I-semidirected i j)
where
γ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ ⦅ ε∞ i x ⦆ j ⊑⟨ 𝓓 j ⟩ ⦅ ε∞ i y ⦆ j
γ (k , lᵢ , lⱼ) = ⦅ ε∞ i x ⦆ j ⊑⟨ 𝓓 j ⟩[ u₁ ]
ρ i j x ⊑⟨ 𝓓 j ⟩[ u₂ ]
κ x (k , lᵢ , lⱼ) ⊑⟨ 𝓓 j ⟩[ u₃ ]
π lⱼ (ε lᵢ x) ⊑⟨ 𝓓 j ⟩[ u₄ ]
π lⱼ (ε lᵢ y) ⊑⟨ 𝓓 j ⟩[ u₅ ]
κ y (k , lᵢ , lⱼ) ⊑⟨ 𝓓 j ⟩[ u₆ ]
ρ i j y ⊑⟨ 𝓓 j ⟩[ u₇ ]
⦅ ε∞ i y ⦆ j ∎⟨ 𝓓 j ⟩
where
u₁ = reflexivity (𝓓 j) (⦅ ε∞ i x ⦆ j)
u₂ = =-to-⊑ (𝓓 j) (ρ-in-terms-of-κ lᵢ lⱼ x)
u₃ = reflexivity (𝓓 j) (κ x (k , lᵢ , lⱼ))
u₄ = mπ (ε lᵢ x) (ε lᵢ y) (mε x y l)
where
mε : is-monotone (𝓓 i) (𝓓 k) (ε lᵢ)
mε = monotone-if-continuous (𝓓 i) (𝓓 k)
((ε lᵢ) , (ε-is-continuous lᵢ))
mπ : is-monotone (𝓓 k) (𝓓 j) (π lⱼ)
mπ = monotone-if-continuous (𝓓 k) (𝓓 j)
((π lⱼ) , (π-is-continuous lⱼ))
u₅ = reflexivity (𝓓 j) (π lⱼ (ε lᵢ y))
u₆ = =-to-⊒ (𝓓 j) (ρ-in-terms-of-κ lᵢ lⱼ y)
u₇ = reflexivity (𝓓 j) (ρ i j y)
ε∞-is-continuous : (i : I) → is-continuous (𝓓 i) 𝓓∞ (ε∞ i)
ε∞-is-continuous i = continuity-criterion (𝓓 i) 𝓓∞ (ε∞ i) (ε∞-is-monotone i) γ
where
γ : (𝓐 : 𝓥 ̇ ) (α : 𝓐 → ⟨ 𝓓 i ⟩) (δ : is-Directed (𝓓 i) α)
→ ε∞ i (∐ (𝓓 i) δ)
≼ (∐ 𝓓∞ (image-is-directed (𝓓 i) 𝓓∞ (ε∞-is-monotone i) δ))
γ 𝓐 α δ j =
⦅ ε∞ i (∐ (𝓓 i) δ) ⦆ j ⊑⟨ 𝓓 j ⟩[ reflexivity (𝓓 j) _ ]
ρ i j (∐ (𝓓 i) δ) ⊑⟨ 𝓓 j ⟩[ ⦅1⦆ ]
∐ (𝓓 j) {𝓐} {ρ i j ∘ α} δ₁ ⊑⟨ 𝓓 j ⟩[ reflexivity (𝓓 j) _ ]
∐ (𝓓 j) {𝓐} {λ a → ⦅ ε∞ i (α a) ⦆ j} δ₁ ⊑⟨ 𝓓 j ⟩[ ⦅2⦆ ]
∐ (𝓓 j) {𝓐} {λ a → ⦅ ε∞ i (α a) ⦆ j} δ₂ ⊑⟨ 𝓓 j ⟩[ reflexivity (𝓓 j) _ ]
⦅ ∐ 𝓓∞ {𝓐} {ε∞ i ∘ α} δ₃ ⦆ j ∎⟨ 𝓓 j ⟩
where
δ₁ = image-is-directed' (𝓓 i) (𝓓 j) (ρ i j , ρ-is-continuous i j) δ
δ₃ = image-is-directed (𝓓 i) 𝓓∞ (ε∞-is-monotone i) δ
δ₂ = family-at-ith-component-is-directed (ε∞ i ∘ α) δ₃ j
⦅1⦆ = continuous-∐-⊑ (𝓓 i) (𝓓 j) (ρ i j , ρ-is-continuous i j) δ
⦅2⦆ = =-to-⊑ (𝓓 j) (∐-independent-of-directedness-witness (𝓓 j) δ₁ δ₂)
ε∞' : (i : I) → DCPO[ 𝓓 i , 𝓓∞ ]
ε∞' i = ε∞ i , ε∞-is-continuous i
\end{code}
This concludes the construction of the bilimit. We proceed by showing that it is
indeed the limit of the diagram.
\begin{code}
module DcpoCone
(𝓔 : DCPO {𝓤'} {𝓣'})
(f : (i : I) → ⟨ 𝓔 ⟩ → ⟨ 𝓓 i ⟩)
(f-cont : (i : I) → is-continuous 𝓔 (𝓓 i) (f i))
(comm : (i j : I) (l : i ⊑ j) → π l ∘ f j ∼ f i)
where
limit-mediating-arrow : ⟨ 𝓔 ⟩ → ⟨ 𝓓∞ ⟩
limit-mediating-arrow y = σ , φ
where
σ : (i : I) → ⟨ 𝓓 i ⟩
σ i = f i y
φ : (i j : I) (l : i ⊑ j) → π l (f j y) = f i y
φ i j l = comm i j l y
limit-mediating-arrow-commutes : (i : I) → π∞ i ∘ limit-mediating-arrow ∼ f i
limit-mediating-arrow-commutes i y = refl
limit-mediating-arrow-is-unique : (g : ⟨ 𝓔 ⟩ → ⟨ 𝓓∞ ⟩)
→ ((i : I) → π∞ i ∘ g ∼ f i)
→ g ∼ limit-mediating-arrow
limit-mediating-arrow-is-unique g g-comm y =
to-𝓓∞-= (λ i → g-comm i y)
limit-mediating-arrow-is-monotone : is-monotone 𝓔 𝓓∞ limit-mediating-arrow
limit-mediating-arrow-is-monotone x y l i = f i x ⊑⟨ 𝓓 i ⟩[ m x y l ]
f i y ∎⟨ 𝓓 i ⟩
where
m : is-monotone 𝓔 (𝓓 i) (f i)
m = monotone-if-continuous 𝓔 (𝓓 i) (f i , f-cont i)
limit-mediating-arrow-is-continuous : is-continuous 𝓔 𝓓∞ limit-mediating-arrow
limit-mediating-arrow-is-continuous = continuity-criterion' 𝓔 𝓓∞ m mon γ
where
m : ⟨ 𝓔 ⟩ → ⟨ 𝓓∞ ⟩
m = limit-mediating-arrow
mon : is-monotone 𝓔 𝓓∞ m
mon = limit-mediating-arrow-is-monotone
γ : (A : 𝓥 ̇ )(α : A → ⟨ 𝓔 ⟩) (δ : is-Directed 𝓔 α)
→ is-lowerbound-of-upperbounds (underlying-order 𝓓∞) (m (∐ 𝓔 δ)) (m ∘ α)
γ A α δ σ ub i = ⦅ m (∐ 𝓔 δ) ⦆ i ⊑⟨ 𝓓 i ⟩[ u₁ ]
f i (∐ 𝓔 δ) ⊑⟨ 𝓓 i ⟩[ u₂ ]
∐ (𝓓 i) δ' ⊑⟨ 𝓓 i ⟩[ u₃ ]
⦅ σ ⦆ i ∎⟨ 𝓓 i ⟩
where
δ' : is-Directed (𝓓 i) (f i ∘ α)
δ' = image-is-directed' 𝓔 (𝓓 i) (f i , f-cont i) δ
u₁ = reflexivity (𝓓 i) (⦅ m (∐ 𝓔 δ) ⦆ i)
u₂ = continuous-∐-⊑ 𝓔 (𝓓 i) (f i , f-cont i) δ
u₃ = ∐-is-lowerbound-of-upperbounds (𝓓 i) δ' (⦅ σ ⦆ i) (λ a → ub a i)
𝓓∞-is-limit : ∃! f∞ ꞉ (⟨ 𝓔 ⟩ → ⟨ 𝓓∞ ⟩) , is-continuous 𝓔 𝓓∞ f∞
× ((i : I) → π∞ i ∘ f∞ ∼ f i)
𝓓∞-is-limit = (limit-mediating-arrow ,
limit-mediating-arrow-is-continuous ,
limit-mediating-arrow-commutes) ,
(λ (g , _ , g-comm)
→ to-subtype-=
(λ h → ×-is-prop (being-continuous-is-prop 𝓔 𝓓∞ h)
(Π₂-is-prop fe (λ i x → sethood (𝓓 i))))
(dfunext fe
(∼-sym (limit-mediating-arrow-is-unique g g-comm))))
\end{code}
Next, we wish to show that 𝓓∞ is also the colimit of the diagram. The following
are preliminaries for doing so.
\begin{code}
ε∞-family : ⟨ 𝓓∞ ⟩ → I → ⟨ 𝓓∞ ⟩
ε∞-family σ i = ε∞ i (⦅ σ ⦆ i)
ε∞-family-is-monotone : (σ : ⟨ 𝓓∞ ⟩) (i j : I) → i ⊑ j
→ ε∞-family σ i ⊑⟨ 𝓓∞ ⟩ ε∞-family σ j
ε∞-family-is-monotone σ i j l k =
∥∥-rec (prop-valuedness (𝓓 k) (⦅ ε∞-family σ i ⦆ k) (⦅ ε∞-family σ j ⦆ k))
γ (I-semidirected j k)
where
γ : (Σ m ꞉ I , j ⊑ m × k ⊑ m)
→ ⦅ ε∞-family σ i ⦆ k ⊑⟨ 𝓓 k ⟩ ⦅ ε∞-family σ j ⦆ k
γ (m , lⱼ , lₖ) =
⦅ ε∞-family σ i ⦆ k ⊑⟨ 𝓓 k ⟩[ u₁ ]
ρ i k (⦅ σ ⦆ i) ⊑⟨ 𝓓 k ⟩[ u₂ ]
κ (⦅ σ ⦆ i) (m , ⊑-trans l lⱼ , lₖ) ⊑⟨ 𝓓 k ⟩[ u₃ ]
π lₖ (ε (⊑-trans l lⱼ) (⦅ σ ⦆ i)) ⊑⟨ 𝓓 k ⟩[ u₄ ]
π lₖ (ε lⱼ (ε l (⦅ σ ⦆ i))) ⊑⟨ 𝓓 k ⟩[ u₅ ]
π lₖ (ε lⱼ (ε l (π l (⦅ σ ⦆ j)))) ⊑⟨ 𝓓 k ⟩[ u₆ ]
π lₖ (ε lⱼ (⦅ σ ⦆ j)) ⊑⟨ 𝓓 k ⟩[ u₇ ]
κ (⦅ σ ⦆ j) (m , lⱼ , lₖ) ⊑⟨ 𝓓 k ⟩[ u₈ ]
ρ j k (⦅ σ ⦆ j) ⊑⟨ 𝓓 k ⟩[ u₉ ]
⦅ ε∞-family σ j ⦆ k ∎⟨ 𝓓 k ⟩
where
u₁ = reflexivity (𝓓 k) (⦅ ε∞-family σ i ⦆ k)
u₂ = =-to-⊑ (𝓓 k) (ρ-in-terms-of-κ (⊑-trans l lⱼ) lₖ (⦅ σ ⦆ i))
u₃ = reflexivity (𝓓 k) (κ (⦅ σ ⦆ i) (m , ⊑-trans l lⱼ , lₖ))
u₄ = =-to-⊒ (𝓓 k) (ap (π lₖ) (ε-comp l lⱼ (⦅ σ ⦆ i)))
u₅ = =-to-⊒ (𝓓 k) (ap (π lₖ ∘ ε lⱼ ∘ ε l) (π-equality σ l))
u₆ = mon (ε l (π l (⦅ σ ⦆ j))) (⦅ σ ⦆ j) (επ-deflation l (⦅ σ ⦆ j))
where
mon : is-monotone (𝓓 j) (𝓓 k) (π lₖ ∘ ε lⱼ)
mon = monotone-if-continuous (𝓓 j) (𝓓 k)
(π lₖ ∘ ε lⱼ ,
∘-is-continuous (𝓓 j) (𝓓 m) (𝓓 k)
(ε lⱼ) (π lₖ) (ε-is-continuous lⱼ) (π-is-continuous lₖ))
u₇ = reflexivity (𝓓 k) (κ (⦅ σ ⦆ j) (m , lⱼ , lₖ))
u₈ = =-to-⊒ (𝓓 k) (ρ-in-terms-of-κ lⱼ lₖ (⦅ σ ⦆ j))
u₉ = reflexivity (𝓓 k) (⦅ ε∞-family σ j ⦆ k)
ε∞-family-is-directed : (σ : ⟨ 𝓓∞ ⟩) → is-Directed 𝓓∞ (ε∞-family σ)
ε∞-family-is-directed σ = I-inhabited , δ
where
δ : is-semidirected (underlying-order 𝓓∞) (ε∞-family σ)
δ i j = ∥∥-functor γ (I-semidirected i j)
where
γ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ (Σ k ꞉ I , ε∞-family σ i ⊑⟨ 𝓓∞ ⟩ ε∞-family σ k
× ε∞-family σ j ⊑⟨ 𝓓∞ ⟩ ε∞-family σ k)
γ (k , lᵢ , lⱼ) =
k , ε∞-family-is-monotone σ i k lᵢ ,
ε∞-family-is-monotone σ j k lⱼ
∐-of-ε∞s : (σ : ⟨ 𝓓∞ ⟩) → σ = ∐ 𝓓∞ {I} {ε∞-family σ} (ε∞-family-is-directed σ)
∐-of-ε∞s σ = antisymmetry 𝓓∞ σ (∐ 𝓓∞ δ) a b
where
α : I → ⟨ 𝓓∞ ⟩
α = ε∞-family σ
δ : is-Directed 𝓓∞ α
δ = ε∞-family-is-directed σ
a : σ ⊑⟨ 𝓓∞ ⟩ ∐ 𝓓∞ {I} {α} δ
a i = ⦅ σ ⦆ i ⊑⟨ 𝓓 i ⟩[ u₁ ]
ε ⊑-refl (⦅ σ ⦆ i) ⊑⟨ 𝓓 i ⟩[ u₂ ]
π ⊑-refl (ε ⊑-refl (⦅ σ ⦆ i)) ⊑⟨ 𝓓 i ⟩[ u₃ ]
κ (⦅ σ ⦆ i) (i , ⊑-refl , ⊑-refl) ⊑⟨ 𝓓 i ⟩[ u₄ ]
ρ i i (⦅ σ ⦆ i) ⊑⟨ 𝓓 i ⟩[ u₅ ]
⦅ ε∞ i (⦅ σ ⦆ i) ⦆ i ⊑⟨ 𝓓 i ⟩[ u₆ ]
family-at-ith-component α i i ⊑⟨ 𝓓 i ⟩[ u₇ ]
∐ (𝓓 i) δ' ⊑⟨ 𝓓 i ⟩[ u₈ ]
⦅ (∐ 𝓓∞ {I} {α} δ) ⦆ i ∎⟨ 𝓓 i ⟩
where
δ' : is-Directed (𝓓 i) (family-at-ith-component α i)
δ' = family-at-ith-component-is-directed α δ i
u₁ = =-to-⊒ (𝓓 i) (ε-id i (⦅ σ ⦆ i))
u₂ = =-to-⊒ (𝓓 i) (π-id i (ε ⊑-refl (⦅ σ ⦆ i)))
u₃ = reflexivity (𝓓 i) (π ⊑-refl (ε ⊑-refl (⦅ σ ⦆ i)))
u₄ = =-to-⊒ (𝓓 i) (ρ-in-terms-of-κ ⊑-refl ⊑-refl (⦅ σ ⦆ i))
u₅ = reflexivity (𝓓 i) (ρ i i (⦅ σ ⦆ i))
u₆ = reflexivity (𝓓 i) (⦅ ε∞ i (⦅ σ ⦆ i) ⦆ i )
u₇ = ∐-is-upperbound (𝓓 i) δ' i
u₈ = reflexivity (𝓓 i) (⦅ ∐ 𝓓∞ {I} {α} δ ⦆ i)
b : ∐ 𝓓∞ {I} {α} δ ⊑⟨ 𝓓∞ ⟩ σ
b = ∐-is-lowerbound-of-upperbounds 𝓓∞ {I} {α} δ σ γ
where
γ : (i : I) → α i ⊑⟨ 𝓓∞ ⟩ σ
γ i j = ∥∥-rec (prop-valuedness (𝓓 j) (⦅ α i ⦆ j) (⦅ σ ⦆ j))
g (I-semidirected i j)
where
g : (Σ k ꞉ I , i ⊑ k × j ⊑ k) → ⦅ α i ⦆ j ⊑⟨ 𝓓 j ⟩ ⦅ σ ⦆ j
g (k , lᵢ , lⱼ) = ⦅ α i ⦆ j ⊑⟨ 𝓓 j ⟩[ u₁ ]
⦅ ε∞ i (⦅ σ ⦆ i) ⦆ j ⊑⟨ 𝓓 j ⟩[ u₂ ]
ρ i j (⦅ σ ⦆ i) ⊑⟨ 𝓓 j ⟩[ u₃ ]
κ (⦅ σ ⦆ i) (k , lᵢ , lⱼ) ⊑⟨ 𝓓 j ⟩[ u₄ ]
π lⱼ (ε lᵢ (⦅ σ ⦆ i)) ⊑⟨ 𝓓 j ⟩[ u₅ ]
π lⱼ (ε lᵢ (π lᵢ (⦅ σ ⦆ k))) ⊑⟨ 𝓓 j ⟩[ u₆ ]
π lⱼ (⦅ σ ⦆ k) ⊑⟨ 𝓓 j ⟩[ u₇ ]
⦅ σ ⦆ j ∎⟨ 𝓓 j ⟩
where
u₁ = reflexivity (𝓓 j) (⦅ α i ⦆ j)
u₂ = reflexivity (𝓓 j) (⦅ ε∞ i (⦅ σ ⦆ i) ⦆ j)
u₃ = =-to-⊑ (𝓓 j) (ρ-in-terms-of-κ lᵢ lⱼ (⦅ σ ⦆ i))
u₄ = reflexivity (𝓓 j) (κ (⦅ σ ⦆ i) (k , lᵢ , lⱼ))
u₅ = =-to-⊒ (𝓓 j) (ap (π lⱼ ∘ ε lᵢ) (π-equality σ lᵢ))
u₆ = mon (ε lᵢ (π lᵢ (⦅ σ ⦆ k))) (⦅ σ ⦆ k) (επ-deflation lᵢ (⦅ σ ⦆ k))
where
mon : is-monotone (𝓓 k) (𝓓 j) (π lⱼ)
mon = monotone-if-continuous (𝓓 k) (𝓓 j)
(π lⱼ , π-is-continuous lⱼ)
u₇ = =-to-⊑ (𝓓 j) (π-equality σ lⱼ)
\end{code}
We now show that 𝓓∞ is the colimit of the diagram.
\begin{code}
module DcpoCocone
(𝓔 : DCPO {𝓤'} {𝓣'})
(g : (i : I) → ⟨ 𝓓 i ⟩ → ⟨ 𝓔 ⟩)
(g-cont : (i : I) → is-continuous (𝓓 i) 𝓔 (g i))
(comm : (i j : I) (l : i ⊑ j) → g j ∘ ε l ∼ g i)
where
colimit-family : ⟨ 𝓓∞ ⟩ → I → ⟨ 𝓔 ⟩
colimit-family σ i = g i (⦅ σ ⦆ i)
colimit-family-is-monotone : (σ : ⟨ 𝓓∞ ⟩) (i j : I) (l : i ⊑ j)
→ colimit-family σ i ⊑⟨ 𝓔 ⟩ colimit-family σ j
colimit-family-is-monotone σ i j l =
g i (⦅ σ ⦆ i) ⊑⟨ 𝓔 ⟩[ u ]
g i (π l (⦅ σ ⦆ j)) ⊑⟨ 𝓔 ⟩[ v ]
g j (ε l (π l (⦅ σ ⦆ j))) ⊑⟨ 𝓔 ⟩[ w ]
g j (⦅ σ ⦆ j) ∎⟨ 𝓔 ⟩
where
u = =-to-⊒ 𝓔 (ap (g i) (π-equality σ l))
v = =-to-⊒ 𝓔 (comm i j l (π l (⦅ σ ⦆ j)))
w = gm (ε l (π l (⦅ σ ⦆ j))) (⦅ σ ⦆ j) (επ-deflation l (⦅ σ ⦆ j))
where
gm : is-monotone (𝓓 j) 𝓔 (g j)
gm = monotone-if-continuous (𝓓 j) 𝓔 (g j , g-cont j)
colimit-family-is-directed : (σ : ⟨ 𝓓∞ ⟩) → is-Directed 𝓔 (colimit-family σ)
colimit-family-is-directed σ = I-inhabited , γ
where
γ : is-semidirected (underlying-order 𝓔) (colimit-family σ)
γ i j = ∥∥-functor ψ (I-semidirected i j)
where
ψ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ (Σ k ꞉ I , colimit-family σ i ⊑⟨ 𝓔 ⟩ colimit-family σ k
× colimit-family σ j ⊑⟨ 𝓔 ⟩ colimit-family σ k)
ψ (k , lᵢ , lⱼ) =
k , colimit-family-is-monotone σ i k lᵢ ,
colimit-family-is-monotone σ j k lⱼ
colimit-mediating-arrow : ⟨ 𝓓∞ ⟩ → ⟨ 𝓔 ⟩
colimit-mediating-arrow σ = ∐ 𝓔 {I} {φ} δ
where
φ : I → ⟨ 𝓔 ⟩
φ = colimit-family σ
δ : is-Directed 𝓔 φ
δ = colimit-family-is-directed σ
colimit-mediating-arrow-commutes : (i : I)
→ colimit-mediating-arrow ∘ ε∞ i ∼ g i
colimit-mediating-arrow-commutes i x =
antisymmetry 𝓔 (colimit-mediating-arrow ((ε∞ i) x)) (g i x) a b
where
δ : is-Directed 𝓔 (colimit-family (ε∞ i x))
δ = colimit-family-is-directed (ε∞ i x)
a : colimit-mediating-arrow (ε∞ i x) ⊑⟨ 𝓔 ⟩ g i x
a = ∐-is-lowerbound-of-upperbounds 𝓔 δ (g i x) γ
where
γ : (j : I) → colimit-family (ε∞ i x) j ⊑⟨ 𝓔 ⟩ g i x
γ j = ∥∥-rec (prop-valuedness 𝓔 (colimit-family (ε∞ i x) j) (g i x))
ϕ (I-semidirected i j)
where
ϕ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ colimit-family (ε∞ i x) j ⊑⟨ 𝓔 ⟩ g i x
ϕ (k , lᵢ , lⱼ) =
colimit-family (ε∞ i x) j ⊑⟨ 𝓔 ⟩[ u₁ ]
g j (ρ i j x) ⊑⟨ 𝓔 ⟩[ u₂ ]
g j (κ x (k , lᵢ , lⱼ)) ⊑⟨ 𝓔 ⟩[ u₃ ]
g j (π lⱼ (ε lᵢ x)) ⊑⟨ 𝓔 ⟩[ u₄ ]
g k (ε lⱼ (π lⱼ (ε lᵢ x))) ⊑⟨ 𝓔 ⟩[ u₅ ]
g k (ε lᵢ x) ⊑⟨ 𝓔 ⟩[ u₆ ]
g i x ∎⟨ 𝓔 ⟩
where
u₁ = reflexivity 𝓔 (colimit-family (ε∞ i x) j)
u₂ = =-to-⊑ 𝓔 (ap (g j) (ρ-in-terms-of-κ lᵢ lⱼ x))
u₃ = reflexivity 𝓔 (g j (κ x (k , lᵢ , lⱼ)))
u₄ = =-to-⊒ 𝓔 (comm j k lⱼ (π lⱼ (ε lᵢ x)))
u₅ = m (ε lⱼ (π lⱼ (ε lᵢ x))) (ε lᵢ x) (επ-deflation lⱼ (ε lᵢ x))
where
m : is-monotone (𝓓 k) 𝓔 (g k)
m = monotone-if-continuous (𝓓 k) 𝓔 (g k , g-cont k)
u₆ = =-to-⊑ 𝓔 (comm i k lᵢ x)
b : g i x ⊑⟨ 𝓔 ⟩ colimit-mediating-arrow (ε∞ i x)
b = g i x ⊑⟨ 𝓔 ⟩[ v₁ ]
g i (ε ⊑-refl x) ⊑⟨ 𝓔 ⟩[ v₂ ]
g i (π ⊑-refl (ε ⊑-refl x)) ⊑⟨ 𝓔 ⟩[ v₃ ]
g i (κ x (i , ⊑-refl , ⊑-refl)) ⊑⟨ 𝓔 ⟩[ v₄ ]
g i (ρ i i x) ⊑⟨ 𝓔 ⟩[ v₅ ]
g i (⦅ ε∞ i x ⦆ i) ⊑⟨ 𝓔 ⟩[ v₆ ]
∐ 𝓔 δ ⊑⟨ 𝓔 ⟩[ v₇ ]
colimit-mediating-arrow (ε∞ i x) ∎⟨ 𝓔 ⟩
where
v₁ = =-to-⊒ 𝓔 (ap (g i) (ε-id i x))
v₂ = =-to-⊒ 𝓔 (ap (g i) (π-id i (ε ⊑-refl x)))
v₃ = reflexivity 𝓔 (g i (π ⊑-refl (ε ⊑-refl x)))
v₄ = =-to-⊒ 𝓔 (ap (g i) (ρ-in-terms-of-κ ⊑-refl ⊑-refl x))
v₅ = reflexivity 𝓔 (g i (ρ i i x))
v₆ = ∐-is-upperbound 𝓔 δ i
v₇ = reflexivity 𝓔 (∐ 𝓔 δ)
colimit-mediating-arrow-is-unique : (h : ⟨ 𝓓∞ ⟩ → ⟨ 𝓔 ⟩)
→ is-continuous 𝓓∞ 𝓔 h
→ ((i : I) → h ∘ ε∞ i ∼ g i)
→ h ∼ colimit-mediating-arrow
colimit-mediating-arrow-is-unique h h-cont h-comm σ =
h σ =⟨ ap h (∐-of-ε∞s σ) ⟩
h (∐ 𝓓∞ {I} {λ i → ε∞ i (⦅ σ ⦆ i)} δ) =⟨ e₁ ⟩
∐ 𝓔 {I} {λ i → h (ε∞ i (⦅ σ ⦆ i))} δ₁ =⟨ e₂ ⟩
∐ 𝓔 {I} {λ i → g i (⦅ σ ⦆ i)} δ₂ =⟨ e₃ ⟩
∐ 𝓔 {I} {λ i → g i (⦅ σ ⦆ i)} δ₃ =⟨ refl ⟩
colimit-mediating-arrow σ ∎
where
p : (λ i → (h ∘ ε∞ i) (⦅ σ ⦆ i)) = (λ i → g i (⦅ σ ⦆ i))
p = dfunext fe (λ i → h-comm i (⦅ σ ⦆ i))
δ : is-Directed 𝓓∞ {I} (ε∞-family σ)
δ = ε∞-family-is-directed σ
δ₁ : is-Directed 𝓔 (h ∘ ε∞-family σ)
δ₁ = image-is-directed' 𝓓∞ 𝓔 (h , h-cont) {I} {ε∞-family σ} δ
δ₂ : is-Directed 𝓔 (λ i → g i (⦅ σ ⦆ i))
δ₂ = transport (is-Directed 𝓔 {I}) p δ₁
δ₃ : is-Directed 𝓔 (colimit-family σ)
δ₃ = colimit-family-is-directed σ
e₁ = continuous-∐-= 𝓓∞ 𝓔 (h , h-cont) {I} {ε∞-family σ} δ
e₂ = ∐-family-= 𝓔 {I} p δ₁
e₃ = ∐-independent-of-directedness-witness 𝓔 δ₂ δ₃
colimit-mediating-arrow-is-monotone : is-monotone 𝓓∞ 𝓔
colimit-mediating-arrow
colimit-mediating-arrow-is-monotone σ τ l = γ
where
δ₁ : is-Directed 𝓔 (colimit-family σ)
δ₁ = colimit-family-is-directed σ
δ₂ : is-Directed 𝓔 (colimit-family τ)
δ₂ = colimit-family-is-directed τ
γ : ∐ 𝓔 δ₁ ⊑⟨ 𝓔 ⟩ ∐ 𝓔 δ₂
γ = ∐-is-monotone 𝓔 δ₁ δ₂ ψ
where
ψ : (i : I) → colimit-family σ i ⊑⟨ 𝓔 ⟩ colimit-family τ i
ψ i = g i (⦅ σ ⦆ i) ⊑⟨ 𝓔 ⟩[ m (⦅ σ ⦆ i) (⦅ τ ⦆ i) (l i) ]
g i (⦅ τ ⦆ i) ∎⟨ 𝓔 ⟩
where
m : is-monotone (𝓓 i) 𝓔 (g i)
m = monotone-if-continuous (𝓓 i) 𝓔 (g i , g-cont i)
colimit-mediating-arrow-is-continuous : is-continuous 𝓓∞ 𝓔
colimit-mediating-arrow
colimit-mediating-arrow-is-continuous = continuity-criterion' 𝓓∞ 𝓔 m mon γ
where
m : ⟨ 𝓓∞ ⟩ → ⟨ 𝓔 ⟩
m = colimit-mediating-arrow
mon : is-monotone 𝓓∞ 𝓔 colimit-mediating-arrow
mon = colimit-mediating-arrow-is-monotone
γ : (A : 𝓥 ̇ )(α : A → ⟨ 𝓓∞ ⟩) (δ : is-Directed 𝓓∞ α)
→ is-lowerbound-of-upperbounds (underlying-order 𝓔) (m (∐ 𝓓∞ {A} {α} δ)) (m ∘ α)
γ A α δ y ub =
∐-is-lowerbound-of-upperbounds 𝓔
(colimit-family-is-directed (∐ 𝓓∞ {A} {α} δ)) y ψ
where
ψ : (i : I) → g i (⦅ ∐ 𝓓∞ {A} {α} δ ⦆ i) ⊑⟨ 𝓔 ⟩ y
ψ i = g i (⦅ ∐ 𝓓∞ {A} {α} δ ⦆ i) ⊑⟨ 𝓔 ⟩[ u₁ ]
∐ 𝓔 {A} {λ a → g i (⦅ α a ⦆ i)} δ₂ ⊑⟨ 𝓔 ⟩[ u₂ ]
y ∎⟨ 𝓔 ⟩
where
δ₁ : is-Directed (𝓓 i) (family-at-ith-component α i)
δ₁ = family-at-ith-component-is-directed α δ i
δ₂ : is-Directed 𝓔 (λ a → g i (⦅ α a ⦆ i))
δ₂ = image-is-directed' (𝓓 i) 𝓔 (g i , g-cont i) δ₁
u₁ = continuous-∐-⊑ (𝓓 i) 𝓔 (g i , g-cont i) δ₁
u₂ = ∐-is-lowerbound-of-upperbounds 𝓔 δ₂ y ϕ
where
ϕ : (a : A) → g i (⦅ α a ⦆ i) ⊑⟨ 𝓔 ⟩ y
ϕ a = g i (⦅ α a ⦆ i) ⊑⟨ 𝓔 ⟩[ v ]
∐ 𝓔 (colimit-family-is-directed (α a)) ⊑⟨ 𝓔 ⟩[ ub a ]
y ∎⟨ 𝓔 ⟩
where
v = ∐-is-upperbound 𝓔 (colimit-family-is-directed (α a)) i
𝓓∞-is-colimit : ∃! g∞ ꞉ (⟨ 𝓓∞ ⟩ → ⟨ 𝓔 ⟩) , is-continuous 𝓓∞ 𝓔 g∞
× ((i : I) → g∞ ∘ ε∞ i ∼ g i)
𝓓∞-is-colimit = (colimit-mediating-arrow ,
colimit-mediating-arrow-is-continuous ,
colimit-mediating-arrow-commutes) ,
(λ (f , f-cont , f-comm)
→ to-subtype-=
(λ h → ×-is-prop (being-continuous-is-prop 𝓓∞ 𝓔 h)
(Π₂-is-prop fe (λ i x → sethood 𝓔)))
(dfunext fe
(∼-sym (colimit-mediating-arrow-is-unique
f f-cont f-comm))))
\end{code}
Finally, we consider a curried version of ε∞-family, which will prove useful
(see Dinfinity.lagda) in the construction of Scott's D∞ for which D∞ is
isomorphic to its own self-exponential.
\begin{code}
ε∞π∞-family : I → ⟨ 𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞ ⟩
ε∞π∞-family i = DCPO-∘ 𝓓∞ (𝓓 i) 𝓓∞ (π∞' i) (ε∞' i)
ε∞π∞-family-is-monotone : {i j : I} → i ⊑ j
→ ε∞π∞-family i ⊑⟨ 𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞ ⟩ ε∞π∞-family j
ε∞π∞-family-is-monotone {i} {j} l σ = ε∞-family-is-monotone σ i j l
ε∞π∞-family-is-directed : is-Directed (𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞) ε∞π∞-family
ε∞π∞-family-is-directed = I-inhabited , δ
where
δ : is-semidirected (underlying-order (𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞)) ε∞π∞-family
δ i j = ∥∥-functor γ (I-semidirected i j)
where
γ : (Σ k ꞉ I , i ⊑ k × j ⊑ k)
→ (Σ k ꞉ I , ε∞π∞-family i ⊑⟨ 𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞ ⟩ ε∞π∞-family k
× ε∞π∞-family j ⊑⟨ 𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞ ⟩ ε∞π∞-family k)
γ (k , lᵢ , lⱼ) =
k , ε∞π∞-family-is-monotone lᵢ ,
ε∞π∞-family-is-monotone lⱼ
∐-of-ε∞π∞s-is-id : ∐ (𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞) {I} {ε∞π∞-family} ε∞π∞-family-is-directed
= id , id-is-continuous 𝓓∞
∐-of-ε∞π∞s-is-id = to-continuous-function-= 𝓓∞ 𝓓∞ γ
where
δ : is-Directed (𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞) ε∞π∞-family
δ = ε∞π∞-family-is-directed
γ : [ 𝓓∞ , 𝓓∞ ]⟨ ∐ (𝓓∞ ⟹ᵈᶜᵖᵒ 𝓓∞) {I} {ε∞π∞-family} δ ⟩ ∼ id
γ σ = ∐ 𝓓∞ {I} {λ i → ε∞ i (⦅ σ ⦆ i)} δ₁ =⟨ e₁ ⟩
∐ 𝓓∞ {I} {λ i → ε∞ i (⦅ σ ⦆ i)} δ₂ =⟨ e₂ ⟩
σ ∎
where
δ₁ : is-Directed 𝓓∞ (λ i → ε∞ i (⦅ σ ⦆ i))
δ₁ = pointwise-family-is-directed 𝓓∞ 𝓓∞ ε∞π∞-family δ σ
δ₂ : is-Directed 𝓓∞ (λ i → ε∞ i (⦅ σ ⦆ i))
δ₂ = ε∞-family-is-directed σ
e₁ = ∐-independent-of-directedness-witness 𝓓∞ δ₁ δ₂
e₂ = (∐-of-ε∞s σ) ⁻¹
\end{code}
Added 9 February 2022.
If every dcpo in the diagram is locally small, then so is its bilimit.
\begin{code}
𝓓∞-is-locally-small : ((i : I) → is-locally-small (𝓓 i))
→ is-locally-small 𝓓∞
𝓓∞-is-locally-small ls = record { _⊑ₛ_ = _⊑ₛ⟨∞⟩_ ; ⊑ₛ-≃-⊑ = γ}
where
small-order : (i : I) → ⟨ 𝓓 i ⟩ → ⟨ 𝓓 i ⟩ → 𝓥 ̇
small-order i = _⊑ₛ_ where open is-locally-small (ls i)
syntax small-order i x y = x ⊑ₛ⟨ i ⟩ y
⊑ₛ-≃-⊑-at : (i : I) {x y : ⟨ 𝓓 i ⟩} → x ⊑ₛ⟨ i ⟩ y ≃ x ⊑⟨ 𝓓 i ⟩ y
⊑ₛ-≃-⊑-at i = ⊑ₛ-≃-⊑ where open is-locally-small (ls i)
_⊑ₛ⟨∞⟩_ : ⟨ 𝓓∞ ⟩ → ⟨ 𝓓∞ ⟩ → 𝓥 ̇
σ ⊑ₛ⟨∞⟩ τ = (i : I) → ⦅ σ ⦆ i ⊑ₛ⟨ i ⟩ ⦅ τ ⦆ i
γ : {σ τ : ⟨ 𝓓∞ ⟩} → (σ ⊑ₛ⟨∞⟩ τ) ≃ (σ ⊑⟨ 𝓓∞ ⟩ τ)
γ {σ} {τ} = Π-cong fe fe (λ i → ⊑ₛ-≃-⊑-at i)
\end{code}
Next we are going to show that taking the bilimit is closed under structural
continuity/algebraicity and having a small (compact) basis.
To ease the development we first develop some generalities. Given I-indexed
families αᵢ from Jᵢ into 𝓓ᵢ, we construct a family α∞ from Σ J to 𝓓∞ and present
criteria for calculating its supremum and for it being directed.
\begin{code}
module 𝓓∞-family
(J : (i : I) → 𝓥 ̇ )
(α : (i : I) → J i → ⟨ 𝓓 i ⟩)
where
J∞ : 𝓥 ̇
J∞ = Σ i ꞉ I , J i
J∞-is-inhabited : ((i : I) → ∥ J i ∥) → ∥ J∞ ∥
J∞-is-inhabited J-inh =
∥∥-rec ∥∥-is-prop (λ i → ∥∥-functor (λ j → (i , j)) (J-inh i)) I-inhabited
α∞ : J∞ → ⟨ 𝓓∞ ⟩
α∞ (i , j) = ε∞ i (α i j)
α∞-is-sup-lemma : (σ : ⟨ 𝓓∞ ⟩) (δ : ((i : I) → is-Directed (𝓓 i) (α i)))
→ ((i : I) → ∐ (𝓓 i) (δ i) = ⦅ σ ⦆ i)
→ is-sup _≼_ σ α∞
α∞-is-sup-lemma σ δ e =
transport (λ - → is-sup _≼_ - α∞) (σ-is-sup ⁻¹) (ub , lb-of-ubs)
where
δ' : (i : I) → is-Directed 𝓓∞ (ε∞ i ∘ α i)
δ' i = image-is-directed' (𝓓 i) 𝓓∞ (ε∞' i) (δ i)
e₁ : ε∞-family σ = (λ i → ε∞ i (∐ (𝓓 i) (δ i)))
e₁ = dfunext fe (λ i → ap (ε∞ i) (e i) ⁻¹)
e₂ : (λ i → ε∞ i (∐ (𝓓 i) (δ i))) = (λ i → ∐ 𝓓∞ (δ' i))
e₂ = dfunext fe (λ i → continuous-∐-= (𝓓 i) 𝓓∞ (ε∞' i) (δ i))
δ₁ : is-Directed 𝓓∞ (λ (i : I) → ε∞ i (∐ (𝓓 i) (δ i)))
δ₁ = transport (is-Directed 𝓓∞) e₁ (ε∞-family-is-directed σ)
δ₂ : is-Directed 𝓓∞ (λ i → ∐ 𝓓∞ (δ' i))
δ₂ = transport (is-Directed 𝓓∞) e₂ δ₁
σ-is-sup = σ =⟨ ∐-of-ε∞s σ ⟩
∐ 𝓓∞ (ε∞-family-is-directed σ) =⟨ ⦅1⦆ ⟩
∐ 𝓓∞ δ₁ =⟨ ⦅2⦆ ⟩
∐ 𝓓∞ δ₂ ∎
where
⦅1⦆ = ∐-family-= 𝓓∞ e₁ (ε∞-family-is-directed σ)
⦅2⦆ = ∐-family-= 𝓓∞ e₂ δ₁
ub : (k : J∞) → α∞ k ≼ ∐ 𝓓∞ δ₂
ub (i , j) = transitivity 𝓓∞ (α∞ (i , j)) (∐ 𝓓∞ (δ' i)) (∐ 𝓓∞ δ₂) ⦅1⦆ ⦅2⦆
where
⦅1⦆ : α∞ (i , j) ⊑⟨ 𝓓∞ ⟩ ∐ 𝓓∞ (δ' i)
⦅1⦆ = ∐-is-upperbound 𝓓∞ (δ' i) j
⦅2⦆ : ∐ 𝓓∞ (δ' i) ⊑⟨ 𝓓∞ ⟩ ∐ 𝓓∞ δ₂
⦅2⦆ = ∐-is-upperbound 𝓓∞ δ₂ i
lb-of-ubs : is-lowerbound-of-upperbounds _≼_ (∐ 𝓓∞ δ₂) α∞
lb-of-ubs τ τ-is-ub = ∐-is-lowerbound-of-upperbounds 𝓓∞ δ₂ τ
(λ i → ∐-is-lowerbound-of-upperbounds 𝓓∞ (δ' i) τ
(λ j → τ-is-ub (i , j)))
α∞-is-directed-sup-lemma : (σ : ⟨ 𝓓∞ ⟩)
(δ : ((i : I) → is-Directed (𝓓 i) (α i)))
→ ((i : I) → ∐ (𝓓 i) (δ i) = ⦅ σ ⦆ i)
→ (δ∞ : is-Directed 𝓓∞ α∞) → ∐ 𝓓∞ δ∞ = σ
α∞-is-directed-sup-lemma σ δ e δ∞ =
antisymmetry 𝓓∞ (∐ 𝓓∞ δ∞) σ
(∐-is-lowerbound-of-upperbounds 𝓓∞ δ∞ σ
(sup-is-upperbound _≼_ σ-is-sup))
(sup-is-lowerbound-of-upperbounds _≼_ σ-is-sup (∐ 𝓓∞ δ∞)
(∐-is-upperbound 𝓓∞ δ∞))
where
σ-is-sup : is-sup _≼_ σ α∞
σ-is-sup = α∞-is-sup-lemma σ δ e
α∞-is-directed-lemma : (σ : ⟨ 𝓓∞ ⟩) (δ : ((i : I) → is-Directed (𝓓 i) (α i)))
→ ((i : I) → ∐ (𝓓 i) (δ i) = ⦅ σ ⦆ i)
→ ((i : I) (j : J i) → α i j ≪⟨ 𝓓 i ⟩ ⦅ σ ⦆ i)
→ is-Directed 𝓓∞ α∞
α∞-is-directed-lemma σ δ sup αs-wb = Ind-∐-is-directed ε∞-after-α dir
where
open import DomainTheory.BasesAndContinuity.IndCompletion pt fe 𝓥
open Ind-completion 𝓓∞
δ' : (i : I) → is-Directed 𝓓∞ (ε∞ i ∘ α i)
δ' i = image-is-directed' (𝓓 i) 𝓓∞ (ε∞' i) (δ i)
ε∞-after-α : I → Ind
ε∞-after-α i = J i , ε∞ i ∘ α i , δ' i
dir : is-directed _≲_ ε∞-after-α
dir = I-inhabited , semidir
where
semidir : is-semidirected _≲_ ε∞-after-α
semidir i₁ i₂ =
∥∥-functor (λ (i , l₁ , l₂) → i , cofinality-lemma l₁
, cofinality-lemma l₂)
(I-semidirected i₁ i₂)
where
cofinality-lemma : {i i' : I} → i ⊑ i' → ε∞-after-α i ≲ ε∞-after-α i'
cofinality-lemma {i} {i'} l j =
∥∥-functor lem (wb (J i') (α i') (δ i') (=-to-⊒ (𝓓 i') (sup i')))
where
lem : (Σ j' ꞉ J i' , ε l (α i j) ⊑⟨ 𝓓 i' ⟩ α i' j')
→ (Σ j' ꞉ J i' , ε∞ i (α i j) ⊑⟨ 𝓓∞ ⟩ ε∞ i' (α i' j'))
lem (j' , u) = j' , transitivity 𝓓∞ (ε∞ i (α i j))
(ε∞ i' (ε l (α i j)))
(ε∞ i' (α i' j'))
⦅1⦆ ⦅2⦆
where
⦅1⦆ : ε∞ i (α i j) ⊑⟨ 𝓓∞ ⟩ ε∞ i' (ε l (α i j))
⦅1⦆ = =-to-⊑ 𝓓∞ ((ε∞-commutes-with-εs i i' l (α i j)) ⁻¹)
⦅2⦆ : ε∞ i' (ε l (α i j)) ⊑⟨ 𝓓∞ ⟩ ε∞ i' (α i' j')
⦅2⦆ = monotone-if-continuous (𝓓 i') 𝓓∞ (ε∞' i')
(ε l (α i j)) (α i' j') u
wb : ε l (α i j) ≪⟨ 𝓓 i' ⟩ ⦅ σ ⦆ i'
wb = ≪-⊑-to-≪ (𝓓 i') wb' ineq
where
wb' : ε l (α i j) ≪⟨ 𝓓 i' ⟩ ε l (⦅ σ ⦆ i)
wb' = embeddings-preserve-≪ (𝓓 i) (𝓓 i')
(ε l) (ε-is-continuous l)
(π l) (π-is-continuous l)
(ε-section-of-π l) (επ-deflation l)
(α i j) (⦅ σ ⦆ i) (αs-wb i j)
ineq = ε l (π∞ i σ) ⊑⟨ 𝓓 i' ⟩[ ⦅1⦆ ]
ε l (π l (π∞ i' σ)) ⊑⟨ 𝓓 i' ⟩[ ⦅2⦆ ]
⦅ σ ⦆ i' ∎⟨ 𝓓 i' ⟩
where
⦅1⦆ = =-to-⊑ (𝓓 i') (ap (ε l) ((π∞-commutes-with-πs i i' l σ) ⁻¹))
⦅2⦆ = επ-deflation l (π∞ i' σ)
\end{code}
The construction that defines the family α∞ into 𝓓∞ preserves the way-below
relation and compactness in a sense made precise below.
\begin{code}
α∞-is-way-below : (σ : ⟨ 𝓓∞ ⟩)
→ ((i : I) (j : J i) → α i j ≪⟨ 𝓓 i ⟩ ⦅ σ ⦆ i)
→ (j : J∞) → α∞ j ≪⟨ 𝓓∞ ⟩ σ
α∞-is-way-below σ wb (i , j) = ≪-⊑-to-≪ 𝓓∞ lem (ε∞π∞-deflation σ)
where
lem : ε∞ i (α i j) ≪⟨ 𝓓∞ ⟩ ε∞ i (π∞ i σ)
lem = embeddings-preserve-≪ (𝓓 i) 𝓓∞
(ε∞ i) (ε∞-is-continuous i)
(π∞ i) (π∞-is-continuous i)
ε∞-section-of-π∞ ε∞π∞-deflation
(α i j) (π∞ i σ)
(wb i j)
α∞-is-compact : ((i : I) (j : J i) → is-compact (𝓓 i) (α i j))
→ (j : J∞) → is-compact 𝓓∞ (α∞ j)
α∞-is-compact κ (i , j) = embeddings-preserve-compactness (𝓓 i) 𝓓∞
(ε∞ i) (ε∞-is-continuous i)
(π∞ i) (π∞-is-continuous i)
ε∞-section-of-π∞ ε∞π∞-deflation
(α i j) (κ i j)
\end{code}
It is now fairly straightforward to prove that if each 𝓓ᵢ is structurally
continuous, then so is its bilimit 𝓓∞.
Note how we don't expect to have a similar result for ordinary continuity,
because this seems to need instances of the axiom of choice in general.
\begin{code}
𝓓∞-structurally-continuous : ((i : I) → structurally-continuous (𝓓 i))
→ structurally-continuous 𝓓∞
𝓓∞-structurally-continuous 𝓒 =
record
{ index-of-approximating-family = J∞⁺
; approximating-family = α∞⁺
; approximating-family-is-directed = α∞⁺-is-directed
; approximating-family-is-way-below = α∞⁺-is-way-below
; approximating-family-∐-= = α∞⁺-∐-=
}
where
open structurally-continuous
J : (i : I) → ⟨ 𝓓 i ⟩ → 𝓥 ̇
J i = index-of-approximating-family (𝓒 i)
α : (i : I) (x : ⟨ 𝓓 i ⟩) → J i x → ⟨ 𝓓 i ⟩
α i = approximating-family (𝓒 i)
δ : (i : I) (x : ⟨ 𝓓 i ⟩) → is-Directed (𝓓 i) (α i x)
δ i = approximating-family-is-directed (𝓒 i)
J⁺ : (σ : ⟨ 𝓓∞ ⟩) → I → 𝓥 ̇
J⁺ σ i = J i (⦅ σ ⦆ i)
α⁺ : (σ : ⟨ 𝓓∞ ⟩) (i : I) → J⁺ σ i → ⟨ 𝓓 i ⟩
α⁺ σ i = α i (⦅ σ ⦆ i)
module _
(σ : ⟨ 𝓓∞ ⟩)
where
open 𝓓∞-family (J⁺ σ) (α⁺ σ)
J∞⁺ : 𝓥 ̇
J∞⁺ = J∞
α∞⁺ : J∞⁺ → ⟨ 𝓓∞ ⟩
α∞⁺ = α∞
α∞⁺-is-way-below : is-way-upperbound 𝓓∞ σ α∞⁺
α∞⁺-is-way-below = α∞-is-way-below σ
(λ i j → approximating-family-is-way-below (𝓒 i)
(⦅ σ ⦆ i) j)
α∞⁺-is-directed : is-Directed 𝓓∞ α∞⁺
α∞⁺-is-directed = α∞-is-directed-lemma σ
(λ i → δ i (⦅ σ ⦆ i))
(λ i → approximating-family-∐-= (𝓒 i) (⦅ σ ⦆ i))
(λ i → approximating-family-is-way-below (𝓒 i) (⦅ σ ⦆ i))
α∞⁺-∐-= : ∐ 𝓓∞ α∞⁺-is-directed = σ
α∞⁺-∐-= = α∞-is-directed-sup-lemma σ
(λ i → δ i (⦅ σ ⦆ i))
(λ i → approximating-family-∐-= (𝓒 i) (⦅ σ ⦆ i))
α∞⁺-is-directed
\end{code}
Similarly, if each 𝓓ᵢ is structurally algebraic then so is its bilimit 𝓓∞.
\begin{code}
𝓓∞-structurally-algebraic : ((i : I) → structurally-algebraic (𝓓 i))
→ structurally-algebraic 𝓓∞
𝓓∞-structurally-algebraic 𝓐 =
record
{ index-of-compact-family = index-of-approximating-family C∞
; compact-family = approximating-family C∞
; compact-family-is-directed = approximating-family-is-directed C∞
; compact-family-is-compact = γ
; compact-family-∐-= = approximating-family-∐-= C∞
}
where
open structurally-continuous
open structurally-algebraic
𝓒 : (i : I) → structurally-continuous (𝓓 i)
𝓒 i = structurally-continuous-if-structurally-algebraic (𝓓 i) (𝓐 i)
C∞ : structurally-continuous 𝓓∞
C∞ = 𝓓∞-structurally-continuous 𝓒
J∞ : ⟨ 𝓓∞ ⟩ → 𝓥 ̇
J∞ = index-of-approximating-family C∞
α∞ : (σ : ⟨ 𝓓∞ ⟩) → J∞ σ → ⟨ 𝓓∞ ⟩
α∞ = approximating-family C∞
γ : (σ : ⟨ 𝓓∞ ⟩) (j : J∞ σ) → is-compact 𝓓∞ (α∞ σ j)
γ σ (i , j) = embeddings-preserve-compactness (𝓓 i) 𝓓∞
(ε∞ i) (ε∞-is-continuous i) (π∞ i) (π∞-is-continuous i)
ε∞-section-of-π∞ ε∞π∞-deflation
(compact-family (𝓐 i) (⦅ σ ⦆ i) j)
(compact-family-is-compact (𝓐 i) (⦅ σ ⦆ i) j)
\end{code}
With a little bit more work, we can show that if each 𝓓ᵢ comes equipped with a
small (compact) basis, then the bilimit 𝓓∞ does too.
\begin{code}
𝓓∞-has-small-basis : ((i : I) → has-specified-small-basis (𝓓 i))
→ has-specified-small-basis 𝓓∞
𝓓∞-has-small-basis 𝓑 = (B∞ , β∞ , β∞-is-small-basis)
where
B : I → 𝓥 ̇
B i = pr₁ (𝓑 i)
β : (i : I) → B i → ⟨ 𝓓 i ⟩
β i = pr₁ (pr₂ (𝓑 i))
β-is-small-basis : (i : I) → is-small-basis (𝓓 i) (β i)
β-is-small-basis i = pr₂ (pr₂ (𝓑 i))
B∞ : 𝓥 ̇
B∞ = Σ i ꞉ I , B i
β∞ : B∞ → ⟨ 𝓓∞ ⟩
β∞ (i , b) = ε∞ i (β i b)
𝓓s-are-locally-small : (i : I) → is-locally-small (𝓓 i)
𝓓s-are-locally-small i = locally-small-if-small-basis (𝓓 i) (β i)
(β-is-small-basis i)
𝓓s-are-structurally-continuous : (i : I) → structurally-continuous (𝓓 i)
𝓓s-are-structurally-continuous i =
structurally-continuous-if-specified-small-basis (𝓓 i)
(B i , β i , β-is-small-basis i)
β∞-is-small-basis : is-small-basis 𝓓∞ β∞
β∞-is-small-basis =
record
{ ≪ᴮ-is-small = lemma₁
; ↡ᴮ-is-directed = lemma₂
; ↡ᴮ-is-sup = lemma₃
}
where
open is-small-basis
lemma₁ : (σ : ⟨ 𝓓∞ ⟩) (b : B∞) → is-small (β∞ b ≪⟨ 𝓓∞ ⟩ σ)
lemma₁ σ (i , b) =
≪-is-small-valued-str 𝓓∞
(𝓓∞-structurally-continuous 𝓓s-are-structurally-continuous)
(𝓓∞-is-locally-small 𝓓s-are-locally-small)
(β∞ (i , b)) σ
module _
(σ : ⟨ 𝓓∞ ⟩)
where
↡ᴮₛ⁺ : (i : I) → 𝓥 ̇
↡ᴮₛ⁺ i = ↡ᴮₛ (β-is-small-basis i) (⦅ σ ⦆ i)
↡ιₛ⁺ : (i : I) → ↡ᴮₛ⁺ i → ⟨ 𝓓 i ⟩
↡ιₛ⁺ i = ↡-inclusionₛ (β-is-small-basis i) (⦅ σ ⦆ i)
open 𝓓∞-family ↡ᴮₛ⁺ ↡ιₛ⁺
ι : J∞ → ↡ᴮ 𝓓∞ β∞ σ
ι (i , b , u) = ((i , b) , v)
where
v : ε∞ i (β i b) ≪⟨ 𝓓∞ ⟩ σ
v = ≪-⊑-to-≪ 𝓓∞ w (ε∞π∞-deflation σ)
where
w : ε∞ i (β i b) ≪⟨ 𝓓∞ ⟩ ε∞ i (⦅ σ ⦆ i)
w = embeddings-preserve-≪ (𝓓 i) 𝓓∞
(ε∞ i) (ε∞-is-continuous i) (π∞ i) (π∞-is-continuous i)
ε∞-section-of-π∞ ε∞π∞-deflation
(β i b) (⦅ σ ⦆ i) (≪ᴮₛ-to-≪ᴮ (β-is-small-basis i) u)
sublemma₁ : is-Directed 𝓓∞ (↡-inclusion 𝓓∞ β∞ σ ∘ ι)
sublemma₁ = α∞-is-directed-lemma σ
(λ i → ↡ᴮₛ-is-directed (β-is-small-basis i) (⦅ σ ⦆ i))
(λ i → ↡ᴮₛ-∐-= (β-is-small-basis i) (⦅ σ ⦆ i))
(λ i → ↡ᴮₛ-is-way-below (β-is-small-basis i) (⦅ σ ⦆ i))
sublemma₂ : σ = ∐ 𝓓∞ sublemma₁
sublemma₂ = (α∞-is-directed-sup-lemma σ δs es sublemma₁) ⁻¹
where
δs : (i : I) → is-Directed (𝓓 i) (↡-inclusionₛ (β-is-small-basis i) (⦅ σ ⦆ i))
δs i = ↡ᴮₛ-is-directed (β-is-small-basis i) (⦅ σ ⦆ i)
es : (i : I) → ∐ (𝓓 i) (δs i) = ⦅ σ ⦆ i
es i = ↡ᴮₛ-∐-= (β-is-small-basis i) (⦅ σ ⦆ i)
lemma₂ : is-Directed 𝓓∞ (↡-inclusion 𝓓∞ β∞ σ)
lemma₂ = ↡ᴮ-directedness-criterion 𝓓∞ β∞ σ ι
sublemma₁ (=-to-⊑ 𝓓∞ sublemma₂)
lemma₃ : is-sup (underlying-order 𝓓∞) σ (↡-inclusion 𝓓∞ β∞ σ)
lemma₃ = ↡ᴮ-sup-criterion 𝓓∞ β∞ σ ι claim
where
claim : is-sup (underlying-order 𝓓∞) σ (↡-inclusion 𝓓∞ β∞ σ ∘ ι)
claim =
transport (λ - → is-sup (underlying-order 𝓓∞) - (↡-inclusion 𝓓∞ β∞ σ ∘ ι))
(sublemma₂ ⁻¹)
(∐-is-sup 𝓓∞ sublemma₁)
𝓓∞-has-small-compact-basis :
((i : I) → has-specified-small-compact-basis (𝓓 i))
→ has-specified-small-compact-basis 𝓓∞
𝓓∞-has-small-compact-basis κ = (B∞ , β∞ , γ)
where
B : (i : I) → 𝓥 ̇
B i = pr₁ (κ i)
β : (i : I) → B i → ⟨ 𝓓 i ⟩
β i = pr₁ (pr₂ (κ i))
β-is-small-compact-basis : (i : I) → is-small-compact-basis (𝓓 i) (β i)
β-is-small-compact-basis i = pr₂ (pr₂ (κ i))
β-is-small-basis : (i : I) → is-small-basis (𝓓 i) (β i)
β-is-small-basis i = compact-basis-is-basis (𝓓 i) (β i)
(β-is-small-compact-basis i)
𝔹 : has-specified-small-basis 𝓓∞
𝔹 = 𝓓∞-has-small-basis (λ i → (B i , β i , β-is-small-basis i))
B∞ : 𝓥 ̇
B∞ = pr₁ 𝔹
β∞ : B∞ → ⟨ 𝓓∞ ⟩
β∞ = pr₁ (pr₂ 𝔹)
β∞-is-small-basis : is-small-basis 𝓓∞ β∞
β∞-is-small-basis = pr₂ (pr₂ 𝔹)
γ : is-small-compact-basis 𝓓∞ β∞
γ = small-and-compact-basis 𝓓∞ β∞ β∞-is-small-basis β∞-is-compact
where
open is-small-compact-basis
β∞-is-compact : (b : B∞) → is-compact 𝓓∞ (β∞ b)
β∞-is-compact (i , b) = embeddings-preserve-compactness (𝓓 i) 𝓓∞
(ε∞ i) (ε∞-is-continuous i)
(π∞ i) (π∞-is-continuous i)
ε∞-section-of-π∞ ε∞π∞-deflation
(β i b)
(basis-is-compact (β-is-small-compact-basis i) b)
\end{code}