Brendan Hart 2019-2020 Addition by Tom de Jong in July 2024. \begin{code} {-# OPTIONS --safe --without-K #-} open import MLTT.Spartan open import UF.PropTrunc open import UF.FunExt module DomainTheory.Basics.Products (pt : propositional-truncations-exist) (fe : β {π€ π₯} β funext π€ π₯) where open PropositionalTruncation pt open import OrderedTypes.Poset fe open import UF.Base open import UF.Subsingletons open import UF.Subsingletons-FunExt open import UF.Sets open PosetAxioms \end{code} First, let's define the product of two DCPOs. \begin{code} module DcpoProductsGeneral (π₯ : Universe) where open import DomainTheory.Basics.Dcpo pt fe π₯ open import DomainTheory.Basics.Miscelanea pt fe π₯ open import DomainTheory.Basics.Pointed pt fe π₯ module _ {D : π€Μ } {E : π€' Μ } where _β-Γ_ : (D β D β π£ Μ ) β (E β E β π£' Μ ) β (D Γ E β D Γ E β π£ β π£' Μ ) _β-Γ_ _ββ_ _ββ_ (a , b) (c , d) = (a ββ c) Γ (b ββ d) prββΞ±-is-directed : {I : π₯ Μ } β {Ξ± : I β D Γ E} β (_ββ_ : D β D β π£ Μ ) β (_ββ_ : E β E β π£' Μ ) β is-directed (_ββ_ β-Γ _ββ_) Ξ± β is-directed _ββ_ (prβ β Ξ±) prββΞ±-is-directed {_} {_} {I} {Ξ±} _ββ_ _ββ_ Ξ΄ = inhabited-if-directed (_ββ_ β-Γ _ββ_) Ξ± Ξ΄ , o where o : (i j : I) β β k κ I , ((prβ β Ξ±) i ββ (prβ β Ξ±) k Γ (prβ β Ξ±) j ββ (prβ β Ξ±) k) o i j = β₯β₯-functor (Ξ» (a , (b , _) , c , _) β a , b , c) (semidirected-if-directed (_ββ_ β-Γ _ββ_) Ξ± Ξ΄ i j) prββΞ±-is-directed : {I : π₯ Μ } β {Ξ± : I β D Γ E} β (_ββ_ : D β D β π£ Μ ) β (_ββ_ : E β E β π£' Μ ) β is-directed (_ββ_ β-Γ _ββ_) Ξ± β is-directed _ββ_ (prβ β Ξ±) prββΞ±-is-directed {_} {_} {I} {Ξ±} _ββ_ _ββ_ Ξ΄ = inhabited-if-directed (_ββ_ β-Γ _ββ_) Ξ± Ξ΄ , o where o : (i j : I) β β k κ I , ((prβ β Ξ±) i ββ (prβ β Ξ±) k Γ (prβ β Ξ±) j ββ (prβ β Ξ±) k) o i j = β₯β₯-functor (Ξ» (a , (_ , b) , _ , c) β a , b , c) (semidirected-if-directed (_ββ_ β-Γ _ββ_) Ξ± Ξ΄ i j) infixr 30 _Γα΅αΆα΅α΅_ _Γα΅αΆα΅α΅_ : DCPO {π€} {π£} β DCPO {π€'} {π£'} β DCPO {π€ β π€'} {π£ β π£'} π Γα΅αΆα΅α΅ π = (β¨ π β© Γ β¨ π β©) , (underlying-order π) β-Γ (underlying-order π) , axioms where axioms : dcpo-axioms (underlying-order π β-Γ underlying-order π) axioms = (Γ-is-set (sethood π) (sethood π) , prop , r , t , a) , c where _βπ_ = underlying-order π _βπ_ = underlying-order π _β_ = _βπ_ β-Γ _βπ_ prop : is-prop-valued _β_ prop (xβ , xβ) (yβ , yβ) (aβ , aβ) (bβ , bβ) = to-Γ-οΌ (prop-valuedness π xβ yβ aβ bβ) (prop-valuedness π xβ yβ aβ bβ) r : is-reflexive _β_ r a = reflexivity π (prβ a) , reflexivity π (prβ a) t : is-transitive _β_ t (xβ , xβ) (yβ , yβ) (zβ , zβ) (uβ , uβ) (vβ , vβ) = wβ , wβ where wβ = xβ ββ¨ π β©[ uβ ] yβ ββ¨ π β©[ vβ ] zβ ββ¨ π β© wβ = xβ ββ¨ π β©[ uβ ] yβ ββ¨ π β©[ vβ ] zβ ββ¨ π β© a : is-antisymmetric _β_ a (a , b) (c , d) (a-β-c , b-β-d) (c-β-a , d-β-b) = to-Γ-οΌ (antisymmetry π a c a-β-c c-β-a) (antisymmetry π b d b-β-d d-β-b) c : is-directed-complete _β_ c I Ξ± Ξ΄ = (β π prββΞ±-is-dir , β π prββΞ±-is-dir) , s where prββΞ±-is-dir : is-Directed π (prβ β Ξ±) prββΞ±-is-dir = prββΞ±-is-directed _βπ_ _βπ_ Ξ΄ prββΞ±-is-dir : is-Directed π (prβ β Ξ±) prββΞ±-is-dir = prββΞ±-is-directed _βπ_ _βπ_ Ξ΄ s : is-sup _β_ (β π prββΞ±-is-dir , β π prββΞ±-is-dir) Ξ± s = is-upper , is-least-upper where is-upper : is-upperbound _β_ (β π prββΞ±-is-dir , β π prββΞ±-is-dir) Ξ± is-upper i = (β-is-upperbound π prββΞ±-is-dir i , β-is-upperbound π prββΞ±-is-dir i) is-least-upper : (t : β¨ π β© Γ β¨ π β©) β is-upperbound _β_ t Ξ± β _β_ (β π prββΞ±-is-dir , β π prββΞ±-is-dir) t is-least-upper t@(x , y) u = lub-of-x , lub-of-y where x-is-upperbound : is-upperbound _βπ_ x (prβ β Ξ±) x-is-upperbound i = prβ (u i) y-is-upperbound : is-upperbound _βπ_ y (prβ β Ξ±) y-is-upperbound i = prβ (u i) lub-of-x = β-is-lowerbound-of-upperbounds π prββΞ±-is-dir x x-is-upperbound lub-of-y = β-is-lowerbound-of-upperbounds π prββΞ±-is-dir y y-is-upperbound \end{code} Some useful proofs on products. \begin{code} module _ (π : DCPO {π€} {π€'}) where constant-function-is-directed : { I : π₯ Μ } (h : β₯ I β₯) (d : β¨ π β©) β is-Directed π (Ξ» (i : I) β d) constant-function-is-directed h d = h , Ξ» i j β β£ i , (reflexivity π d , reflexivity π d) β£ constant-is-β-of-constant-function : {I : π₯ Μ } {d : β¨ π β©} (Ξ΄ : is-Directed π (Ξ» (i : I) β d)) β d οΌ β π Ξ΄ constant-is-β-of-constant-function {I} {d} Ξ΄ = antisymmetry π d (β π Ξ΄) lβ lβ where lβ : d ββ¨ π β© β π Ξ΄ lβ = β₯β₯-rec (prop-valuedness π d (β π Ξ΄)) (Ξ» (i : I) β β-is-upperbound π Ξ΄ i) (prβ Ξ΄) lβ : β π Ξ΄ ββ¨ π β© d lβ = β-is-lowerbound-of-upperbounds π Ξ΄ d (Ξ» i β reflexivity π d) module _ (π : DCPO {π€} {π€'}) (π : DCPO {π£} {π£'}) where prββΞ±-is-Directed : {I : π₯ Μ } {Ξ± : I β β¨ π Γα΅αΆα΅α΅ π β©} β is-Directed (π Γα΅αΆα΅α΅ π) Ξ± β is-Directed π (prβ β Ξ±) prββΞ±-is-Directed {I} {Ξ±} Ξ΄ = prββΞ±-is-directed (underlying-order π) (underlying-order π) Ξ΄ prββΞ±-is-Directed : {I : π₯ Μ } {Ξ± : I β β¨ π Γα΅αΆα΅α΅ π β©} β is-Directed (π Γα΅αΆα΅α΅ π) Ξ± β is-Directed π (prβ β Ξ±) prββΞ±-is-Directed = prββΞ±-is-directed (underlying-order π) (underlying-order π) β¨prβ,prββ©-is-directed : {I : π₯ Μ } β {Ξ±β : I β β¨ π β©} β {Ξ±β : I β β¨ π β©} β is-Directed π Ξ±β β is-Directed π Ξ±β β is-Directed (π Γα΅αΆα΅α΅ π) (Ξ» ((iβ , iβ) : I Γ I) β (Ξ±β iβ , Ξ±β iβ)) β¨prβ,prββ©-is-directed Ξ΄β@(hβ , sβ) Ξ΄β@(hβ , sβ) = (binary-choice hβ hβ) , Ξ» (iβ , iβ) (jβ , jβ) β β₯β₯-functor (Ξ» ((aβ , bβ , cβ) , (aβ , bβ , cβ)) β (aβ , aβ) , (bβ , bβ) , (cβ , cβ)) (binary-choice (sβ iβ jβ) (sβ iβ jβ)) ββ¨,β©οΌβ¨β,ββ© : {I : π₯ Μ } {Ξ± : I β β¨ π Γα΅αΆα΅α΅ π β©} β (Ξ΄ : is-Directed (π Γα΅αΆα΅α΅ π) Ξ±) β β (π Γα΅αΆα΅α΅ π) Ξ΄ οΌ (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨,β©οΌβ¨β,ββ© {I} {Ξ±} Ξ΄ = antisymmetry (π Γα΅αΆα΅α΅ π) (β (π Γα΅αΆα΅α΅ π) Ξ΄) (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨,β©ββ¨β,ββ© β¨β,ββ©βββ¨,β© where ββ¨,β©ββ¨β,ββ© : β (π Γα΅αΆα΅α΅ π) Ξ΄ ββ¨ π Γα΅αΆα΅α΅ π β© (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨,β©ββ¨β,ββ© = β-is-lowerbound-of-upperbounds (π Γα΅αΆα΅α΅ π) Ξ΄ (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) β,β-is-upperbound where β,β-is-upperbound : (i : I) β (Ξ± i) ββ¨ π Γα΅αΆα΅α΅ π β© (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) β,β-is-upperbound i = (β-is-upperbound π (prββΞ±-is-Directed Ξ΄) i) , (β-is-upperbound π (prββΞ±-is-Directed Ξ΄) i) β¨β,ββ©βββ¨,β© : (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨ π Γα΅αΆα΅α΅ π β© (β (π Γα΅αΆα΅α΅ π) Ξ΄) β¨β,ββ©βββ¨,β© = ββ , ββ where ββ : (β π (prββΞ±-is-Directed Ξ΄)) ββ¨ π β© (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) ββ = β-is-lowerbound-of-upperbounds π (prββΞ±-is-Directed Ξ΄) (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) prβ-ββ¨,β©-is-upperbound where prβ-ββ¨,β©-is-upperbound : (i : I) β ((prβ β Ξ±) i) ββ¨ π β© (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) prβ-ββ¨,β©-is-upperbound i = prβ (β-is-upperbound (π Γα΅αΆα΅α΅ π) Ξ΄ i) ββ : β π (prββΞ±-is-Directed Ξ΄) ββ¨ π β© prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄) ββ = β-is-lowerbound-of-upperbounds π (prββΞ±-is-Directed Ξ΄) (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) prβ-ββ¨,β©-is-upperbound where prβ-ββ¨,β©-is-upperbound : (i : I) β ((prβ β Ξ±) i) ββ¨ π β© (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) prβ-ββ¨,β©-is-upperbound i = prβ (β-is-upperbound (π Γα΅αΆα΅α΅ π) Ξ΄ i) β¨β,ββ©οΌββ¨,β© : {I : π₯ Μ } β {Ξ±β : I β β¨ π β©} β {Ξ±β : I β β¨ π β©} β (Ξ΄β : is-Directed π Ξ±β) β (Ξ΄β : is-Directed π Ξ±β) β (β π Ξ΄β , β π Ξ΄β) οΌ β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) β¨β,ββ©οΌββ¨,β© {I} {Ξ±β} {Ξ±β} Ξ΄β Ξ΄β = antisymmetry (π Γα΅αΆα΅α΅ π) (β π Ξ΄β , β π Ξ΄β) (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β)) β¨β,ββ©βββ¨,β© ββ¨,β©ββ¨β,ββ© where β¨β,ββ©βββ¨,β© : (β π Ξ΄β , β π Ξ΄β) ββ¨ π Γα΅αΆα΅α΅ π β© β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) β¨β,ββ©βββ¨,β© = ββ , ββ where ββ : β π Ξ΄β ββ¨ π β© prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β)) ββ = β-is-lowerbound-of-upperbounds π Ξ΄β (prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β))) p where p : (i : I) β (Ξ±β i) ββ¨ π β© (prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β))) p i = prβ (β-is-upperbound ((π Γα΅αΆα΅α΅ π)) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) (i , i)) ββ : β π Ξ΄β ββ¨ π β© prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β)) ββ = β-is-lowerbound-of-upperbounds π Ξ΄β (prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β))) p where p : (i : I) β (Ξ±β i) ββ¨ π β© (prβ (β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β))) p i = prβ (β-is-upperbound (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) (i , i)) ββ¨,β©ββ¨β,ββ© : β (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) ββ¨ π Γα΅αΆα΅α΅ π β© (β π Ξ΄β , β π Ξ΄β) ββ¨,β©ββ¨β,ββ© = β-is-lowerbound-of-upperbounds (π Γα΅αΆα΅α΅ π) (β¨prβ,prββ©-is-directed Ξ΄β Ξ΄β) (β π Ξ΄β , β π Ξ΄β) upperbound where upperbound : (i : I Γ I) β (Ξ±β (prβ i) , Ξ±β (prβ i)) ββ¨ π Γα΅αΆα΅α΅ π β© (β π Ξ΄β , β π Ξ΄β) upperbound i = β-is-upperbound π Ξ΄β (prβ i) , β-is-upperbound π Ξ΄β (prβ i) prβ-is-continuous : DCPO[ π Γα΅αΆα΅α΅ π , π ] prβ-is-continuous = prβ , c where c : is-continuous (π Γα΅αΆα΅α΅ π) π prβ c I Ξ± Ξ΄ = u , v where u : is-upperbound (underlying-order π) (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) (prβ β Ξ±) u i = prβ (β-is-upperbound (π Γα΅αΆα΅α΅ π) Ξ΄ i) v : (x : β¨ π β©) β ((i : I) β (prβ (Ξ± i)) ββ¨ π β© x) β (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) ββ¨ π β© x v x p = transport (Ξ» - β prβ - ββ¨ π β© x) (ββ¨,β©οΌβ¨β,ββ© Ξ΄) d where d : prβ (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨ π β© x d = β-is-lowerbound-of-upperbounds π (prββΞ±-is-Directed Ξ΄) x p prβ-is-continuous : DCPO[ π Γα΅αΆα΅α΅ π , π ] prβ-is-continuous = prβ , c where c : is-continuous (π Γα΅αΆα΅α΅ π) π prβ c I Ξ± Ξ΄ = u , v where u : is-upperbound (underlying-order π) (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) (prβ β Ξ±) u i = prβ (β-is-upperbound (π Γα΅αΆα΅α΅ π) Ξ΄ i) v : (y : β¨ π β©) β ((i : I) β (prβ (Ξ± i)) ββ¨ π β© y) β (prβ (β (π Γα΅αΆα΅α΅ π) Ξ΄)) ββ¨ π β© y v y p = transport (Ξ» - β prβ - ββ¨ π β© y) (ββ¨,β©οΌβ¨β,ββ© Ξ΄) e where e : prβ (β π (prββΞ±-is-Directed Ξ΄) , β π (prββΞ±-is-Directed Ξ΄)) ββ¨ π β© y e = β-is-lowerbound-of-upperbounds π (prββΞ±-is-Directed Ξ΄) y p infixr 30 _Γα΅αΆα΅α΅β₯_ _Γα΅αΆα΅α΅β₯_ : DCPOβ₯ {π€} {π£} β DCPOβ₯ {π€'} {π£'} β DCPOβ₯ {π€ β π€'} {π£ β π£'} π Γα΅αΆα΅α΅β₯ π = ((π β») Γα΅αΆα΅α΅ (π β»)) , least , p where least : β¨ (π β») Γα΅αΆα΅α΅ (π β») β© least = β₯ π , β₯ π p : is-least (underlying-order ((π β») Γα΅αΆα΅α΅ (π β»))) least p x = (β₯-is-least π (prβ x)) , (β₯-is-least π (prβ x)) module _ (π : DCPO {π€} {π€'}) (π : DCPO {π£} {π£'}) (π : DCPO {π¦} {π¦'}) where Γα΅αΆα΅α΅-assocβ : DCPO[ π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π , (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π ] Γα΅αΆα΅α΅-assocβ = f , c where f : β¨ π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π β© β β¨ (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π β© f (d , e , f) = (d , e) , f f-is-monotone : is-monotone (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) ((π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π) f f-is-monotone x y p = ((prβ p) , (prβ (prβ p))) , (prβ (prβ p)) c : is-continuous (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) ((π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π) f c I Ξ± Ξ΄ = u , v where assoc-β : β¨ (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π β© assoc-β = (prβ (β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄) , (prβ (prβ (β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄)))) , prβ (prβ (β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄)) u : is-upperbound (underlying-order ((π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π)) assoc-β (Ξ» i β ((prβ (Ξ± i)) , (prβ (prβ (Ξ± i)))) , (prβ (prβ (Ξ± i)))) u i = (prβ p , prβ (prβ p)) , prβ (prβ p) where p = β-is-upperbound (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄ i v : (w : β¨ (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π β©) β ((i : I) β f (Ξ± i) ββ¨ (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π β© w) β f (β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄) ββ¨ (π Γα΅αΆα΅α΅ π) Γα΅αΆα΅α΅ π β© w v w@((x , y) , z) p = f-is-monotone (β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄) w' l where w' = x , (y , z) w'-is-upperbound : is-upperbound (underlying-order (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π)) w' Ξ± w'-is-upperbound i = (prβ (prβ (p i))) , (prβ (prβ (p i))) , (prβ (p i)) l : β (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄ ββ¨ π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π β© w' l = β-is-lowerbound-of-upperbounds (π Γα΅αΆα΅α΅ π Γα΅αΆα΅α΅ π) Ξ΄ w' w'-is-upperbound to-Γ-DCPO : DCPO[ π , π ] β DCPO[ π , π ] β DCPO[ π , π Γα΅αΆα΅α΅ π ] to-Γ-DCPO π@(f , fc) π@(g , gc) = h , hc where h : β¨ π β© β β¨ π Γα΅αΆα΅α΅ π β© h d = f d , g d h-is-monotone : is-monotone π (π Γα΅αΆα΅α΅ π) h h-is-monotone x y p = monotone-if-continuous π π π x y p , monotone-if-continuous π π π x y p hc : is-continuous π (π Γα΅αΆα΅α΅ π) h hc I Ξ± Ξ΄ = u , v where u : is-upperbound (underlying-order (π Γα΅αΆα΅α΅ π)) (h (β π Ξ΄)) (h β Ξ±) u i = h-is-monotone (Ξ± i) (β π Ξ΄) (β-is-upperbound π Ξ΄ i) v : (t : β¨ π Γα΅αΆα΅α΅ π β©) β ((i : I) β (h (Ξ± i)) ββ¨ π Γα΅αΆα΅α΅ π β© t) β (h (β π Ξ΄)) ββ¨ π Γα΅αΆα΅α΅ π β© t v t@(y , z) p = lf , lg where lf : f (β π Ξ΄) ββ¨ π β© y lf = transport (Ξ» - β - ββ¨ π β© y) (q β»ΒΉ) l where Ξ΅ : is-Directed π (f β Ξ±) Ξ΅ = image-is-directed π π (monotone-if-continuous π π π) Ξ΄ q : f (β π Ξ΄) οΌ β π Ξ΅ q = continuous-β-οΌ π π π Ξ΄ l : β π Ξ΅ ββ¨ π β© y l = β-is-lowerbound-of-upperbounds π Ξ΅ y (Ξ» i β prβ (p i)) lg : g (β π Ξ΄) ββ¨ π β© z lg = transport (Ξ» - β - ββ¨ π β© z) (q β»ΒΉ) l where Ο : is-Directed π (g β Ξ±) Ο = image-is-directed π π (monotone-if-continuous π π π) Ξ΄ q : g (β π Ξ΄) οΌ β π Ο q = continuous-β-οΌ π π π Ξ΄ l : β π Ο ββ¨ π β© z l = β-is-lowerbound-of-upperbounds π Ο z (Ξ» i β prβ (p i)) module _ (π : DCPOβ₯ {π€} {π€'}) (π : DCPOβ₯ {π£} {π£'}) (π : DCPOβ₯ {π¦} {π¦'}) where Γα΅αΆα΅α΅β₯-assocβ : DCPOβ₯[ π Γα΅αΆα΅α΅β₯ π Γα΅αΆα΅α΅β₯ π , (π Γα΅αΆα΅α΅β₯ π) Γα΅αΆα΅α΅β₯ π ] Γα΅αΆα΅α΅β₯-assocβ = Γα΅αΆα΅α΅-assocβ (π β») (π β») (π β») to-Γ-DCPOβ₯ : DCPOβ₯[ π , π ] β DCPOβ₯[ π , π ] β DCPOβ₯[ π , π Γα΅αΆα΅α΅β₯ π ] to-Γ-DCPOβ₯ f g = to-Γ-DCPO (π β») (π β») (π β») f g \end{code} Added 3 July 2024 by Tom de Jong. \begin{code} Γα΅αΆα΅α΅-is-product : (πβ : DCPO {π€} {π£}) (πβ : DCPO {π€'} {π£'}) (π : DCPO {π¦} {π¦'}) (f : β¨ π β© β β¨ πβ β©) (g : β¨ π β© β β¨ πβ β©) β is-continuous π πβ f β is-continuous π πβ g β β! k κ (β¨ π β© β β¨ πβ Γα΅αΆα΅α΅ πβ β©) , is-continuous π (πβ Γα΅αΆα΅α΅ πβ) k Γ prβ β k βΌ f Γ prβ β k βΌ g Γα΅αΆα΅α΅-is-product πβ πβ π f g cf cg = (k , k-is-continuous , βΌ-refl , βΌ-refl) , k-is-unique where k-bundled : DCPO[ π , πβ Γα΅αΆα΅α΅ πβ ] k-bundled = to-Γ-DCPO π πβ πβ (f , cf) (g , cg) k : β¨ π β© β β¨ πβ Γα΅αΆα΅α΅ πβ β© k = prβ k-bundled k-is-continuous : is-continuous π (πβ Γα΅αΆα΅α΅ πβ) k k-is-continuous = prβ k-bundled k-is-unique : is-central _ (k , k-is-continuous , (Ξ» x β refl) , (Ξ» x β refl)) k-is-unique (h , h-cont , h-eqf , h-eqg) = to-subtype-οΌ (Ξ» j β Γ-is-prop (being-continuous-is-prop π (πβ Γα΅αΆα΅α΅ πβ) j) (Γ-is-prop (Ξ -is-prop fe (Ξ» e β sethood πβ)) (Ξ -is-prop fe (Ξ» e β sethood πβ)))) (dfunext fe (Ξ» e β k e οΌβ¨reflβ© f e , g e οΌβ¨ (eq e ) β»ΒΉ β© h e β)) where eq : (e : β¨ π β©) β h e οΌ f e , g e eq e = apβ _,_ (h-eqf e) (h-eqg e) \end{code}