Lean4
/-- `P.Over.map` is left adjoint to `P.Over.pullback` if `f` satisfies `P`. -/
noncomputable def mapPullbackAdj [Q.HasOfPostcompProperty Q] (hPf : P f) (hQf : Q f) :
Over.map Q hPf ⊣ Over.pullback P Q f :=
Adjunction.mkOfHomEquiv
{
homEquiv := fun A B ↦
{ toFun := fun g ↦
Over.homMk (pullback.lift g.left A.hom <| by simp) (by simp) <|
by
apply Q.of_postcomp (W' := Q)
· exact Q.pullback_fst B.hom f hQf
· simpa using g.prop_hom_left
invFun := fun h ↦
Over.homMk (h.left ≫ pullback.fst B.hom f)
(by
simp only [map_obj_left, Functor.const_obj_obj, pullback_obj_left, Functor.id_obj, Category.assoc,
pullback.condition, map_obj_hom, ← pullback_obj_hom, Over.w_assoc])
(Q.comp_mem _ _ h.prop_hom_left (Q.pullback_fst _ _ hQf))
left_inv := by cat_disch
right_inv := fun h ↦ by
ext
dsimp
ext
· simp
· simpa using h.w.symm } }