File: Mathlib/Topology/Sheaves/SheafCondition/EqualizerProducts.lean

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens
code: /-- The product of the sections of a presheaf over a family of open sets. -/
def piOpens : C 
goal: C

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.piInters
code: /-- The product of the sections of a presheaf over the pairwise intersections of
a family of open sets.
-/
def piInters : C 
goal: C

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes
code: /-- The morphism `Π F.obj (U i) ⟶ Π F.obj (U i) ⊓ (U j)` whose components
are given by the restriction maps from `U i` to `U i ⊓ U j`.
-/
def leftRes : piOpens F U ⟶ piInters.{v'} F U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens F U ⟶
  TopCat.Presheaf.SheafConditionEqualizerProducts.piInters F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes
code: /-- The morphism `Π F.obj (U i) ⟶ Π F.obj (U i) ⊓ (U j)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
def rightRes : piOpens F U ⟶ piInters.{v'} F U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens F U ⟶
  TopCat.Presheaf.SheafConditionEqualizerProducts.piInters F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.res
code: /-- The morphism `F.obj U ⟶ Π F.obj (U i)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
def res : F.obj (op (iSup U)) ⟶ piOpens.{v'} F U 
goal: F.obj (Opposite.op (iSup U)) ⟶ TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.res_π
code: @[simp, elementwise]
theorem res_π (i : ι) : res F U ≫ limit.π _ ⟨i⟩ = F.map (Opens.leSupr U i).op 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.res F U ≫
    CategoryTheory.Limits.limit.π (CategoryTheory.Discrete.functor fun i => F.obj (Opposite.op (U i))) { as := i } =
  F.map (TopologicalSpace.Opens.leSupr U i).op

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.w
code: @[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.res F U ≫ TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes F U =
  TopCat.Presheaf.SheafConditionEqualizerProducts.res F U ≫ TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.diagram
code: /-- The equalizer diagram for the sheaf condition.
-/
abbrev diagram : WalkingParallelPair ⥤ C 
goal: CategoryTheory.Limits.WalkingParallelPair ⥤ C

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork
code: /-- The restriction map `F.obj U ⟶ Π F.obj (U i)` gives a cone over the equalizer diagram
for the sheaf condition. The sheaf condition asserts this cone is a limit cone.
-/
def fork : Fork.{v} (leftRes F U) (rightRes F U) 
goal: CategoryTheory.Limits.Fork (TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes F U)
  (TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes F U)

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
code: @[simp]
theorem fork_pt : (fork F U).pt = F.obj (op (iSup U)) 
goal: (TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U).pt = F.obj (Opposite.op (iSup U))

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι
code: @[simp]
theorem fork_ι : (fork F U).ι = res F U 
goal: (TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U).ι = TopCat.Presheaf.SheafConditionEqualizerProducts.res F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
code: @[simp]
theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallelPair.zero = res F U 
goal: (TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U).π.app CategoryTheory.Limits.WalkingParallelPair.zero =
  TopCat.Presheaf.SheafConditionEqualizerProducts.res F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_one
code: @[simp (high)]
theorem fork_π_app_walkingParallelPair_one :
    (fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U 
goal: (TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U).π.app CategoryTheory.Limits.WalkingParallelPair.one =
  TopCat.Presheaf.SheafConditionEqualizerProducts.res F U ≫ TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes F U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso
code: /-- Isomorphic presheaves have isomorphic `piOpens` for any cover `U`. -/
@[simp]
def piOpens.isoOfIso (α : F ≅ G) : piOpens F U ≅ piOpens.{v'} G U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens F U ≅
  TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens G U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso
code: /-- Isomorphic presheaves have isomorphic `piInters` for any cover `U`. -/
@[simp]
def piInters.isoOfIso (α : F ≅ G) : piInters F U ≅ piInters.{v'} G U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.piInters F U ≅
  TopCat.Presheaf.SheafConditionEqualizerProducts.piInters G U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso
code: /-- Isomorphic presheaves have isomorphic sheaf condition diagrams. -/
def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U ≅
  TopCat.Presheaf.SheafConditionEqualizerProducts.diagram G U

full_name: TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIso
code: /-- If `F G : Presheaf C X` are isomorphic presheaves,
then the `fork F U`, the canonical cone of the sheaf condition diagram for `F`,
is isomorphic to `fork F G` postcomposed with the corresponding isomorphism between
sheaf condition diagrams.
-/
def fork.isoOfIso (α : F ≅ G) :
    fork F U ≅ (Cones.postcompose (diagram.isoOfIso U α).inv).obj (fork G U) 
goal: TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U ≅
  (CategoryTheory.Limits.Cones.postcompose
        (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso U α).inv).obj
    (TopCat.Presheaf.SheafConditionEqualizerProducts.fork G U)

full_name: TopCat.Presheaf.IsSheafEqualizerProducts
code: /-- The sheaf condition for a `F : Presheaf C X` requires that the morphism
`F.obj U ⟶ ∏ᶜ F.obj (U i)` (where `U` is some open set which is the union of the `U i`)
is the equalizer of the two morphisms
`∏ᶜ F.obj (U i) ⟶ ∏ᶜ F.obj (U i) ⊓ (U j)`.
-/
def IsSheafEqualizerProducts (F : Presheaf.{v', v, u} C X) : Prop 
goal: Prop

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj_pt
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
    Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj F U c).pt = c.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
    Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj_π_app
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
    Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj F U c).π.app Z =
  CategoryTheory.Limits.WalkingParallelPair.casesOn Z
    (CategoryTheory.Limits.Pi.lift fun i => c.π.app (Opposite.op (CategoryTheory.Pairwise.single i)))
    (CategoryTheory.Limits.Pi.lift fun b => c.π.app (Opposite.op (CategoryTheory.Pairwise.pair b.1 b.2)))

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor_map_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivFunctor :
    Limits.Cone ((diagram U).op ⋙ F) ⥤
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U).map f).hom = f.hom

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor_obj_π_app
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivFunctor :
    Limits.Cone ((diagram U).op ⋙ F) ⥤
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U).obj c).π.app Z =
  CategoryTheory.Limits.WalkingParallelPair.rec
    (CategoryTheory.Limits.Pi.lift fun i => c.π.app (Opposite.op (CategoryTheory.Pairwise.single i)))
    (CategoryTheory.Limits.Pi.lift fun b => c.π.app (Opposite.op (CategoryTheory.Pairwise.pair b.1 b.2))) Z

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivFunctor :
    Limits.Cone ((diagram U).op ⋙ F) ⥤
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F) ⥤
  CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor_obj_pt
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivFunctor :
    Limits.Cone ((diagram U).op ⋙ F) ⥤
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U).obj c).pt = c.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj_π_app
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
    Limits.Cone ((diagram U).op ⋙ F) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj F U c).π.app x =
  Opposite.rec'
    (fun x =>
      CategoryTheory.Pairwise.casesOn x
        (fun i =>
          c.π.app CategoryTheory.Limits.WalkingParallelPair.zero ≫
            CategoryTheory.Limits.Pi.π (fun i => F.obj (Opposite.op (U i))) i)
        fun i j =>
        c.π.app CategoryTheory.Limits.WalkingParallelPair.one ≫
          CategoryTheory.Limits.Pi.π (fun p => F.obj (Opposite.op (U p.1 ⊓ U p.2))) (i, j))
    x

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
    Limits.Cone ((diagram U).op ⋙ F) 
goal: CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj_pt
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
    Limits.Cone ((diagram U).op ⋙ F) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj F U c).pt = c.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse_obj_pt
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivInverse :
    Limits.Cone (SheafConditionEqualizerProducts.diagram F U) ⥤
      Limits.Cone ((diagram U).op ⋙ F) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U).obj c).pt = c.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivInverse :
    Limits.Cone (SheafConditionEqualizerProducts.diagram F U) ⥤
      Limits.Cone ((diagram U).op ⋙ F) 
goal: CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U) ⥤
  CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse_map_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivInverse :
    Limits.Cone (SheafConditionEqualizerProducts.diagram F U) ⥤
      Limits.Cone ((diagram U).op ⋙ F) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U).map f).hom = f.hom

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse_obj_π_app
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivInverse :
    Limits.Cone (SheafConditionEqualizerProducts.diagram F U) ⥤
      Limits.Cone ((diagram U).op ⋙ F) 
goal: ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U).obj c).π.app x =
  CategoryTheory.Pairwise.rec
    (fun a => CategoryTheory.Limits.Fork.ι c ≫ CategoryTheory.Limits.Pi.π (fun i => F.obj (Opposite.op (U i))) a)
    (fun a a_1 =>
      CategoryTheory.Limits.Fork.ι c ≫
        TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes F U ≫
          CategoryTheory.Limits.Pi.π (fun p => F.obj (Opposite.op (U p.1 ⊓ U p.2))) (a, a_1))
    (Opposite.unop x)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp_hom_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
    (𝟭 (Cone ((diagram U).op ⋙ F))).obj c ≅
      (coneEquivFunctor F U ⋙ coneEquivInverse F U).obj c 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp F U c).hom.hom =
  𝟙 ((𝟭 (CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F))).obj c).pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
    (𝟭 (Cone ((diagram U).op ⋙ F))).obj c ≅
      (coneEquivFunctor F U ⋙ coneEquivInverse F U).obj c 
goal: (𝟭 (CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F))).obj c ≅
  (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U ⋙
        TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U).obj
    c

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp_inv_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
    (𝟭 (Cone ((diagram U).op ⋙ F))).obj c ≅
      (coneEquivFunctor F U ⋙ coneEquivInverse F U).obj c 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp F U c).inv.hom =
  𝟙
    ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U ⋙
            TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U).obj
        c).pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso_inv_app_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivUnitIso :
    𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U 
goal: ∀ (X_1 : CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F)),
  ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso F U).inv.app X_1).hom = 𝟙 X_1.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivUnitIso :
    𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U 
goal: 𝟭 (CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F)) ≅
  TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U ⋙
    TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso_hom_app_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivUnitIso :
    𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U 
goal: ∀ (X_1 : CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F)),
  ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso F U).hom.app X_1).hom = 𝟙 X_1.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso_inv_app_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivCounitIso :
    coneEquivInverse F U ⋙ coneEquivFunctor F U ≅
      𝟭 (Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) 
goal: ∀ (X_1 : CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U)),
  ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso F U).inv.app X_1).hom = 𝟙 X_1.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivCounitIso :
    coneEquivInverse F U ⋙ coneEquivFunctor F U ≅
      𝟭 (Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) 
goal: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U ⋙
    TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U ≅
  𝟭 (CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U))

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso_hom_app_hom
code: /-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivCounitIso :
    coneEquivInverse F U ⋙ coneEquivFunctor F U ≅
      𝟭 (Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) 
goal: ∀ (X_1 : CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U)),
  ((TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso F U).hom.app X_1).hom = 𝟙 X_1.pt

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv_functor
code: /--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@[simps]
def coneEquiv :
    Limits.Cone ((diagram U).op ⋙ F) ≌
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv F U).functor =
  TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor F U

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv_unitIso
code: /--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@[simps]
def coneEquiv :
    Limits.Cone ((diagram U).op ⋙ F) ≌
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv F U).unitIso =
  TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso F U

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv_counitIso
code: /--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@[simps]
def coneEquiv :
    Limits.Cone ((diagram U).op ⋙ F) ≌
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv F U).counitIso =
  TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso F U

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv_inverse
code: /--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@[simps]
def coneEquiv :
    Limits.Cone ((diagram U).op ⋙ F) ≌
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: (TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv F U).inverse =
  TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse F U

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv
code: /--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@[simps]
def coneEquiv :
    Limits.Cone ((diagram U).op ⋙ F) ≌
      Limits.Cone (SheafConditionEqualizerProducts.diagram F U) 
goal: CategoryTheory.Limits.Cone ((CategoryTheory.Pairwise.diagram U).op ⋙ F) ≌
  CategoryTheory.Limits.Cone (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram F U)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
code: /-- If `SheafConditionEqualizerProducts.fork` is an equalizer,
then `F.mapCone (cone U)` is a limit cone.
-/
def isLimitMapConeOfIsLimitSheafConditionFork
    (P : IsLimit (SheafConditionEqualizerProducts.fork F U)) : IsLimit (F.mapCone (cocone U).op) 
goal: CategoryTheory.Limits.IsLimit (CategoryTheory.Functor.mapCone F (CategoryTheory.Pairwise.cocone U).op)

full_name: TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone
code: /-- If `F.mapCone (cone U)` is a limit cone,
then `SheafConditionEqualizerProducts.fork` is an equalizer.
-/
def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U).op)) :
    IsLimit (SheafConditionEqualizerProducts.fork F U) 
goal: CategoryTheory.Limits.IsLimit (TopCat.Presheaf.SheafConditionEqualizerProducts.fork F U)

full_name: TopCat.Presheaf.isSheaf_iff_isSheafEqualizerProducts
code: /-- The sheaf condition in terms of an equalizer diagram is equivalent
to the default sheaf condition.
-/
theorem isSheaf_iff_isSheafEqualizerProducts (F : Presheaf C X) :
    F.IsSheaf ↔ F.IsSheafEqualizerProducts 
goal: F.IsSheaf ↔ F.IsSheafEqualizerProducts