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₄ =  (ε lᵢ x) (ε lᵢ y) ( x y l)
        where
          : is-monotone (𝓓 i) (𝓓 k) (ε lᵢ)
          = monotone-if-continuous (𝓓 i) (𝓓 k)
               ((ε lᵢ) , (ε-is-continuous lᵢ))
          : is-monotone (𝓓 k) (𝓓 j) (π lⱼ)
          = 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}