Theorem: CategoryTheory.GrothendieckTopology.close_eq_top_iff_mem
File: Mathlib/CategoryTheory/Sites/Closed.lean

tactic: constructor
state_before: C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
⊢ J₁.close S = ⊤ ↔ S ∈ J₁.sieves X
state_after: case mp
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
⊢ J₁.close S = ⊤ → S ∈ J₁.sieves X

case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
⊢ S ∈ J₁.sieves X → J₁.close S = ⊤

tactic: intro h
state_before: case mp
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
⊢ J₁.close S = ⊤ → S ∈ J₁.sieves X
state_after: case mp
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
⊢ S ∈ J₁.sieves X

tactic: apply J₁.transitive (J₁.top_mem X)
state_before: case mp
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
⊢ S ∈ J₁.sieves X
state_after: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
⊢ ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, ⊤.arrows f → Sieve.pullback f S ∈ J₁.sieves Y

tactic: intro Y f hf
state_before: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
⊢ ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, ⊤.arrows f → Sieve.pullback f S ∈ J₁.sieves Y
state_after: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
Y : C
f : Y ⟶ X
hf : ⊤.arrows f
⊢ Sieve.pullback f S ∈ J₁.sieves Y

tactic: change J₁.close S f
state_before: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
Y : C
f : Y ⟶ X
hf : ⊤.arrows f
⊢ Sieve.pullback f S ∈ J₁.sieves Y
state_after: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
Y : C
f : Y ⟶ X
hf : ⊤.arrows f
⊢ (J₁.close S).arrows f

tactic: rwa [h]
state_before: case mp.h
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
h : J₁.close S = ⊤
Y : C
f : Y ⟶ X
hf : ⊤.arrows f
⊢ (J₁.close S).arrows f
state_after: no goals

tactic: intro hS
state_before: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
⊢ S ∈ J₁.sieves X → J₁.close S = ⊤
state_after: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
⊢ J₁.close S = ⊤

tactic: rw [eq_top_iff]
state_before: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
⊢ J₁.close S = ⊤
state_after: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
⊢ ⊤ ≤ J₁.close S

tactic: intro Y f _
state_before: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
⊢ ⊤ ≤ J₁.close S
state_after: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
Y : C
f : Y ⟶ X
a✝ : ⊤.arrows f
⊢ (J₁.close S).arrows f

tactic: apply J₁.pullback_stable _ hS
state_before: case mpr
C : Type u
inst✝ : Category.{v, u} C
J₁ J₂ : GrothendieckTopology C
X : C
S : Sieve X
hS : S ∈ J₁.sieves X
Y : C
f : Y ⟶ X
a✝ : ⊤.arrows f
⊢ (J₁.close S).arrows f
state_after: no goals