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}