open import Cat.Displayed.Cocartesian
open import Cat.Displayed.Fibre
open import Cat.Displayed.Base
open import Cat.Prelude

import Cat.Displayed.Reasoning

module Cat.Displayed.Cocartesian.Indexing
{o β o' β'} {β¬ : Precategory o β}
(β° : Displayed β¬ o' β')
(opfibration : Cocartesian-fibration β°)
where

open Precategory β¬
open Displayed β°
open Cat.Displayed.Reasoning β°
open Cocartesian-fibration opfibration
open Functor


# Opreindexing for cocartesian fibrationsπ

Opfibrations are dual to fibrations, so they inherit the ability to reindex along morphisms in the base. However, this reindexing is covariant for opfibrations, whereas it is contravariant for fibrations.

This difference in variance gives opfibrations a distinct character. Reindexing in fibrations can be thought of a sort of restriction map. This can be seen clearly with canonical self-indexing, where the reindexing functors are given by pullbacks. On the other hand, opreindexing can be thought of as an extension map. We can again use the the canonical self-indexing as our example: opreindexing is given by postcomposition, which extends families over to families over by adding in empty fibres.

cobase-change : β {x y} (f : Hom x y) β Functor (Fibre β° x) (Fibre β° y)
cobase-change f .Fβ ob = has-lift.y' f ob
cobase-change f .Fβ vert = rebase f vert

cobase-change f .F-id =
sym $has-lift.uniquev _ _ _$ to-pathp $idl[] β (sym$ cancel _ _ (idr' _))
cobase-change f .F-β f' g' =
sym $has-lift.uniquev _ _ _$ to-pathp \$
smashl _ _
Β·Β· reviveβ (pullr[] _ (has-lift.commutesv _ _ _))
Β·Β· smashr _ _
Β·Β· reviveβ (pulll[] _ (has-lift.commutesv _ _ _))
Β·Β· smashl _ _
Β·Β· sym assoc[]
Β·Β· sym (smashr _ _)