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}