Theorem: CategoryTheory.over_forget_locallyCoverDense
File: Mathlib/CategoryTheory/Sites/InducedTopology.lean

tactic: intro Y T
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
⊢ LocallyCoverDense J (Over.forget X)
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
⊢ Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T) ∈ J.sieves ((Over.forget X).obj Y)

tactic: convert T.property
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
⊢ Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T) ∈ J.sieves ((Over.forget X).obj Y)
state_after: case h.e'_4
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
⊢ Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T) = ↑T

tactic: ext Z f
state_before: case h.e'_4
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
⊢ Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T) = ↑T
state_after: case h.e'_4.h
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f ↔ (↑T).arrows f

tactic: constructor
state_before: case h.e'_4.h
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f ↔ (↑T).arrows f
state_after: case h.e'_4.h.mp
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f → (↑T).arrows f

case h.e'_4.h.mpr
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (↑T).arrows f → (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f

tactic: rintro ⟨_, _, g', hg, rfl⟩
state_before: case h.e'_4.h.mp
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f → (↑T).arrows f
state_after: case h.e'_4.h.mp.intro.intro.intro.intro
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
w✝¹ : Over X
w✝ : w✝¹ ⟶ Y
g' : Z ⟶ (Over.forget X).obj w✝¹
hg : (Sieve.functorPullback (Over.forget X) ↑T).arrows w✝
⊢ (↑T).arrows (g' ≫ (Over.forget X).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_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
w✝¹ : Over X
w✝ : w✝¹ ⟶ Y
g' : Z ⟶ (Over.forget X).obj w✝¹
hg : (Sieve.functorPullback (Over.forget X) ↑T).arrows w✝
⊢ (↑T).arrows (g' ≫ (Over.forget X).map w✝)
state_after: no goals

tactic: intro hf
state_before: case h.e'_4.h.mpr
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
⊢ (↑T).arrows f → (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f
state_after: case h.e'_4.h.mpr
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
hf : (↑T).arrows f
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f

tactic: exact ⟨Over.mk (f ≫ Y.hom), Over.homMk f, 𝟙 _, hf, (Category.id_comp _).symm⟩
state_before: case h.e'_4.h.mpr
C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.10517, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝ : Category.{u, v} A
X : C
Y : Over X
T : ↑(J.sieves ((Over.forget X).obj Y))
Z : C
f : Z ⟶ (Over.forget X).obj Y
hf : (↑T).arrows f
⊢ (Sieve.functorPushforward (Over.forget X) (Sieve.functorPullback (Over.forget X) ↑T)).arrows f
state_after: no goals