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

Proof steps:
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 (unop X)
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: convert J.top_mem X.unop
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 ⟶ unop X
⊢ (equalizerSieve x y).arrows f ↔ ⊤.arrows f
tactic: ext Y f
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 ⟶ unop X
⊢ (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 ⟶ unop X
⊢ (F₁.map f.op) x = (F₁.map f.op) y
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 ⟶ unop X
⊢ (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 ⟶ unop X
⊢ (φ.app (op Y)) ((F₁.map f.op) x) = (φ.app (op Y)) ((F₁.map f.op) y)
tactic: apply 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 ⟶ unop X
⊢ (φ.app (op Y)) ((F₁.map f.op) x) = (φ.app (op Y)) ((F₁.map f.op) y)
state_after: no goals
tactic: simp [h]