module Cat.Displayed.Cartesian.Indexing
{o ℓ o' ℓ'} {B : Precategory o ℓ}
(E : Displayed B o' ℓ')
(cartesian : Cartesian-fibration E)
where
Reindexing for cartesian fibrations🔗
A cartesian fibration can be thought of as a displayed category whose fibre categories depend (pseudo)functorially on the object from the base category. A canonical example is the canonical self-indexing: If is a category with pullbacks, then each gives rise to a functor , the change of base along .
module _ {𝒶 𝒷} (f : Hom 𝒶 𝒷) where
: Functor (Fibre E 𝒷) (Fibre E 𝒶)
base-change .F₀ ob = has-lift f ob .x'
base-change .F₁ {x} {y} vert = rebase f vert base-change
Moreover, this assignment is itself functorial in : Along the identity morphism, it’s the same thing as not changing bases at all.
module _ {𝒶} where
private
module FC = Cat.Reasoning (Cat[ Fibre E 𝒶 , Fibre E 𝒶 ])
module Fa = Cat.Reasoning (Fibre E 𝒶)
: base-change id FC.≅ Id base-change-id
I’ll warn you in advance that this proof is not for the faint of heart.
= to-natural-iso mi where
base-change-id open make-natural-iso
: make-natural-iso (base-change id) Id
mi .eta x = has-lift.lifting id x
mi .inv x = has-lift.universalv id x id'
mi .eta∘inv x = cancel _ _ (has-lift.commutesv _ _ _)
mi .inv∘eta x = sym $
mi .uniquep₂ id x _ _ _ _ _
has-lift(idr' _)
(Fib.cancellf (has-lift.commutesv _ _ _))
.natural x y f =
mi
sym $ from-pathp $ cast[] $.commutesp id y id-comm _
has-lift.to-fibre ∙[] Fib
And similarly, composing changes of base is the same thing as changing base along a composite.
module _ {𝒶} {𝒷} {𝒸} (f : Hom 𝒷 𝒸) (g : Hom 𝒶 𝒷) where
private
module FC = Cat.Reasoning (Cat[ Fibre E 𝒸 , Fibre E 𝒶 ])
module Fa = Cat.Reasoning (Fibre E 𝒶)
: base-change (f ∘ g) FC.≅ (base-change g F∘ base-change f) base-change-comp
This proof is a truly nightmarish application of universal properties and I recommend that nobody look at it, ever.
.
= to-natural-iso mi where
base-change-comp open make-natural-iso
: make-natural-iso (base-change (f ∘ g)) (base-change g F∘ base-change f)
mi .eta x =
mi .universalv g _ $ has-lift.universal f x g (has-lift.lifting (f ∘ g) x)
has-lift.inv x =
mi .universalv (f ∘ g) x (has-lift.lifting f _ ∘' has-lift.lifting g _)
has-lift.eta∘inv x =
mi .uniquep₂ _ _ _ _ _ _ _
has-lift(Fib.pulllf (has-lift.commutesv g _ _)
.uniquep₂ _ _ _ (idr _) refl _ _
∙[] has-lift(pulll[] _ (has-lift.commutes _ _ _ _)
.commutesv _ _ _)
∙[] has-lift)
refl(idr' _)
.inv∘eta x =
mi .uniquep₂ _ _ _ _ _ _ _
has-lift(Fib.pulllf (has-lift.commutesv _ _ _)
_ (has-lift.commutesv _ _ _)
∙[] pullr[] .commutes _ _ _ _)
∙[] has-lift(idr' _)
.natural x y f' =
mi (has-lift.cartesian g _) _ _ $ cast[] $
ap hom[] $ cartesian→weak-monic E _ (has-lift.commutesp g _ id-comm _)
pulll[] _ (has-lift.commutesv g _ _)
∙[] pullr[] .uniquep₂ _ _ _ id-comm-sym _ _ _
∙[] has-lift(pulll[] _ (has-lift.commutesp _ _ id-comm _)
_ (has-lift.commutes _ _ _ _))
∙[] pullr[] (pulll[] _ (has-lift.commutes _ _ _ _)
.commutesp _ _ id-comm _)
∙[] has-lift_ (symP (has-lift.commutesv g _ _)) ∙[] pushl[]