File: Mathlib/Topology/Sheaves/Sheaf.lean

full_name: TopCat.Presheaf.IsSheaf
code: /-- The sheaf condition has several different equivalent formulations.
The official definition chosen here is in terms of grothendieck topologies so that the results on
sites could be applied here easily, and this condition does not require additional constraints on
the value category.
The equivalent formulations of the sheaf condition on `presheaf C X` are as follows :

1. `TopCat.Presheaf.IsSheaf`: (the official definition)
  It is a sheaf with respect to the grothendieck topology on `opens X`, which is to say:
  For each open cover `{ Uᵢ }` of `U`, and a family of compatible functions `A ⟶ F(Uᵢ)` for an
  `A : X`, there exists a unique gluing `A ⟶ F(U)` compatible with the restriction.

2. `TopCat.Presheaf.IsSheafEqualizerProducts`: (requires `C` to have all products)
  For each open cover `{ Uᵢ }` of `U`, `F(U) ⟶ ∏ᶜ F(Uᵢ)` is the equalizer of the two morphisms
  `∏ᶜ F(Uᵢ) ⟶ ∏ᶜ F(Uᵢ ∩ Uⱼ)`.
  See `TopCat.Presheaf.isSheaf_iff_isSheafEqualizerProducts`.

3. `TopCat.Presheaf.IsSheafOpensLeCover`:
  For each open cover `{ Uᵢ }` of `U`, `F(U)` is the limit of the diagram consisting of arrows
  `F(V₁) ⟶ F(V₂)` for every pair of open sets `V₁ ⊇ V₂` that are contained in some `Uᵢ`.
  See `TopCat.Presheaf.isSheaf_iff_isSheafOpensLeCover`.

4. `TopCat.Presheaf.IsSheafPairwiseIntersections`:
  For each open cover `{ Uᵢ }` of `U`, `F(U)` is the limit of the diagram consisting of arrows
  from `F(Uᵢ)` and `F(Uⱼ)` to `F(Uᵢ ∩ Uⱼ)` for each pair `(i, j)`.
  See `TopCat.Presheaf.isSheaf_iff_isSheafPairwiseIntersections`.

The following requires `C` to be concrete and complete, and `forget C` to reflect isomorphisms and
preserve limits. This applies to most "algebraic" categories, e.g. groups, abelian groups and rings.

5. `TopCat.Presheaf.IsSheafUniqueGluing`:
  (requires `C` to be concrete and complete; `forget C` to reflect isomorphisms and preserve limits)
  For each open cover `{ Uᵢ }` of `U`, and a compatible family of elements `x : F(Uᵢ)`, there exists
  a unique gluing `x : F(U)` that restricts to the given elements.
  See `TopCat.Presheaf.isSheaf_iff_isSheafUniqueGluing`.

6. The underlying sheaf of types is a sheaf.
  See `TopCat.Presheaf.isSheaf_iff_isSheaf_comp` and
  `CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget`.
-/
nonrec def IsSheaf (F : Presheaf.{w, v, u} C X) : Prop 
goal: Prop

full_name: TopCat.Presheaf.isSheaf_unit
code: /-- The presheaf valued in `Unit` over any topological space is a sheaf.
-/
theorem isSheaf_unit (F : Presheaf (CategoryTheory.Discrete Unit) X) : F.IsSheaf 
goal: F.IsSheaf

full_name: TopCat.Presheaf.isSheaf_iso_iff
code: theorem isSheaf_iso_iff {F G : Presheaf C X} (α : F ≅ G) : F.IsSheaf ↔ G.IsSheaf 
goal: F.IsSheaf ↔ G.IsSheaf

full_name: TopCat.Presheaf.isSheaf_of_iso
code: /-- Transfer the sheaf condition across an isomorphism of presheaves.
-/
theorem isSheaf_of_iso {F G : Presheaf C X} (α : F ≅ G) (h : F.IsSheaf) : G.IsSheaf 
goal: G.IsSheaf

full_name: TopCat.Sheaf
code: /-- A `TopCat.Sheaf C X` is a presheaf of objects from `C` over a (bundled) topological space `X`,
satisfying the sheaf condition.
-/
nonrec def Sheaf : Type max u v w 
goal: Type (max u v w)

full_name: TopCat.SheafCat
code: instance SheafCat : Category (Sheaf C X) 
goal: CategoryTheory.Category.{max v w, max (max u v) w} (TopCat.Sheaf C X)

full_name: TopCat.Sheaf.presheaf
code: /-- The underlying presheaf of a sheaf -/
abbrev Sheaf.presheaf (F : X.Sheaf C) : TopCat.Presheaf C X 
goal: TopCat.Presheaf C X

full_name: TopCat.sheafInhabited
code: instance sheafInhabited : Inhabited (Sheaf (CategoryTheory.Discrete PUnit) X) 
goal: Inhabited (TopCat.Sheaf (CategoryTheory.Discrete PUnit.{1}) X)

full_name: TopCat.Sheaf.forget
code: /-- The forgetful functor from sheaves to presheaves.
-/
def forget : TopCat.Sheaf C X ⥤ TopCat.Presheaf C X 
goal: TopCat.Sheaf C X ⥤ TopCat.Presheaf C X

full_name: TopCat.Sheaf.forget_full
code: instance forget_full : (forget C X).Full 
goal: (TopCat.Sheaf.forget C X).Full

full_name: TopCat.Sheaf.forgetFaithful
code: instance forgetFaithful : (forget C X).Faithful 
goal: (TopCat.Sheaf.forget C X).Faithful

full_name: TopCat.Sheaf.id_app
code: theorem id_app (F : Sheaf C X) (t) : (𝟙 F : F ⟶ F).1.app t = 𝟙 _ 
goal: (𝟙 F).val.app t = 𝟙 (F.val.obj t)

full_name: TopCat.Sheaf.comp_app
code: theorem comp_app {F G H : Sheaf C X} (f : F ⟶ G) (g : G ⟶ H) (t) :
    (f ≫ g).1.app t = f.1.app t ≫ g.1.app t 
goal: (f ≫ g).val.app t = f.val.app t ≫ g.val.app t