Theorem: isAlgebraic_of_isLocalization
File: Mathlib/RingTheory/Localization/Integral.lean

tactic: constructor
state_before: R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
⊢ Algebra.IsAlgebraic R S
state_after: case isAlgebraic
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
⊢ ∀ (x : S), IsAlgebraic R x

tactic: intro x
state_before: case isAlgebraic
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
⊢ ∀ (x : S), IsAlgebraic R x
state_after: case isAlgebraic
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : S
⊢ IsAlgebraic R x

tactic: obtain ⟨x, s, rfl⟩ := IsLocalization.mk'_surjective M x
state_before: case isAlgebraic
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : S
⊢ IsAlgebraic R x
state_after: case isAlgebraic.intro.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
⊢ IsAlgebraic R (mk' S x s)

tactic: by_cases hs : (s : R) = 0
state_before: case isAlgebraic.intro.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
⊢ IsAlgebraic R (mk' S x s)
state_after: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
⊢ IsAlgebraic R (mk' S x s)

case neg
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ IsAlgebraic R (mk' S x s)

tactic: refine ⟨s • X - C x, ?_, ?_⟩
state_before: case neg
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ IsAlgebraic R (mk' S x s)
state_after: case neg.refine_1
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ s • X - C x ≠ 0

case neg.refine_2
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ (aeval (mk' S x s)) (s • X - C x) = 0

tactic: have := IsLocalization.mk'_spec S x s
state_before: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
⊢ IsAlgebraic R (mk' S x s)
state_after: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
this : mk' S x s * (algebraMap R S) ↑s = (algebraMap R S) x
⊢ IsAlgebraic R (mk' S x s)

tactic: rw [hs, map_zero, mul_zero] at this
state_before: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
this : mk' S x s * (algebraMap R S) ↑s = (algebraMap R S) x
⊢ IsAlgebraic R (mk' S x s)
state_after: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
this : 0 = (algebraMap R S) x
⊢ IsAlgebraic R (mk' S x s)

tactic: exact ⟨X, X_ne_zero, by simp [IsLocalization.mk'_eq_mul_mk'_one x, ← this]⟩
state_before: case pos
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
this : 0 = (algebraMap R S) x
⊢ IsAlgebraic R (mk' S x s)
state_after: no goals

tactic: simp [IsLocalization.mk'_eq_mul_mk'_one x, ← this]
state_before: R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ↑s = 0
this : 0 = (algebraMap R S) x
⊢ (aeval (mk' S x s)) X = 0
state_after: no goals

tactic: intro e
state_before: case neg.refine_1
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ s • X - C x ≠ 0
state_after: case neg.refine_1
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
e : s • X - C x = 0
⊢ False

tactic: apply hs
state_before: case neg.refine_1
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
e : s • X - C x = 0
⊢ False
state_after: case neg.refine_1
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
e : s • X - C x = 0
⊢ ↑s = 0

tactic: simp only [map_sub, Algebra.smul_def, Submonoid.smul_def,
  map_mul, AlgHom.commutes, aeval_X, IsLocalization.mk'_spec', aeval_C, sub_self]
state_before: case neg.refine_2
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
M✝ : Submonoid R✝
S✝ : Type u_2
inst✝⁹ : CommRing S✝
inst✝⁸ : Algebra R✝ S✝
P : Type u_3
inst✝⁷ : CommRing P
A : Type u_4
K : Type u_5
inst✝⁶ : CommRing A
inst✝⁵ : IsDomain A
R : Type u_6
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_7
inst✝³ : CommRing S
inst✝² : Nontrivial R
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
x : R
s : ↥M
hs : ¬↑s = 0
⊢ (aeval (mk' S x s)) (s • X - C x) = 0
state_after: no goals