_^*_ : (f : Hom X Y) (m : Subobject Y) β Subobject X
f ^* m = pullback-subobject pb f m
^*-univ : β€-over f m n β m β€β f ^* n
^*-univ = Cartesian-fibration.has-lift.universalv (Subobject-fibration pb) _ _
infixr 35 _^*_
^*-id : id ^* m β
β m
^*-id .to = Ix.^*-id-to
^*-id .from = Ix.^*-id-from
^*-id .inverses = record { invl = prop! ; invr = prop! }
^*-assoc : f ^* (g ^* m) β
β (g β f) ^* m
^*-assoc .to = Ix.^*-comp-from
^*-assoc .from = Ix.^*-comp-to
^*-assoc .inverses = record { invl = prop! ; invr = prop! }
β€β : Subobject X
β€β .domain = _
β€β .map = id
β€β .monic = id-monic
opaque
!β : m β€β β€β
!β {m = m} = record { map = m .map ; sq = refl }
opaque
_β©β_ : Subobject X β Subobject X β Subobject X
m β©β n = Sub-products pb m n .Product.apex
infixr 30 _β©β_
opaque
unfolding _β©β_
β©ββ€l : m β©β n β€β m
β©ββ€l = Sub-products pb _ _ .Product.Οβ
β©ββ€r : m β©β n β€β n
β©ββ€r = Sub-products pb _ _ .Product.Οβ
β©β-univ : β {p} β p β€β m β p β€β n β p β€β m β©β n
β©β-univ = Sub-products pb _ _ .Product.β¨_,_β©
opaque
β©β-idl : β€β β©β m β
β m
β©β-idl = Sub-antisym β©ββ€r (β©β-univ !β Sub.id)
β©β-idr : m β©β β€β β
β m
β©β-idr = Sub-antisym β©ββ€l (β©β-univ Sub.id !β)
β©β-assoc : l β©β m β©β n β
β (l β©β m) β©β n
β©β-assoc = Sub-antisym
(β©β-univ (β©β-univ β©ββ€l (β©ββ€l Sub.β β©ββ€r)) (β©ββ€r Sub.β β©ββ€r))
(β©β-univ (β©ββ€l Sub.β β©ββ€l) (β©β-univ (β©ββ€r Sub.β β©ββ€l) β©ββ€r))
opaque
unfolding _β©β_
^*-β©β : f ^* (m β©β n) β
β f ^* m β©β f ^* n
^*-β©β {f = f} {m = m} {n = n} = Sub-antisym
(β©β-univ
(^*-univ record { sq = pb _ _ .square β pullr refl })
(^*-univ record { sq = pb _ _ .square β pullr refl β extendl (pb _ _ .square) }))
record
{ map = pb _ _ .universal
{pβ' = pb _ _ .pβ β pb _ _ .pβ}
{pβ' = pb _ _ .universal {pβ' = pb _ _ .pβ β pb _ _ .pβ} {pβ' = pb _ _ .pβ β pb _ _ .pβ}
(pulll (sym (pb _ _ .square)) β pullr (pb _ _ .square) β extendl (pb _ _ .square))}
(sym (pullr (pb _ _ .pββuniversal) β extendl (sym (pb _ _ .square))))
; sq = sym (pb _ _ .pββuniversal β introl refl)
}
^*-β€β : f ^* β€β β
β β€β
^*-β€β {f = f} = Sub-antisym !β record
{ map = pb _ _ .universal {pβ' = id} {pβ' = f} id-comm
; sq = sym (pb _ _ .pββuniversal β introl refl)
}
opaque
is-pullback-alongβiso : is-pullback-along C (m .map) h (n .map) β m β
β h ^* n
is-pullback-alongβiso pba = Sub-antisym
record { map = pb _ _ .universal (pba .square) ; sq = sym (pb _ _ .pββuniversal β introl refl) }
record { map = pba .universal (pb _ _ .square) ; sq = sym (pba .pββuniversal β introl refl) }
isoβis-pullback-along : m β
β h ^* n β is-pullback-along C (m .map) h (n .map)
isoβis-pullback-along _ .top = _
isoβis-pullback-along {h = h} {n = n} m .has-is-pb = subst-is-pullback
(sym (m .Sub.to .sq) β idl _) refl refl refl
(is-pullback-iso
record
{ to = m .Sub.from .map
; from = m .Sub.to .map
; inverses = record
{ invl = ap β€-over.map (m .Sub.invr)
; invr = ap β€-over.map (m .Sub.invl)
}
}
(pb h (n .map) .has-is-pb))