File: Mathlib/CategoryTheory/Sites/Coherent/ExtensiveSheaves.lean

full_name: CategoryTheory.Presieve.Extensive
code: /-- A presieve is *extensive* if it is finite and its arrows induce an isomorphism from the
coproduct to the target. -/
class Presieve.Extensive {X : C} (R : Presieve X) : Prop where
  /-- `R` consists of a finite collection of arrows that together induce an isomorphism from the
  coproduct of their sources. -/
  arrows_nonempty_isColimit : ∃ (α : Type) (_ : Finite α) (Z : α → C) (π : (a : α) → (Z a ⟶ X)),
    R = Presieve.ofArrows Z π ∧ Nonempty (IsColimit (Cofan.mk X π))
goal: Prop

full_name: CategoryTheory.Presieve.Extensive.arrows_nonempty_isColimit
code: /-- A presieve is *extensive* if it is finite and its arrows induce an isomorphism from the
coproduct to the target. -/
class Presieve.Extensive {X : C} (R : Presieve X) : Prop where
  /-- `R` consists of a finite collection of arrows that together induce an isomorphism from the
  coproduct of their sources. -/
  arrows_nonempty_isColimit : ∃ (α : Type) (_ : Finite α) (Z : α → C) (π : (a : α) → (Z a ⟶ X)),
    R = Presieve.ofArrows Z π ∧ Nonempty (IsColimit (Cofan.mk X π))
goal: ∃ α,
  ∃ (_ : Finite α),
    ∃ Z π,
      R = CategoryTheory.Presieve.ofArrows Z π ∧
        Nonempty (CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.Cofan.mk X π))

full_name: CategoryTheory.instHasPullbacksOfExtensive
code: instance {X : C} (S : Presieve X) [S.Extensive] : S.hasPullbacks 
goal: S.hasPullbacks

full_name: CategoryTheory.isSheafFor_extensive_of_preservesFiniteProducts
code: /--
A finite product preserving presheaf is a sheaf for the extensive topology on a category which is
`FinitaryPreExtensive`.
-/
theorem isSheafFor_extensive_of_preservesFiniteProducts {X : C} (S : Presieve X) [S.Extensive]
    (F : Cᵒᵖ ⥤ Type w) [PreservesFiniteProducts F] : S.IsSheafFor F  
goal: CategoryTheory.Presieve.IsSheafFor F S

full_name: CategoryTheory.instExtensiveOfArrowsι
code: instance {α : Type} [Finite α] (Z : α → C) : (ofArrows Z (fun i ↦ Sigma.ι Z i)).Extensive 
goal: (CategoryTheory.Presieve.ofArrows Z fun i => CategoryTheory.Limits.Sigma.ι Z i).Extensive

full_name: CategoryTheory.extensiveTopology.isSheaf_yoneda_obj
code: /-- Every Yoneda-presheaf is a sheaf for the extensive topology. -/
theorem extensiveTopology.isSheaf_yoneda_obj (W : C) : Presieve.IsSheaf (extensiveTopology C)
    (yoneda.obj W) 
goal: CategoryTheory.Presieve.IsSheaf (CategoryTheory.extensiveTopology C) (CategoryTheory.yoneda.obj W)

full_name: CategoryTheory.extensiveTopology.subcanonical
code: /-- The extensive topology on a finitary pre-extensive category is subcanonical. -/
theorem extensiveTopology.subcanonical : Sheaf.Subcanonical (extensiveTopology C) 
goal: CategoryTheory.Sheaf.Subcanonical (CategoryTheory.extensiveTopology C)

full_name: CategoryTheory.Presieve.isSheaf_iff_preservesFiniteProducts
code: /--
A presheaf of sets on a category which is `FinitaryExtensive` is a sheaf iff it preserves finite
products.
-/
theorem Presieve.isSheaf_iff_preservesFiniteProducts (F : Cᵒᵖ ⥤ Type w) :
    Presieve.IsSheaf (extensiveTopology C) F ↔
    Nonempty (PreservesFiniteProducts F) 
goal: CategoryTheory.Presieve.IsSheaf (CategoryTheory.extensiveTopology C) F ↔
  Nonempty (CategoryTheory.Limits.PreservesFiniteProducts F)

full_name: CategoryTheory.Presheaf.isSheaf_iff_preservesFiniteProducts
code: /--
A presheaf on a category which is `FinitaryExtensive` is a sheaf iff it preserves finite products.
-/
theorem Presheaf.isSheaf_iff_preservesFiniteProducts (F : Cᵒᵖ ⥤ D) :
    IsSheaf (extensiveTopology C) F ↔ Nonempty (PreservesFiniteProducts F) 
goal: CategoryTheory.Presheaf.IsSheaf (CategoryTheory.extensiveTopology C) F ↔
  Nonempty (CategoryTheory.Limits.PreservesFiniteProducts F)

full_name: CategoryTheory.instPreservesFiniteProductsOppositeVal
code: noncomputable instance (F : Sheaf (extensiveTopology C) D) : PreservesFiniteProducts F.val 
goal: CategoryTheory.Limits.PreservesFiniteProducts F.val