Martin Escardo, Paulo Oliva, originally 2023, modified in 2024 for
relative monads on structured types.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan hiding (J)
open import RelativeMonadOnStructuredTypes.OneSigmaStructure
module RelativeMonadOnStructuredTypes.J-transf
{{Ο : π-Ξ£-structure}}
where
open π-Ξ£-structure Ο
open import UF.FunExt
open import RelativeMonadOnStructuredTypes.Definition
π-transf : Fun-Ext
β {β : Universe β Universe}
β Relative-Monad {β}
β π π¦β
β Relative-Monad {Ξ» π€ β β π¦β β β π€ β π€}
π-transf {π¦β} fe {β} π π‘ =
record
{ functor = JT
; Ξ· = Ξ·α΄Άα΅
; ext = extα΄Άα΅
; ext-Ξ· = extα΄Άα΅-Ξ·
; unit = unitα΄Άα΅
; assoc = assocα΄Άα΅
}
where
T : {π€ : Universe} β π π€ β β π€ Μ
T = functor π
JT : {π€ : Universe} β π π€ β β π¦β β β π€ β π€ Μ
JT π§ = (β¨ π§ β© β T π‘) β T π§
Ξ·α΄Άα΅ : {π§ : π π€} β β¨ π§ β© β JT π§
Ξ·α΄Άα΅ x p = Ξ· π x
extα΄Άα΅ : {π§ : π π€} {π¨ : π π₯} β (β¨ π§ β© β JT π¨) β JT π§ β JT π¨
extα΄Άα΅ f Ξ΅ p = ext π (Ξ» x β f x p) (Ξ΅ (Ξ» x β ext π p (f x p)))
extα΄Άα΅-Ξ· : {π§ : π π€} β extα΄Άα΅ (Ξ·α΄Άα΅ {π€} {π§}) βΌ ππ (JT π§)
extα΄Άα΅-Ξ· Ξ΅ = dfunext fe (Ξ» p β
ext π (Ξ· π) (Ξ΅ (Ξ» x β ext π p (Ξ· π x))) οΌβ¨ ext-Ξ· π _ β©
Ξ΅ (Ξ» x β ext π p (Ξ· π x)) οΌβ¨ ap Ξ΅ (dfunext fe (unit π _)) β©
Ξ΅ p β)
unitα΄Άα΅ : {π§ : π π€} {π¨ : π π₯} (f : β¨ π§ β© β JT π¨) (x : β¨ π§ β©)
β extα΄Άα΅ {π€} {π₯} {π§} {π¨} f (Ξ·α΄Άα΅ x) οΌ f x
unitα΄Άα΅ f x = dfunext fe (Ξ» p β unit π (Ξ» x β f x p) x)
assocα΄Άα΅ : {π§ : π π€} {π¨ : π π₯} {π© : π π¦} (g : β¨ π¨ β©
β JT π©) (f : β¨ π§ β© β JT π¨) (Ξ΅ : JT π§)
β extα΄Άα΅ (Ξ» x β extα΄Άα΅ g (f x)) Ξ΅ οΌ extα΄Άα΅ g (extα΄Άα΅ f Ξ΅)
assocα΄Άα΅ g f Ξ΅ = dfunext fe Ξ³
where
Ξ³ : β p β extα΄Άα΅ (Ξ» x β extα΄Άα΅ g (f x)) Ξ΅ p οΌ extα΄Άα΅ g (extα΄Άα΅ f Ξ΅) p
Ξ³ p =
extα΄Άα΅ (Ξ» x β extα΄Άα΅ g (f x)) Ξ΅ p οΌβ¨reflβ©
π (Ξ» x β π π (π x)) (Ξ΅ (Ξ» x β π p (π π (π x)))) οΌβ¨ assoc π _ _ _ β©
π π (π π (Ξ΅ (Ξ» x β π p (π π (π x))))) οΌβ¨ again-by-assoc β©
π π (π π (Ξ΅ (Ξ» x β π (Ξ» y β π p (π y)) (π x)))) οΌβ¨reflβ©
extα΄Άα΅ g (extα΄Άα΅ f Ξ΅) p β
where
π = ext π
π = Ξ» y β g y p
π = Ξ» x β f x (Ξ» y β π p (π y))
again-by-assoc = ap (Ξ» - β π π (π π (Ξ΅ -)))
(dfunext fe (Ξ» x β (assoc π _ _ _)β»ΒΉ))
module relative-JT-definitions
{β : Universe β Universe}
(π : Relative-Monad {β})
(π‘ : π π¦β)
(π : Relative-Algebra π β¨ π‘ β©)
(fe : Fun-Ext)
where
open import MonadOnTypes.K
open relative-T-definitions π
open relative-Ξ±-definitions π π‘ π
open K-definitions β¨ π‘ β©
ππ : Relative-Monad
ππ = π-transf fe π π‘
JT : π π€ β β π¦β β β π€ β π€ Μ
JT = functor ππ
KT : π π€ β π¦β β β π¦β β π€ Μ
KT π§ = (β¨ π§ β© β T π‘) β β¨ π‘ β©
Ξ·α΄Άα΅ : {π§ : π π€} β β¨ π§ β© β JT π§
Ξ·α΄Άα΅ = Ξ· ππ
extα΄Άα΅ : {π§ : π π€} {π¨ : π π₯} β (β¨ π§ β© β JT π¨) β JT π§ β JT π¨
extα΄Άα΅ = ext ππ
mapα΄Άα΅ : {π§ : π π€} {π¨ : π π₯} β (β¨ π§ β© β β¨ π¨ β©) β JT π§ β JT π¨
mapα΄Άα΅ = map ππ
_βα΄Άα΅_ : {π§ : π π€} {π¨ : β¨ π§ β© β π π₯}
β JT π§
β ((x : β¨ π§ β©) β JT (π¨ x))
β JT (Ξ£β x κ π§ , π¨ x)
_βα΄Άα΅_ = _βα΅£_ ππ
overlineᴬ : {π§ : π π€} β JT π§ β KT π§
overlineᴬ Ξ΅ = Ξ» p β Ξ± (extα΅ p (Ξ΅ p))
-overlineᴬ : {π§ : π π€} β JT π§ β K β¨ π§ β©
-overlineᴬ Ξ΅ = Ξ» p β Ξ± (extα΅ (Ξ·α΅ β p) (Ξ΅ (Ξ·α΅ β p)))
_attainsᴬ_ : {π§ : π π€} β JT π§ β K β¨ π§ β© β π¦β β β π¦β β π€ Μ
_attainsᴬ_ {π€} {π§} Ξ΅ Ο = (p : β¨ π§ β© β T π‘) β overlineᴬ Ξ΅ p οΌ Ο (Ξ± β p)
\end{code}