Tom de Jong, 9 February 2022
We describe how to freely add a least element to a dcpo. This is done by lifting
the underlying set, but when ordering the lifting, we have to take the order on
the original dcpo into account.
We also show that taking the free dcpo on a set X coincides with freely adding a
least element to X when viewed as a discretely-ordered dcpo.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan hiding (J)
open import UF.FunExt
open import UF.PropTrunc
open import UF.Subsingletons
module DomainTheory.Lifting.LiftingDcpo
        (pt : propositional-truncations-exist)
        (fe : Fun-Ext)
        (π₯ : Universe)
        (pe : propext π₯)
       where
open PropositionalTruncation pt
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.Sets
open import UF.Subsingletons-FunExt
open import Lifting.Construction π₯ hiding (β₯)
open import Lifting.IdentityViaSIP π₯
open import Lifting.Miscelanea π₯
open import Lifting.Miscelanea-PropExt-FunExt π₯ pe fe
                                             renaming ( β'-to-β to β'-to-β''
                                                      ; β-to-β' to β''-to-β')
open import OrderedTypes.Poset fe
open import DomainTheory.Basics.Dcpo pt fe π₯
open import DomainTheory.Basics.Miscelanea pt fe π₯
open import DomainTheory.Basics.Pointed pt fe π₯
open import DomainTheory.Lifting.LiftingSet pt fe π₯ pe
             renaming ( π-DCPO  to π-DCPO-on-set ; π-DCPOβ₯ to π-DCPOβ₯-on-set)
\end{code}
We first construct the pointed dcpo.
\begin{code}
module freely-add-β₯
        (π : DCPO {π€} {π£})
       where
 πD : π₯ βΊ β π€ Μ
 πD = π β¨ π β©
 _β_ : πD β πD β π₯ β π£ Μ
 (P , Ο , _) β (Q , Ο , _) = Ξ£ f κ (P β Q) , ((p : P) β Ο p ββ¨ π β© Ο (f p))
 β-is-prop-valued : (k l : πD) β is-prop (k β l)
 β-is-prop-valued k l =
  Ξ£-is-prop (Ξ -is-prop fe (Ξ» p β being-defined-is-prop l))
            (Ξ» f β Ξ -is-prop fe (Ξ» p β prop-valuedness π
                                        (value k p) (value l (f p))))
 β-is-reflexive : (l : πD) β l β l
 β-is-reflexive l = (id , (Ξ» p β reflexivity π (value l p)))
 β-is-transitive : (k l m : πD) β k β l β l β m β k β m
 β-is-transitive k l m (f , s) (g , t) = (g β f , Ξ³)
  where
   Ξ³ : (p : is-defined k) β value k p ββ¨ π β© value m (g (f p))
   Ξ³ p = value k p         ββ¨ π β©[ s p     ]
         value l (f p)     ββ¨ π β©[ t (f p) ]
         value m (g (f p)) ββ¨ π β©
 β-is-antisymmetric : (k l : πD) β k β l β l β k β k οΌ l
 β-is-antisymmetric k l (f , s) (g , t) = β-to-οΌ Ξ³
  where
   Ξ³ : k β l
   Ξ³ = (e , dfunext fe (Ξ» p β antisymmetry π (value k p) (value l (β e β p))
                               (s p) (h p)))
    where
     e : is-defined k β is-defined l
     e = logically-equivalent-props-are-equivalent (being-defined-is-prop k)
                                                   (being-defined-is-prop l) f g
     h : (p : is-defined k) β value l (β e β p) ββ¨ π β© value k p
     h p = value l (β e β p)     ββ¨ π β©[ t (β e β p) ]
           value k (g (β e β p)) ββ¨ π β©[ lemma       ]
           value k p             ββ¨ π β©
      where
       lemma = οΌ-to-β π (value-is-constant k (g (β e β p)) p)
 family-in-dcpo : {I : π₯ Μ } (Ξ± : I β πD) β (Ξ£ i κ I , is-defined (Ξ± i)) β β¨ π β©
 family-in-dcpo {I} Ξ± (i , p) = value (Ξ± i) p
 family-in-dcpo-is-semidirected : {I : π₯ Μ } (Ξ± : I β πD)
                                β is-semidirected _β_ Ξ±
                                β is-semidirected (underlying-order π)
                                   (family-in-dcpo Ξ±)
 family-in-dcpo-is-semidirected {I} Ξ± Ξ±-semidir (i , pα΅’) (j , pβ±Ό) =
  β₯β₯-functor Ξ³ (Ξ±-semidir i j)
   where
    Ξ³ : (Ξ£ k κ I , (Ξ± i β Ξ± k) Γ (Ξ± j β Ξ± k))
      β (Ξ£ q κ domain (family-in-dcpo Ξ±) ,
               value (Ξ± i) pα΅’ ββ¨ π β© value (Ξ± (prβ q)) (prβ q)
             Γ value (Ξ± j) pβ±Ό ββ¨ π β© value (Ξ± (prβ q)) (prβ q))
    Ξ³ (k , (f , s) , (g , t)) = ((k , f pα΅’) , (s pα΅’) , Ο)
     where
      Ο = value (Ξ± j) pβ±Ό     ββ¨ π β©[ t pβ±Ό  ]
          value (Ξ± k) (g pβ±Ό) ββ¨ π β©[ lemma ]
          value (Ξ± k) (f pα΅’) ββ¨ π β©
       where
        lemma = οΌ-to-β π (value-is-constant (Ξ± k) (g pβ±Ό) (f pα΅’))
 family-in-dcpo-is-directed : {I : π₯ Μ } (Ξ± : I β πD)
                            β is-directed _β_ Ξ±
                            β β i κ I , is-defined (Ξ± i)
                            β is-Directed π (family-in-dcpo Ξ±)
 family-in-dcpo-is-directed Ξ± Ξ΄ q =
  (q , family-in-dcpo-is-semidirected Ξ± (semidirected-if-directed _β_ Ξ± Ξ΄))
 π-DCPO : DCPO {π₯ βΊ β π€} {π₯ β π£}
 π-DCPO = (πD , _β_ , (lifting-of-set-is-set (sethood π)
                    , β-is-prop-valued
                    , β-is-reflexive
                    , β-is-transitive
                    , β-is-antisymmetric) ,
                    Ξ³)
  where
   Ξ³ : is-directed-complete _β_
   Ξ³ I Ξ± Ξ΄ = (s , s-is-ub , s-is-lb-of-ubs)
    where
     J : π₯ Μ
     J = Ξ£ i κ I , is-defined (Ξ± i)
     Ξ² : J β β¨ π β©
     Ξ² = family-in-dcpo Ξ±
     Ξ΅ : β₯ J β₯ β is-Directed π Ξ²
     Ξ΅ = family-in-dcpo-is-directed Ξ± Ξ΄
     s : πD
     s = β₯ J β₯ , t
      where
       t : (β₯ J β₯ β β¨ π β©) Γ is-prop β₯ J β₯
       t = (Ξ» q β β π (Ξ΅ q)) , β₯β₯-is-prop
     s-is-ub : (i : I) β Ξ± i β s
     s-is-ub i = (f , (Ξ» qα΅’ β β-is-upperbound π (Ξ΅ (f qα΅’)) (i , qα΅’)))
      where
       f : is-defined (Ξ± i) β β₯ J β₯
       f qα΅’ = β£ i , qα΅’ β£
     s-is-lb-of-ubs : is-lowerbound-of-upperbounds _β_ s Ξ±
     s-is-lb-of-ubs l l-is-ub = (f , r)
      where
       f : β₯ J β₯ β is-defined l
       f = β₯β₯-rec (being-defined-is-prop l) (Ξ» (i , qα΅’) β prβ (l-is-ub i) qα΅’)
       r : (q : β₯ J β₯) β β π (Ξ΅ q) ββ¨ π β© value l (f q)
       r q = β-is-lowerbound-of-upperbounds π (Ξ΅ q) (value l (f q)) ub
        where
         ub : (j : J) β Ξ² j ββ¨ π β© value l (f q)
         ub (i , qα΅’) = value (Ξ± i) qα΅’               ββ¨ π β©[ prβ (l-is-ub i) qα΅’ ]
                       value l (prβ (l-is-ub i) qα΅’) ββ¨ π β©[ lemma              ]
                       value l (f q)                ββ¨ π β©
          where
           lemma = οΌ-to-β π (value-is-constant l (prβ (l-is-ub i) qα΅’) (f q))
 π-DCPOβ₯ : DCPOβ₯ {π₯ βΊ β π€} {π₯ β π£}
 π-DCPOβ₯ = (π-DCPO , (π , π-elim , π-is-prop)
                   , (Ξ» l β π-elim , π-induction))
\end{code}
Added 3 July 2024 (but known much earlier of course).
\begin{code}
 π-DCPO-is-locally-small : is-locally-small π β is-locally-small π-DCPO
 π-DCPO-is-locally-small ls =
  record { _ββ_ = _βΌ_ ;
           ββ-β-β = Ξ£-cong (Ξ» f β Ξ -cong fe fe (Ξ» p β ββ-β-β))}
  where
   open is-locally-small ls
   _βΌ_ : πD β πD β π₯ Μ
   (P , Ο , _) βΌ (Q , Ο , _) = Ξ£ f κ (P β Q) , ((p : P) β Ο p ββ Ο (f p))
\end{code}
Of course, the map Ξ· from the dcpo to the lifted dcpo should be Scott
continuous.
\begin{code}
 Ξ·-is-continuous : is-continuous π π-DCPO Ξ·
 Ξ·-is-continuous I Ξ± Ξ΄ = (ub , lb-of-ubs)
  where
   ub : (i : I) β Ξ· (Ξ± i) β Ξ· (β π Ξ΄)
   ub i = ((Ξ» β β β) , (Ξ» β β β-is-upperbound π Ξ΄ i))
   lb-of-ubs : is-lowerbound-of-upperbounds (underlying-order π-DCPO) (Ξ· (β π Ξ΄))
                (Ξ· β Ξ±)
   lb-of-ubs l l-is-ub = β₯β₯-rec (prop-valuedness π-DCPO (Ξ· (β π Ξ΄)) l)
                                Ξ³
                                (inhabited-if-Directed π Ξ± Ξ΄)
    where
     q : (i : I) β is-defined l
     q i = prβ (l-is-ub i) β
     ub' : (i j : I) β Ξ± j ββ¨ π β© value l (q i)
     ub' i j = Ξ± j           ββ¨ π β©[ prβ (l-is-ub j) β ]
               value l (q j) ββ¨ π β©[ οΌ-to-β π (value-is-constant l (q j) (q i)) ]
               value l (q i) ββ¨ π β©
     Ξ³ : I β Ξ· (β π Ξ΄) β l
     Ξ³ i = ((Ξ» β β q i)
          , (Ξ» β β β-is-lowerbound-of-upperbounds π Ξ΄ (value l (q i)) (ub' i)))
 π-order-lemma : {k l : πD} β k β' l β k β l
 π-order-lemma {k} {l} k-below-l = (prβ claim , (Ξ» p β οΌ-to-β π (prβ claim p)))
  where
   open import Lifting.UnivalentWildCategory π₯ β¨ π β© renaming (_β_ to _β''_)
   claim : k β'' l
   claim = β'-to-β'' k-below-l
\end{code}
We now prove that the construction above freely adds a least element to the
dcpo.
\begin{code}
 module _
         (π : DCPOβ₯ {π€'} {π£'})
         (f : β¨ π β© β βͺ π β«)
         (f-is-continuous : is-continuous π (π β») f)
        where
  open lifting-is-free-pointed-dcpo-on-set (sethood π) π f
  fΜ-is-monotone : is-monotone π-DCPO (π β») fΜ
  fΜ-is-monotone k l k-below-l = βΛ’Λ’-is-lowerbound-of-upperbounds π (f β value k)
                                 (being-defined-is-prop k) (fΜ l) lem
   where
    lem : (p : is-defined k) β f (value k p) ββͺ π β« fΜ l
    lem p = f (value k p) ββͺ π β«[ β¦
1β¦ ]
            f (value l q) ββͺ π β«[ β¦
2β¦ ]
            fΜ l           ββͺ π β«
     where
      q : is-defined l
      q = prβ k-below-l p
      β¦
1β¦ = monotone-if-continuous π (π β») (f , f-is-continuous)
             (value k p) (value l q) (prβ k-below-l p)
      β¦
2β¦ = βΛ’Λ’-is-upperbound π (f β value l) (being-defined-is-prop l) q
  fΜ-is-continuous' : is-continuous π-DCPO (π β») fΜ
  fΜ-is-continuous' = continuity-criterion π-DCPO (π β») fΜ fΜ-is-monotone Ξ³
   where
    Ξ³ : (I : π₯ Μ )(Ξ± : I β β¨ π-DCPO β©) (Ξ΄ : is-Directed π-DCPO Ξ±)
      β fΜ (β π-DCPO {I} {Ξ±} Ξ΄) ββͺ π β«
        β (π β») (image-is-directed π-DCPO (π β») fΜ-is-monotone {I} {Ξ±} Ξ΄)
    Ξ³ I Ξ± Ξ΄ = βΛ’Λ’-is-lowerbound-of-upperbounds π (f β value s)
               (being-defined-is-prop s) (β (π β») Ξ΅) lem
     where
      s : β¨ π-DCPO β©
      s = β π-DCPO {I} {Ξ±} Ξ΄
      Ξ΅ : is-Directed (π β») (fΜ β Ξ±)
      Ξ΅ = image-is-directed π-DCPO (π β») fΜ-is-monotone {I} {Ξ±} Ξ΄
      lem : (q : is-defined s) β f (value s q) ββͺ π β« β (π β») Ξ΅
      lem q = f (value s q) ββͺ π β«[ β¦
1β¦ ]
              f (β π Ξ΄')    ββͺ π β«[ β¦
2β¦ ]
              β (π β») Ξ΅'    ββͺ π β«[ β¦
3β¦ ]
              β (π β») Ξ΅     ββͺ π β«
       where
        Ξ΄' : is-Directed π (family-in-dcpo Ξ±)
        Ξ΄' = family-in-dcpo-is-directed Ξ± Ξ΄ q
        Ξ΅' : is-Directed (π β») (f β family-in-dcpo Ξ±)
        Ξ΅' = image-is-directed' π (π β») (f , f-is-continuous) Ξ΄'
        β¦
1β¦ = reflexivity (π β») (f (β π Ξ΄'))
        β¦
2β¦ = continuous-β-β π (π β») (f , f-is-continuous) Ξ΄'
        β¦
3β¦ = β-is-lowerbound-of-upperbounds (π β») Ξ΅' (β (π β») Ξ΅) claim
         where
          claim : ((i , p) : (Ξ£ i κ I , is-defined (Ξ± i)))
                β (f (value (Ξ± i) p)) ββͺ π β« β (π β») Ξ΅
          claim (i , p) = (f (value (Ξ± i) p)) ββͺ π β«[ β¦
β β¦ ]
                          fΜ (Ξ± i)             ββͺ π β«[ β¦
β‘β¦ ]
                          β (π β») Ξ΅           ββͺ π β«
           where
            β¦
β β¦ = βΛ’Λ’-is-upperbound π (f β value (Ξ± i))
                   (being-defined-is-prop (Ξ± i)) p
            β¦
β‘β¦ = β-is-upperbound (π β») Ξ΅ i
  fΜ-is-strict' : is-strict π-DCPOβ₯ π fΜ
  fΜ-is-strict' = fΜ-is-strict
  fΜ-after-Ξ·-is-f' : fΜ β Ξ· βΌ f
  fΜ-after-Ξ·-is-f' = fΜ-after-Ξ·-is-f
  π-DCPOβ : DCPO
  π-DCPOβ = π-DCPO-on-set (sethood π)
  π-monotone-lemma : (g : πD β βͺ π β«)
                   β is-monotone π-DCPO  (π β») g
                   β is-monotone π-DCPOβ (π β») g
  π-monotone-lemma g g-mon k l k-below-l = g-mon k l (π-order-lemma k-below-l)
  π-directed-lemma : {I : π₯ Μ } {Ξ± : I β πD}
                   β is-Directed π-DCPOβ Ξ±
                   β is-Directed π-DCPO Ξ±
  π-directed-lemma {I} {Ξ±} Ξ΄ = (inhabited-if-Directed π-DCPOβ Ξ± Ξ΄ , Ο)
   where
    Ο : is-semidirected _β_ Ξ±
    Ο i j = β₯β₯-functor Ξ³ (semidirected-if-Directed π-DCPOβ Ξ± Ξ΄ i j)
     where
      Ξ³ : (Ξ£ k κ I , (Ξ± i β' Ξ± k) Γ (Ξ± j β' Ξ± k))
        β (Ξ£ k κ I , (Ξ± i β Ξ± k) Γ (Ξ± j β Ξ± k))
      Ξ³ (k , u , v) = (k , π-order-lemma u , π-order-lemma v)
  π-sup-lemma : {I : π₯ Μ } {Ξ± : I β πD} (Ξ΄ : is-Directed π-DCPOβ Ξ±)
              β β π-DCPOβ Ξ΄ οΌ β π-DCPO {I} {Ξ±} (π-directed-lemma Ξ΄)
  π-sup-lemma {I} {Ξ±} Ξ΄ = β-to-οΌ (e , dfunext fe Ξ³)
   where
    Ξ΅ : is-Directed π-DCPO Ξ±
    Ξ΅ = π-directed-lemma Ξ΄
    e : is-defined (β π-DCPOβ Ξ΄) β is-defined (β π-DCPO {I} {Ξ±} Ξ΅)
    e = β-refl (β i κ I , is-defined (Ξ± i))
    Ξ³ : (q : is-defined (β π-DCPO {I} {Ξ±} Ξ΅))
      β value (β π-DCPOβ Ξ΄) q οΌ value (β π-DCPO {I} {Ξ±} Ξ΅) (β e β q)
    Ξ³ q = β₯β₯-rec (sethood π) goal q
     where
      goal : (Ξ£ i κ I , is-defined (Ξ± i))
           β value (β π-DCPOβ Ξ΄) q οΌ value (β π-DCPO {I} {Ξ±} Ξ΅) (β e β q)
      goal (i , qα΅’) = value (β π-DCPOβ Ξ΄) q                οΌβ¨ β¦
1β¦  β©
                      value (Ξ± i) qα΅’                       οΌβ¨ β¦
2β¦  β©
                      β π Ξ΅'                               οΌβ¨ refl β©
                      value (β π-DCPO {I} {Ξ±} Ξ΅) (β e β q) β
       where
        Ξ΅' : is-Directed π (family-in-dcpo Ξ±)
        Ξ΅' = family-in-dcpo-is-directed Ξ± Ξ΅ q
        β¦
1β¦ = (οΌ-of-values-from-οΌ (family-defined-somewhere-sup-οΌ
                                   (sethood π) Ξ΄ i qα΅’)) β»ΒΉ
        β¦
2β¦ = antisymmetry π (value (Ξ± i) qα΅’) (β π Ξ΅') β¦
β β¦ β¦
β‘β¦
         where
          β¦
β β¦ : value (Ξ± i) qα΅’ ββ¨ π β© β π Ξ΅'
          β¦
β β¦ = β-is-upperbound π Ξ΅' (i , qα΅’)
          β¦
β‘β¦ : β π Ξ΅' ββ¨ π β© value (Ξ± i) qα΅’
          β¦
β‘β¦ = β-is-lowerbound-of-upperbounds π Ξ΅' (value (Ξ± i) qα΅’) ub
           where
            ub : ((j , qβ±Ό) : Ξ£ i' κ I , is-defined (Ξ± i'))
               β value (Ξ± j) qβ±Ό ββ¨ π β© value (Ξ± i) qα΅’
            ub (j , qβ±Ό) = οΌ-to-β π (οΌ-of-values-from-οΌ (lemma j qβ±Ό))
             where
              lemma : (j : I) (qβ±Ό : is-defined (Ξ± j)) β Ξ± j οΌ Ξ± i
              lemma j qβ±Ό =
               β₯β₯-rec (lifting-of-set-is-set (sethood π)) claim
                      (semidirected-if-Directed π-DCPOβ Ξ± Ξ΄ i j)
               where
                claim : (Ξ£ k κ I , (Ξ± i β' Ξ± k) Γ (Ξ± j β' Ξ± k)) β Ξ± j οΌ Ξ± i
                claim (k , u , v) = v qβ±Ό β (u qα΅’) β»ΒΉ
  π-continuity-lemma : (g : πD β βͺ π β«)
                     β is-continuous π-DCPO  (π β») g
                     β is-continuous π-DCPOβ (π β») g
  π-continuity-lemma g g-cont = continuity-criterion' π-DCPOβ (π β») g g-mon lemma
   where
    g-mon : is-monotone π-DCPOβ (π β») g
    g-mon = π-monotone-lemma g (monotone-if-continuous π-DCPO (π β») (g , g-cont))
    lemma : (I : π₯ Μ )(Ξ± : I β πD) (Ξ΄ : is-Directed π-DCPOβ Ξ±)
          β is-lowerbound-of-upperbounds (underlying-order (π β»))
                                         (g (β π-DCPOβ Ξ΄)) (g β Ξ±)
    lemma I Ξ± Ξ΄ = transport T claim
                   (sup-is-lowerbound-of-upperbounds (underlying-order (π β»))
                                                     (g-cont I Ξ± Ξ΅))
     where
      T : πD β π₯ β π€' β π£' Μ
      T - = is-lowerbound-of-upperbounds (underlying-order (π β»)) (g -) (g β Ξ±)
      Ξ΅ : is-Directed π-DCPO Ξ±
      Ξ΅ = π-directed-lemma Ξ΄
      claim : β π-DCPO {I} {Ξ±} Ξ΅ οΌ β π-DCPOβ {I} {Ξ±} Ξ΄
      claim = (π-sup-lemma Ξ΄) β»ΒΉ
  fΜ-is-unique' : (g : πD β βͺ π β«)
               β is-continuous π-DCPO (π β») g
               β is-strict π-DCPOβ₯ π g
               β g β Ξ· οΌ f
               β g βΌ fΜ
  fΜ-is-unique' g g-cont = fΜ-is-unique g g-cont'
   where
    g-cont' : is-continuous (π-DCPO-on-set (sethood π)) (π β») g
    g-cont' = π-continuity-lemma g g-cont
  π-gives-the-free-pointed-dcpo-on-a-dcpo :
   β! h κ (βͺ π-DCPOβ₯ β« β βͺ π β«) , is-continuous (π-DCPOβ₯ β») (π β») h
                                Γ is-strict π-DCPOβ₯ π h
                                Γ (h β Ξ· οΌ f)
  π-gives-the-free-pointed-dcpo-on-a-dcpo =
   (fΜ , fΜ-is-continuous' , fΜ-is-strict' , (dfunext fe fΜ-after-Ξ·-is-f')) , Ξ³
    where
     Ξ³ : is-central (Ξ£ h κ (βͺ π-DCPOβ₯ β« β βͺ π β«)
                         , is-continuous (π-DCPOβ₯ β») (π β») h
                         Γ is-strict π-DCPOβ₯ π h
                         Γ (h β Ξ· οΌ f))
          (fΜ , fΜ-is-continuous' , fΜ-is-strict' , dfunext fe fΜ-after-Ξ·-is-f')
     Ξ³ (g , cont , str , eq) =
      to-subtype-οΌ (Ξ» h β Γβ-is-prop
                           (being-continuous-is-prop (π-DCPOβ₯ β») (π β») h)
                           (being-strict-is-prop π-DCPOβ₯ π h)
                           (equiv-to-prop
                             (β-funext fe (h β Ξ·) f)
                             (Ξ -is-prop fe (Ξ» _ β sethood (π β»)))))
                           ((dfunext fe (fΜ-is-unique' g cont str eq)) β»ΒΉ)
\end{code}
Finally, we show that taking the free dcpo on a set X coincides with freely
adding a least element to X when viewed as a discretely-ordered dcpo. This also
follows abstractly from the fact that we can compose adjunctions, but we give a
direct proof.
\begin{code}
module _
        {X : π€ Μ }
        (X-is-set : is-set X)
       where
 XΜ : DCPO {π€} {π€}
 XΜ = (X , _οΌ_ , pa , Ξ³)
  where
   open PosetAxioms {π€} {π€} {X} _οΌ_
   pa : poset-axioms
   pa = (X-is-set
      , (Ξ» x y β X-is-set)
      , (Ξ» x β refl)
      , (Ξ» x y z β _β_)
      , (Ξ» x y u v β u))
   Ξ³ : is-directed-complete _οΌ_
   Ξ³ I Ξ± Ξ΄ = β₯β₯-rec (having-sup-is-prop _οΌ_ pa Ξ±) lemma
                    (inhabited-if-directed _οΌ_ Ξ± Ξ΄)
    where
     Ξ±-constant : (i j : I) β Ξ± i οΌ Ξ± j
     Ξ±-constant i j = β₯β₯-rec X-is-set h (semidirected-if-directed _οΌ_ Ξ± Ξ΄ i j)
      where
       h : (Ξ£ k κ I , (Ξ± i οΌ Ξ± k) Γ (Ξ± j οΌ Ξ± k)) β Ξ± i οΌ Ξ± j
       h (k , p , q) = p β q β»ΒΉ
     lemma : I β has-sup _οΌ_ Ξ±
     lemma i = (Ξ± i , ub , lb-of-ubs)
      where
       ub : (j : I) β Ξ± j οΌ Ξ± i
       ub j = Ξ±-constant j i
       lb-of-ubs : is-lowerbound-of-upperbounds _οΌ_ (Ξ± i) Ξ±
       lb-of-ubs y y-is-ub = y-is-ub i
 module _ where
  open freely-add-β₯ XΜ
  π-order-lemma-converse : {k l : π X} β k β l β k β' l
  π-order-lemma-converse {k} {l} k-below-l = β''-to-β' k-below-l
 open freely-add-β₯
 liftings-coincide : π-DCPOβ₯ XΜ βα΅αΆα΅α΅β₯ π-DCPOβ₯-on-set X-is-set
 liftings-coincide = βα΅αΆα΅α΅-to-βα΅αΆα΅α΅β₯ (π-DCPOβ₯ XΜ) π-DCPOβ₯-X
                           (id , id , (Ξ» _ β refl) , (Ξ» _ β refl) ,
                            contβ , contβ)
  where
   π-DCPOβ₯-X : DCPOβ₯
   π-DCPOβ₯-X = π-DCPOβ₯-on-set X-is-set
   contβ : is-continuous (π-DCPOβ₯ XΜ β») (π-DCPOβ₯-X β») id
   contβ I Ξ± Ξ΄ = (ub , lb-of-ubs)
    where
     ub : (i : I) β Ξ± i β' β (π-DCPOβ₯ XΜ β») {I} {Ξ±} Ξ΄
     ub i = (π-order-lemma-converse (β-is-upperbound (π-DCPOβ₯ XΜ β») {I} {Ξ±} Ξ΄ i))
     lb-of-ubs : is-lowerbound-of-upperbounds _β'_ (β (π-DCPOβ₯ XΜ β») {I} {Ξ±} Ξ΄) Ξ±
     lb-of-ubs l l-is-ub = π-order-lemma-converse
                            (β-is-lowerbound-of-upperbounds (π-DCPOβ₯ XΜ β») {I} {Ξ±}
                            Ξ΄ l
                            (Ξ» i β π-order-lemma XΜ (l-is-ub i)))
   contβ : is-continuous (π-DCPOβ₯-X β») (π-DCPOβ₯ XΜ β») id
   contβ = π-continuity-lemma XΜ (π-DCPOβ₯ XΜ) Ξ· (Ξ·-is-continuous XΜ)
            id (id-is-continuous (π-DCPOβ₯ XΜ β»))
\end{code}