Theorem: IsFractionRing.isAlgebraic_iff
File: Mathlib/RingTheory/Localization/Integral.lean

tactic: constructor <;> rintro ⟨p, hp, px⟩
state_before: R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
⊢ IsAlgebraic A x ↔ IsAlgebraic K x

tactic: refine' ⟨p.map (algebraMap A K), fun h => hp (Polynomial.ext fun i => _), _⟩
state_before: case mp.intro.intro
R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : A[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
⊢ IsAlgebraic K x

tactic: have : algebraMap A K (p.coeff i) = 0 :=
  _root_.trans (Polynomial.coeff_map _ _).symm (by simp [h])
state_before: case mp.intro.intro.refine'_1
R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : A[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
h : Polynomial.map (algebraMap A K) p = 0
i : ℕ
⊢ coeff p i = coeff 0 i

tactic: exact to_map_eq_zero_iff.mp this
state_before: case mp.intro.intro.refine'_1
R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : A[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
h : Polynomial.map (algebraMap A K) p = 0
i : ℕ
this : ↑(algebraMap A K) (coeff p i) = 0
⊢ coeff p i = coeff 0 i

tactic: simp [h]
state_before: R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : A[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
h : Polynomial.map (algebraMap A K) p = 0
i : ℕ
⊢ coeff (Polynomial.map (algebraMap A K) p) i = 0

tactic: exact (Polynomial.aeval_map_algebraMap K _ _).trans px
state_before: case mp.intro.intro.refine'_2
R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : A[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
⊢ ↑(aeval x) (Polynomial.map (algebraMap A K) p) = 0

tactic: exact
  ⟨integerNormalization _ p, mt integerNormalization_eq_zero_iff.mp hp,
    integerNormalization_aeval_eq_zero _ p px⟩
state_before: case mpr.intro.intro
R : Type ?u.95350
inst✝¹² : CommRing R
M : Submonoid R
S : Type ?u.95557
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type ?u.95813
inst✝⁹ : CommRing P
A : Type u_1
K : Type u_3
C : Type u_2
inst✝⁸ : CommRing A
inst✝⁷ : IsDomain A
inst✝⁶ : Field K
inst✝⁵ : Algebra A K
inst✝⁴ : IsFractionRing A K
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Algebra K C
inst✝ : IsScalarTower A K C
x : C
p : K[X]
hp : p ≠ 0
px : ↑(aeval x) p = 0
⊢ IsAlgebraic A x