\import Category
\import Category.Functor
\import Paths
\import Paths.Meta
\type ObOver {C : Precat} (x : C) => \Sigma (y : C) (Hom y x)
\instance SlicePrecat {C : Precat} (x : C) : Precat (ObOver x)
| Hom (y,f) (z,g) => \Sigma (h : Hom y z) (g ∘ h = f)
| id (y,f) => (id y, id-right)
| o (h1,p1) (h2,p2) => (h1 ∘ h2, inv o-assoc *> pmap (`∘ h2) p1 *> p2)
| id-left => ext id-left
| id-right => ext id-right
| o-assoc => ext o-assoc
\where
\lemma forget {C : Precat} (x : C) : FaithfulFunctor (SlicePrecat x) C __.1 __.1 \cowith
| Func-id => idp
| Func-o => idp
| isFaithful p => ext p
\instance SliceCat {C : Cat} (x : C) : Cat
| Precat => SlicePrecat x
| univalence => Cat.makeUnivalence \lam (e : Iso) =>
\have e' => Functor.Func-iso {SlicePrecat.forget x} e
\in (ext (Cat.isotoid e', Cat.transport_Hom_iso-left e' _ (inv e.f.2)), simp_coe (Cat.transport_Hom_iso-right e' _ id-right))