Theorem: CategoryTheory.LocallyCoverDense.pushforward_cover_iff_cover_pullback
File: Mathlib/CategoryTheory/Sites/InducedTopology.lean

tactic: constructor
state_before: C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
⊢ K.sieves (G.obj X) (Sieve.functorPushforward G S) ↔ ∃ T, Sieve.functorPullback G ↑T = S
state_after: case mp
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
⊢ K.sieves (G.obj X) (Sieve.functorPushforward G S) → ∃ T, Sieve.functorPullback G ↑T = S

case mpr
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
⊢ (∃ T, Sieve.functorPullback G ↑T = S) → K.sieves (G.obj X) (Sieve.functorPushforward G S)

tactic: intro hS
state_before: case mp
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
⊢ K.sieves (G.obj X) (Sieve.functorPushforward G S) → ∃ T, Sieve.functorPullback G ↑T = S
state_after: case mp
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
hS : K.sieves (G.obj X) (Sieve.functorPushforward G S)
⊢ ∃ T, Sieve.functorPullback G ↑T = S

tactic: exact ⟨⟨_, hS⟩, (Sieve.fullyFaithfulFunctorGaloisCoinsertion G X).u_l_eq S⟩
state_before: case mp
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
hS : K.sieves (G.obj X) (Sieve.functorPushforward G S)
⊢ ∃ T, Sieve.functorPullback G ↑T = S
state_after: no goals

tactic: rintro ⟨T, rfl⟩
state_before: case mpr
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
S : Sieve X
⊢ (∃ T, Sieve.functorPullback G ↑T = S) → K.sieves (G.obj X) (Sieve.functorPushforward G S)
state_after: case mpr.intro
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
T : ↑(K.sieves (G.obj X))
⊢ K.sieves (G.obj X) (Sieve.functorPushforward G (Sieve.functorPullback G ↑T))

tactic: exact Hld T
state_before: case mpr.intro
C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
D : Type u_2
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
A : Type v
inst✝² : Category.{u, v} A
inst✝¹ : G.Full
inst✝ : G.Faithful
Hld : LocallyCoverDense K G
X : C
T : ↑(K.sieves (G.obj X))
⊢ K.sieves (G.obj X) (Sieve.functorPushforward G (Sieve.functorPullback G ↑T))
state_after: no goals