File: Mathlib/CategoryTheory/Sites/LocallyInjective.lean

full_name: CategoryTheory.Presheaf.equalizerSieve
code: /-- If `F : Cᵒᵖ ⥤ D` is a presheaf with values in a concrete category, if `x` and `y` are
elements in `F.obj X`, this is the sieve of `X.unop` consisting of morphisms `f`
such that `F.map f.op x = F.map f.op y`. -/
@[simps]
def equalizerSieve {F : Cᵒᵖ ⥤ D} {X : Cᵒᵖ} (x y : F.obj X) : Sieve X.unop 
goal: CategoryTheory.Sieve (Opposite.unop X)

full_name: CategoryTheory.Presheaf.equalizerSieve_apply
code: /-- If `F : Cᵒᵖ ⥤ D` is a presheaf with values in a concrete category, if `x` and `y` are
elements in `F.obj X`, this is the sieve of `X.unop` consisting of morphisms `f`
such that `F.map f.op x = F.map f.op y`. -/
@[simps]
def equalizerSieve {F : Cᵒᵖ ⥤ D} {X : Cᵒᵖ} (x y : F.obj X) : Sieve X.unop 
goal: ∀ (x_1 : C) (f : x_1 ⟶ Opposite.unop X),
  (CategoryTheory.Presheaf.equalizerSieve x y).arrows f = ((F.map f.op) x = (F.map f.op) y)

full_name: CategoryTheory.Presheaf.equalizerSieve_self_eq_top
code: @[simp]
lemma equalizerSieve_self_eq_top {F : Cᵒᵖ ⥤ D} {X : Cᵒᵖ} (x : F.obj X) :
    equalizerSieve x x = ⊤ 
goal: CategoryTheory.Presheaf.equalizerSieve x x = ⊤

full_name: CategoryTheory.Presheaf.equalizerSieve_eq_top_iff
code: @[simp]
lemma equalizerSieve_eq_top_iff {F : Cᵒᵖ ⥤ D} {X : Cᵒᵖ} (x y : F.obj X) :
    equalizerSieve x y = ⊤ ↔ x = y 
goal: CategoryTheory.Presheaf.equalizerSieve x y = ⊤ ↔ x = y

full_name: CategoryTheory.Presheaf.IsLocallyInjective
code: /-- A morphism `φ : F₁ ⟶ F₂` of presheaves `Cᵒᵖ ⥤ D` (with `D` a concrete category)
is locally injective for a Grothendieck topology `J` on `C` if
whenever two sections of `F₁` are sent to the same section of `F₂`, then these two
sections coincide locally. -/
class IsLocallyInjective : Prop where
  equalizerSieve_mem {X : Cᵒᵖ} (x y : F₁.obj X) (h : φ.app X x = φ.app X y) :
    equalizerSieve x y ∈ J X.unop
goal: Prop

full_name: CategoryTheory.Presheaf.IsLocallyInjective.equalizerSieve_mem
code: /-- A morphism `φ : F₁ ⟶ F₂` of presheaves `Cᵒᵖ ⥤ D` (with `D` a concrete category)
is locally injective for a Grothendieck topology `J` on `C` if
whenever two sections of `F₁` are sent to the same section of `F₂`, then these two
sections coincide locally. -/
class IsLocallyInjective : Prop where
  equalizerSieve_mem {X : Cᵒᵖ} (x y : F₁.obj X) (h : φ.app X x = φ.app X y) :
    equalizerSieve x y ∈ J X.unop
goal: CategoryTheory.Presheaf.equalizerSieve x y ∈ J.sieves (Opposite.unop X)

full_name: CategoryTheory.Presheaf.equalizerSieve_mem
code: lemma equalizerSieve_mem [IsLocallyInjective J φ]
    {X : Cᵒᵖ} (x y : F₁.obj X) (h : φ.app X x = φ.app X y) :
    equalizerSieve x y ∈ J X.unop 
goal: CategoryTheory.Presheaf.equalizerSieve x y ∈ J.sieves (Opposite.unop X)

full_name: CategoryTheory.Presheaf.isLocallyInjective_of_injective
code: lemma isLocallyInjective_of_injective (hφ : ∀ (X : Cᵒᵖ), Function.Injective (φ.app X)) :
    IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.instIsLocallyInjectiveOfIsIsoFunctorOpposite
code: instance [IsIso φ] : IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_forget
code: instance isLocallyInjective_forget [IsLocallyInjective J φ] :
    IsLocallyInjective J (whiskerRight φ (forget D)) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (CategoryTheory.whiskerRight φ (CategoryTheory.forget D))

full_name: CategoryTheory.Presheaf.isLocallyInjective_forget_iff
code: lemma isLocallyInjective_forget_iff :
    IsLocallyInjective J (whiskerRight φ (forget D)) ↔ IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (CategoryTheory.whiskerRight φ (CategoryTheory.forget D)) ↔
  CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_iff_equalizerSieve_mem_imp
code: lemma isLocallyInjective_iff_equalizerSieve_mem_imp :
    IsLocallyInjective J φ ↔ ∀ ⦃X : Cᵒᵖ⦄ (x y : F₁.obj X),
      equalizerSieve (φ.app _ x) (φ.app _ y) ∈ J X.unop → equalizerSieve x y ∈ J X.unop 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ ↔
  ∀ ⦃X : Cᵒᵖ⦄ (x y : (CategoryTheory.forget D).obj (F₁.obj X)),
    CategoryTheory.Presheaf.equalizerSieve ((φ.app X) x) ((φ.app X) y) ∈ J.sieves (Opposite.unop X) →
      CategoryTheory.Presheaf.equalizerSieve x y ∈ J.sieves (Opposite.unop X)

full_name: CategoryTheory.Presheaf.equalizerSieve_mem_of_equalizerSieve_app_mem
code: lemma equalizerSieve_mem_of_equalizerSieve_app_mem
    {X : Cᵒᵖ} (x y : F₁.obj X) (h : equalizerSieve (φ.app _ x) (φ.app _ y) ∈ J X.unop)
    [IsLocallyInjective J φ] :
    equalizerSieve x y ∈ J X.unop 
goal: CategoryTheory.Presheaf.equalizerSieve x y ∈ J.sieves (Opposite.unop X)

full_name: CategoryTheory.Presheaf.isLocallyInjective_comp
code: instance isLocallyInjective_comp [IsLocallyInjective J φ] [IsLocallyInjective J ψ] :
    IsLocallyInjective J (φ ≫ ψ) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (CategoryTheory.CategoryStruct.comp φ ψ)

full_name: CategoryTheory.Presheaf.isLocallyInjective_of_isLocallyInjective
code: lemma isLocallyInjective_of_isLocallyInjective [IsLocallyInjective J (φ ≫ ψ)] :
    IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_of_isLocallyInjective_fac
code: lemma isLocallyInjective_of_isLocallyInjective_fac {φψ : F₁ ⟶ F₃} (fac : φ ≫ ψ = φψ)
    [IsLocallyInjective J φψ] : IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_iff_of_fac
code: lemma isLocallyInjective_iff_of_fac {φψ : F₁ ⟶ F₃} (fac : φ ≫ ψ = φψ) [IsLocallyInjective J ψ] :
    IsLocallyInjective J φψ ↔ IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φψ ↔ CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_comp_iff
code: lemma isLocallyInjective_comp_iff [IsLocallyInjective J ψ] :
    IsLocallyInjective J (φ ≫ ψ) ↔ IsLocallyInjective J φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (CategoryTheory.CategoryStruct.comp φ ψ) ↔
  CategoryTheory.Presheaf.IsLocallyInjective J φ

full_name: CategoryTheory.Presheaf.isLocallyInjective_iff_injective_of_separated
code: lemma isLocallyInjective_iff_injective_of_separated
    (hsep : Presieve.IsSeparated J (F₁ ⋙ forget D)) :
    IsLocallyInjective J φ ↔ ∀ (X : Cᵒᵖ), Function.Injective (φ.app X) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J φ ↔ ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)

full_name: CategoryTheory.Presheaf.instIsLocallyInjectiveι
code: instance (F : Cᵒᵖ ⥤ Type w) (G : GrothendieckTopology.Subpresheaf F) :
    IsLocallyInjective J G.ι 
goal: CategoryTheory.Presheaf.IsLocallyInjective J G.ι

full_name: CategoryTheory.Presheaf.isLocallyInjective_toPlus
code: instance isLocallyInjective_toPlus (P : Cᵒᵖ ⥤ Type max u v) :
    IsLocallyInjective J (J.toPlus P) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (J.toPlus P)

full_name: CategoryTheory.Presheaf.isLocallyInjective_toSheafify
code: instance isLocallyInjective_toSheafify (P : Cᵒᵖ ⥤ Type max u v) :
    IsLocallyInjective J (J.toSheafify P) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (J.toSheafify P)

full_name: CategoryTheory.Presheaf.isLocallyInjective_toSheafify'
code: instance isLocallyInjective_toSheafify' [ConcreteCategory.{max u v} D]
    (P : Cᵒᵖ ⥤ D) [HasWeakSheafify J D] [J.HasSheafCompose (forget D)]
    [J.PreservesSheafification (forget D)] :
    IsLocallyInjective J (toSheafify J P) 
goal: CategoryTheory.Presheaf.IsLocallyInjective J (CategoryTheory.toSheafify J P)

full_name: CategoryTheory.Sheaf.IsLocallyInjective
code: /-- If `φ : F₁ ⟶ F₂` is a morphism of sheaves, this is an abbreviation for
`Presheaf.IsLocallyInjective J φ.val`. Under suitable assumptions, it
is equivalent to the injectivity of all maps `φ.val.app X`,
see `isLocallyInjective_iff_injective`. -/
abbrev IsLocallyInjective 
goal: Prop

full_name: CategoryTheory.Sheaf.isLocallyInjective_sheafToPresheaf_map_iff
code: lemma isLocallyInjective_sheafToPresheaf_map_iff :
    Presheaf.IsLocallyInjective J ((sheafToPresheaf J D).map φ) ↔ IsLocallyInjective φ 
goal: CategoryTheory.Presheaf.IsLocallyInjective J ((CategoryTheory.sheafToPresheaf J D).map φ) ↔
  CategoryTheory.Sheaf.IsLocallyInjective φ

full_name: CategoryTheory.Sheaf.isLocallyInjective_of_iso
code: instance isLocallyInjective_of_iso [IsIso φ] : IsLocallyInjective φ 
goal: CategoryTheory.Sheaf.IsLocallyInjective φ

full_name: CategoryTheory.Sheaf.isLocallyInjective_forget
code: instance isLocallyInjective_forget [IsLocallyInjective φ] :
    IsLocallyInjective ((sheafCompose J (forget D)).map φ) 
goal: CategoryTheory.Sheaf.IsLocallyInjective ((CategoryTheory.sheafCompose J (CategoryTheory.forget D)).map φ)

full_name: CategoryTheory.Sheaf.isLocallyInjective_iff_injective
code: lemma isLocallyInjective_iff_injective :
    IsLocallyInjective φ ↔ ∀ (X : Cᵒᵖ), Function.Injective (φ.val.app X) 
goal: CategoryTheory.Sheaf.IsLocallyInjective φ ↔ ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.val.app X)

full_name: CategoryTheory.Sheaf.mono_of_injective
code: lemma mono_of_injective
    (hφ : ∀ (X : Cᵒᵖ), Function.Injective (φ.val.app X)) : Mono φ 
goal: CategoryTheory.Mono φ

full_name: CategoryTheory.Sheaf.mono_of_isLocallyInjective
code: lemma mono_of_isLocallyInjective [IsLocallyInjective φ] : Mono φ 
goal: CategoryTheory.Mono φ

full_name: CategoryTheory.Sheaf.instIsLocallyInjectiveImageSheafι
code: instance {F G : Sheaf J (Type w)} (f : F ⟶ G) :
    IsLocallyInjective (GrothendieckTopology.imageSheafι f) 
goal: CategoryTheory.Sheaf.IsLocallyInjective (CategoryTheory.GrothendieckTopology.imageSheafι f)