Theorem: PrimeSpectrum.localization_comap_inducing
File: Mathlib/AlgebraicGeometry/PrimeSpectrum/Basic.lean

tactic: refine ⟨TopologicalSpace.ext_isClosed fun Z ↦ ?_⟩
state_before: R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
⊢ Inducing ⇑(comap (algebraMap R S))
state_after: R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ IsClosed Z ↔ IsClosed Z

tactic: simp_rw [isClosed_induced_iff, isClosed_iff_zeroLocus, @eq_comm _ _ (zeroLocus _),
  exists_exists_eq_and, preimage_comap_zeroLocus]
state_before: R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ IsClosed Z ↔ IsClosed Z
state_after: R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ s, zeroLocus s = Z) ↔ ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z

tactic: constructor
state_before: R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ s, zeroLocus s = Z) ↔ ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z
state_after: case mp
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ s, zeroLocus s = Z) → ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z

case mpr
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z) → ∃ s, zeroLocus s = Z

tactic: rintro ⟨s, rfl⟩
state_before: case mp
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ s, zeroLocus s = Z) → ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z
state_after: case mp.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set S
⊢ ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = zeroLocus s

tactic: refine ⟨(Ideal.span s).comap (algebraMap R S), ?_⟩
state_before: case mp.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set S
⊢ ∃ a, zeroLocus (⇑(algebraMap R S) '' a) = zeroLocus s
state_after: case mp.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set S
⊢ zeroLocus (⇑(algebraMap R S) '' ↑(Ideal.comap (algebraMap R S) (Ideal.span s))) = zeroLocus s

tactic: rw [← zeroLocus_span, ← zeroLocus_span s, ← Ideal.map, IsLocalization.map_comap M S]
state_before: case mp.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set S
⊢ zeroLocus (⇑(algebraMap R S) '' ↑(Ideal.comap (algebraMap R S) (Ideal.span s))) = zeroLocus s
state_after: no goals

tactic: rintro ⟨s, rfl⟩
state_before: case mpr
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
Z : Set (PrimeSpectrum S)
⊢ (∃ a, zeroLocus (⇑(algebraMap R S) '' a) = Z) → ∃ s, zeroLocus s = Z
state_after: case mpr.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set R
⊢ ∃ s_1, zeroLocus s_1 = zeroLocus (⇑(algebraMap R S) '' s)

tactic: exact ⟨_, rfl⟩
state_before: case mpr.intro
R : Type u
S : Type v
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S
S' : Type u_1
inst✝² : CommSemiring S'
f : R →+* S
inst✝¹ : Algebra R S
M : Submonoid R
inst✝ : IsLocalization M S
s : Set R
⊢ ∃ s_1, zeroLocus s_1 = zeroLocus (⇑(algebraMap R S) '' s)
state_after: no goals