Theorem: CategoryTheory.GrothendieckTopology.Plus.inj_of_sep
File: Mathlib/CategoryTheory/Sites/Sheafification.lean

tactic: intro x y h
state_before: C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
⊢ Function.Injective ((forget D).map ((toPlus J P).app X.op))

tactic: simp only [toPlus_eq_mk] at h
state_before: C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
h : (forget D).map ((toPlus J P).app X.op) x = (forget D).map ((toPlus J P).app X.op) y
⊢ x = y

tactic: rw [eq_mk_iff_exists] at h
state_before: C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
h : mk (Meq.mk ⊤ x) = mk (Meq.mk ⊤ y)
⊢ x = y

tactic: obtain ⟨W, h1, h2, hh⟩ := h
state_before: C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
h : ∃ W h1 h2, Meq.refine (Meq.mk ⊤ x) h1 = Meq.refine (Meq.mk ⊤ y) h2
⊢ x = y

tactic: apply hsep X W
state_before: case intro.intro.intro
C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
W : Cover J X
h1 h2 : W ⟶ ⊤
hh : Meq.refine (Meq.mk ⊤ x) h1 = Meq.refine (Meq.mk ⊤ y) h2
⊢ x = y

tactic: intro I
state_before: case intro.intro.intro.a
C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
W : Cover J X
h1 h2 : W ⟶ ⊤
hh : Meq.refine (Meq.mk ⊤ x) h1 = Meq.refine (Meq.mk ⊤ y) h2
⊢ ∀ (I : Cover.Arrow W), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y

tactic: apply_fun fun e => e I  at hh
state_before: case intro.intro.intro.a
C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
W : Cover J X
h1 h2 : W ⟶ ⊤
hh : Meq.refine (Meq.mk ⊤ x) h1 = Meq.refine (Meq.mk ⊤ y) h2
I : Cover.Arrow W
⊢ (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y

tactic: exact hh
state_before: case intro.intro.intro.a
C : Type u
inst✝⁶ : Category C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj X.op)),
    (∀ (I : Cover.Arrow S), (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y) → x = y
X : C
x y : (forget D).obj (P.obj X.op)
W : Cover J X
h1 h2 : W ⟶ ⊤
I : Cover.Arrow W
hh : ↑(Meq.refine (Meq.mk ⊤ x) h1) I = ↑(Meq.refine (Meq.mk ⊤ y) h2) I
⊢ (forget D).map (P.map I.f.op) x = (forget D).map (P.map I.f.op) y