Theorem: RingHom.isIntegralElem_localization_at_leadingCoeff
File: Mathlib/RingTheory/Localization/Integral.lean

Proof steps:
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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : 1 = 0
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)

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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
tactic: by_cases triv : (1 : Rₘ) = 0
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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
state_after: 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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
tactic: haveI : Nontrivial Rₘ := nontrivial_of_ne 1 0 triv
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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
state_after: case neg.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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
b : Rₘ
hb : (algebraMap R Rₘ) ↑⟨p.leadingCoeff, hM⟩ * b = 1
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
tactic: obtain ⟨b, hb⟩ := isUnit_iff_exists_inv.mp (map_units Rₘ ⟨p.leadingCoeff, hM⟩)
state_before: case neg.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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
b : Rₘ
hb : (algebraMap R Rₘ) ↑⟨p.leadingCoeff, hM⟩ * b = 1
⊢ (IsLocalization.map Sₘ f ⋯).IsIntegralElem ((algebraMap S Sₘ) x)
state_after: case neg.intro.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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
b : Rₘ
hb : (algebraMap R Rₘ) ↑⟨p.leadingCoeff, hM⟩ * b = 1
⊢ (Polynomial.map (algebraMap R Rₘ) p * C b).Monic

case neg.intro.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
Rₘ✝ : Type u_4
Sₘ✝ : Type u_5
inst✝¹³ : CommRing Rₘ✝
inst✝¹² : CommRing Sₘ✝
inst✝¹¹ : Algebra R✝ Rₘ✝
inst✝¹⁰ : IsLocalization M✝ Rₘ✝
inst✝⁹ : Algebra S✝ Sₘ✝
inst✝⁸ : IsLocalization (Algebra.algebraMapSubmonoid S✝ M✝) Sₘ✝
R : Type u_6
S : Type u_7
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
x : S
p : R[X]
hf : eval₂ f x p = 0
M : Submonoid R
hM : p.leadingCoeff ∈ M
Rₘ : Type u_8
Sₘ : Type u_9
inst✝⁵ : CommRing Rₘ
inst✝⁴ : CommRing Sₘ
inst✝³ : Algebra R Rₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : Algebra S Sₘ
inst✝ : IsLocalization (Submonoid.map f M) Sₘ
triv : ¬1 = 0
this : Nontrivial Rₘ
b : Rₘ
hb : (algebraMap R Rₘ) ↑⟨p.leadingCoeff, hM⟩ * b = 1
⊢ eval₂ (IsLocalization.map Sₘ f ⋯) ((algebraMap S Sₘ) x) (Polynomial.map (algebraMap R Rₘ) p * C b) = 0
tactic: refine ⟨p.map (algebraMap R Rₘ) * C b, ⟨?_, ?_⟩⟩