Theorem: CategoryTheory.Equivalence.locallyCoverDense
File: Mathlib/CategoryTheory/Sites/Equivalence.lean

tactic: intro X T
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
⊢ LocallyCoverDense J e.inverse
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
⊢ Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T) ∈ J.sieves (e.inverse.obj X)

tactic: convert T.prop
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
⊢ Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T) ∈ J.sieves (e.inverse.obj X)
state_after: case h.e'_4
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
⊢ Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T) = ↑T

tactic: ext Z f
state_before: case h.e'_4
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
⊢ Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T) = ↑T
state_after: case h.e'_4.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f ↔ (↑T).arrows f

tactic: constructor
state_before: case h.e'_4.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f ↔ (↑T).arrows f
state_after: case h.e'_4.h.mp
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f → (↑T).arrows f

case h.e'_4.h.mpr
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (↑T).arrows f → (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f

tactic: rintro ⟨_, _, g', hg, rfl⟩
state_before: case h.e'_4.h.mp
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f → (↑T).arrows f
state_after: case h.e'_4.h.mp.intro.intro.intro.intro
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
w✝¹ : D
w✝ : w✝¹ ⟶ X
g' : Z ⟶ e.inverse.obj w✝¹
hg : (Sieve.functorPullback e.inverse ↑T).arrows w✝
⊢ (↑T).arrows (g' ≫ e.inverse.map w✝)

tactic: exact T.val.downward_closed hg g'
state_before: case h.e'_4.h.mp.intro.intro.intro.intro
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
w✝¹ : D
w✝ : w✝¹ ⟶ X
g' : Z ⟶ e.inverse.obj w✝¹
hg : (Sieve.functorPullback e.inverse ↑T).arrows w✝
⊢ (↑T).arrows (g' ≫ e.inverse.map w✝)
state_after: no goals

tactic: intro hf
state_before: case h.e'_4.h.mpr
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
⊢ (↑T).arrows f → (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f
state_after: case h.e'_4.h.mpr
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f

tactic: refine ⟨e.functor.obj Z, (Adjunction.homEquiv e.toAdjunction _ _).symm f, e.unit.app Z, ?_, ?_⟩
state_before: case h.e'_4.h.mpr
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (Sieve.functorPushforward e.inverse (Sieve.functorPullback e.inverse ↑T)).arrows f
state_after: case h.e'_4.h.mpr.refine_1
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (Sieve.functorPullback e.inverse ↑T).arrows ((e.toAdjunction.homEquiv Z X).symm f)

case h.e'_4.h.mpr.refine_2
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ f = e.unit.app Z ≫ e.inverse.map ((e.toAdjunction.homEquiv Z X).symm f)

tactic: simp only [Adjunction.homEquiv_counit, Functor.id_obj, Equivalence.toAdjunction_counit,
  Sieve.functorPullback_apply, Presieve.functorPullback_mem, Functor.map_comp,
  Equivalence.inv_fun_map, Functor.comp_obj, Category.assoc, Equivalence.unit_inverse_comp,
  Category.comp_id]
state_before: case h.e'_4.h.mpr.refine_1
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (Sieve.functorPullback e.inverse ↑T).arrows ((e.toAdjunction.homEquiv Z X).symm f)
state_after: case h.e'_4.h.mpr.refine_1
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (↑T).arrows (e.unitInv.app Z ≫ f)

tactic: exact T.val.downward_closed hf _
state_before: case h.e'_4.h.mpr.refine_1
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ (↑T).arrows (e.unitInv.app Z ≫ f)
state_after: no goals

tactic: simp
state_before: case h.e'_4.h.mpr.refine_2
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
K : GrothendieckTopology D
e : C ≌ D
G : D ⥤ C
A : Type u₃
inst✝ : Category.{v₃, u₃} A
X : D
T : ↑(J.sieves (e.inverse.obj X))
Z : C
f : Z ⟶ e.inverse.obj X
hf : (↑T).arrows f
⊢ f = e.unit.app Z ≫ e.inverse.map ((e.toAdjunction.homEquiv Z X).symm f)
state_after: no goals