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}