Lean4
/-- When `P` is a sheaf and `S` is a cover, the associated multifork is a limit. -/
def isLimitOfIsSheaf {X : C} (S : J.Cover X) (hP : IsSheaf J P) : IsLimit (S.multifork P)
where
lift := fun E : Multifork _ => hP.amalgamate S (fun _ => E.ι _) (fun _ _ r => E.condition ⟨r⟩)
fac := by
rintro (E : Multifork _) (a | b)
· apply hP.amalgamate_map
· rw [← E.w (WalkingMulticospan.Hom.fst b), ← (S.multifork P).w (WalkingMulticospan.Hom.fst b), ← assoc]
congr 1
apply hP.amalgamate_map
uniq := by
rintro (E : Multifork _) m hm
apply hP.hom_ext S
intro I
erw [hm (WalkingMulticospan.left I)]
symm
apply hP.amalgamate_map