Theorem: CategoryTheory.Presheaf.isLocallyInjective_of_injective
File: Mathlib/CategoryTheory/Sites/LocallyInjective.lean

tactic: convert J.top_mem X.unop
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
⊢ equalizerSieve x y ∈ J.sieves X.unop
state_after: case h.e'_4
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
⊢ equalizerSieve x y = ⊤

tactic: ext Y f
state_before: case h.e'_4
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
⊢ equalizerSieve x y = ⊤
state_after: case h.e'_4.h
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (equalizerSieve x y).arrows f ↔ ⊤.arrows f

tactic: simp only [equalizerSieve_apply, op_unop, Sieve.top_apply, iff_true]
state_before: case h.e'_4.h
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (equalizerSieve x y).arrows f ↔ ⊤.arrows f
state_after: case h.e'_4.h
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (F₁.map f.op) x = (F₁.map f.op) y

tactic: apply hφ
state_before: case h.e'_4.h
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (F₁.map f.op) x = (F₁.map f.op) y
state_after: case h.e'_4.h.a
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (φ.app { unop := Y }) ((F₁.map f.op) x) = (φ.app { unop := Y }) ((F₁.map f.op) y)

tactic: simp [h]
state_before: case h.e'_4.h.a
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ F₃ : Cᵒᵖ ⥤ D
φ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
hφ : ∀ (X : Cᵒᵖ), Function.Injective ⇑(φ.app X)
X : Cᵒᵖ
x y : (forget D).obj (F₁.obj X)
h : (φ.app X) x = (φ.app X) y
Y : C
f : Y ⟶ X.unop
⊢ (φ.app { unop := Y }) ((F₁.map f.op) x) = (φ.app { unop := Y }) ((F₁.map f.op) y)
state_after: no goals