module Cat.Displayed.Univalence
{o ℓ o' ℓ'}
{B : Precategory o ℓ}
(E : Displayed B o' ℓ')
where
Univalence for displayed categories🔗
We provide equivalent characterisations of univalence for categories which are displayed over a univalent category
We say a displayed category is univalent when, for any in and object over the space of “objects over isomorphic to over ” is a proposition.
: Type _
is-category-displayed =
is-category-displayed ∀ {x y} (f : x B.≅ y) (A : Ob[ x ]) → is-prop (Σ[ B ∈ Ob[ y ] ] (A ≅[ f ] B))
This condition is sufficient for the total category to be univalent, if is, too. The proof of this is a bit nasty, so we’ll break it down into parts. Initially, observe that the type of isomorphisms in is equivalent to the type
consisting of an isomorphism in the base category and an isomorphism over it.
module _ (base-c : is-category B) (disp-c : is-category-displayed) where
private
piece-together: ∀ {x y} (p : x B.≅ y) {A : Ob[ x ]} {B : Ob[ y ]} (f : A ≅[ p ] B)
→ (x , A) ∫E.≅ (y , B)
=
piece-together p f .make-iso (total-hom (p .B.to) (f .to')) (total-hom (p .B.from) (f .from'))
∫E(total-hom-path E (p .B.invl) (f .invl'))
(total-hom-path E (p .B.invr) (f .invr'))
We first tackle the case where is vertical, i.e. and are in the same fibre category. But then, observe that our displayed univalence condition, when applied to the identity morphism, gives us exactly an identification s.t. over looks like the identity (vertical) isomorphism.
contract-vertical-iso: ∀ {x} {A : Ob[ x ]} (B : Ob[ x ]) (f : A ≅↓ B)
→ Path (Σ _ ((x , A) ∫E.≅_)) ((x , A) , ∫E.id-iso)
((x , B) , piece-together B.id-iso f)
{x} {A} B f =
contract-vertical-iso (λ i → x , pair i .fst)
Σ-pathp (∫E.≅-pathp refl _ (total-hom-pathp E _ _ refl λ i → pair i .snd .to'))
where
= disp-c B.id-iso A
pair (A , id-iso↓)
(B , f)
We can now use isomorphism induction in the base category to
reduce the general case to contract-vertical-iso
above. To wit: If
is an arbitrary isomorphism (in
it suffices to consider the case where
and
is the identity. Here,
is the isomorphism of first components coming from the isomorphism in
: is-category (∫ E)
is-category-total = total-cat where
is-category-total
wrapper: ∀ {x y} (p : x B.≅ y) (A : Ob[ x ]) (B : Ob[ y ]) (f : A ≅[ p ] B)
→ Path (Σ _ ((x , A) ∫E.≅_))
((x , A) , ∫E.id-iso)
((y , B) , piece-together p f)
=
wrapper p A .J-iso base-c
Univalent(λ y p → (B : Ob[ y ]) (f : A ≅[ p ] B)
→ ((_ , A) , ∫E.id-iso) ≡ (((y , B) , piece-together p f)))
contract-vertical-iso
p
: is-category (∫ E)
total-cat .to-path p = ap fst $
total-cat (total-iso→iso E p) _ _ (total-iso→iso[] E p)
wrapper .to-path-over p = ap snd $
total-cat (total-iso→iso E p) _ _ (total-iso→iso[] E p) wrapper
Fibrewise univalent categories🔗
Using the same trick as above, we can show that a displayed category is univalent everywhere if, and only if, it is univalent when restricted to vertical isomorphisms:
is-category-fibrewise: is-category B
→ (∀ {x} (A : Ob[ x ]) → is-prop (Σ[ B ∈ Ob[ x ] ] (A ≅↓ B)))
→ is-category-displayed
=
is-category-fibrewise base-c wit f A .J-iso base-c (λ y p → is-prop (Σ[ B ∈ Ob[ y ] ] (A ≅[ p ] B))) (wit A) f Univalent
Consequently, it suffices for each fibre category to be univalent, since a vertical isomorphism is no more than an isomorphism in a particular fibre category.
is-category-fibrewise': is-category B
→ (∀ x → is-category (Fibre E x))
→ is-category-displayed
= is-category-fibrewise b wit' where
is-category-fibrewise' b wit : ∀ {x} (A : Ob[ x ]) → is-prop (Σ[ B ∈ Ob[ x ] ] (A ≅↓ B))
wit' {x} A =
wit'
is-contr→is-prop $ retract→is-contr(λ (x , i) → x , make-iso[ B.id-iso ]
(i .F.to)
(i .F.from)
(to-pathp (i .F.invl))
(to-pathp (i .F.invr)))
(λ (x , i) → x , F.make-iso (i .to') (i .from')
(from-pathp (i .invl')) (from-pathp (i .invr')))
(λ (x , i) → Σ-pathp refl (≅[]-path refl))
(is-contr-ΣR (wit x))
where module F = Cat.Reasoning (Fibre E x)