Theorem: IsIntegral.tmul
File: Mathlib/RingTheory/IntegralClosure.lean

tactic: obtain ⟨p, hp, hp'⟩ := h
state_before: R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
h : IsIntegral R y
⊢ IsIntegral A (x ⊗ₜ[R] y)

tactic: refine' ⟨(p.map (_root_.algebraMap R A)).scaleRoots x, _, _⟩
state_before: case intro.intro
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ IsIntegral A (x ⊗ₜ[R] y)

tactic: convert Polynomial.scaleRoots_eval₂_mul (R := A ⊗[R] B) (S := A)
    Algebra.TensorProduct.includeLeftRingHom (?_) x
state_before: case intro.intro.refine'_2
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ eval₂ (_root_.algebraMap A (A ⊗[R] B)) (x ⊗ₜ[R] y) (scaleRoots (Polynomial.map (_root_.algebraMap R A) p) x) = 0

tactic: any_goals exact 1 ⊗ₜ y
state_before: case h.e'_2.h.e'_6
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ x ⊗ₜ[R] y = ↑Algebra.TensorProduct.includeLeftRingHom x * ?intro.intro.refine'_2.convert_2

case h.e'_3
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ 0 =
    ↑Algebra.TensorProduct.includeLeftRingHom x ^ natDegree (Polynomial.map (_root_.algebraMap R A) p) *
      eval₂ Algebra.TensorProduct.includeLeftRingHom ?intro.intro.refine'_2.convert_2
        (Polynomial.map (_root_.algebraMap R A) p)

case intro.intro.refine'_2.convert_2
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ A ⊗[R] B

tactic: rw [Polynomial.monic_scaleRoots_iff]
state_before: case intro.intro.refine'_1
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ Monic (scaleRoots (Polynomial.map (_root_.algebraMap R A) p) x)

tactic: exact hp.map _
state_before: case intro.intro.refine'_1
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ Monic (Polynomial.map (_root_.algebraMap R A) p)

tactic: exact 1 ⊗ₜ y
state_before: case intro.intro.refine'_2.convert_2
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ A ⊗[R] B

tactic: simp only [Algebra.TensorProduct.includeLeftRingHom_apply,
  Algebra.TensorProduct.tmul_mul_tmul, mul_one, one_mul]
state_before: case h.e'_2.h.e'_6
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ x ⊗ₜ[R] y = ↑Algebra.TensorProduct.includeLeftRingHom x * 1 ⊗ₜ[R] y

tactic: simp only [Algebra.TensorProduct.includeLeftRingHom_apply, Algebra.TensorProduct.tmul_pow,
  one_pow]
state_before: case h.e'_3
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ 0 =
    ↑Algebra.TensorProduct.includeLeftRingHom x ^ natDegree (Polynomial.map (_root_.algebraMap R A) p) *
      eval₂ Algebra.TensorProduct.includeLeftRingHom (1 ⊗ₜ[R] y) (Polynomial.map (_root_.algebraMap R A) p)

tactic: convert (MulZeroClass.mul_zero (M₀ := A ⊗[R] B) _).symm
state_before: case h.e'_3
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ 0 =
    (x ^ natDegree (Polynomial.map (_root_.algebraMap R A) p)) ⊗ₜ[R] 1 *
      eval₂ Algebra.TensorProduct.includeLeftRingHom (1 ⊗ₜ[R] y) (Polynomial.map (_root_.algebraMap R A) p)

tactic: erw [Polynomial.eval₂_map, Algebra.TensorProduct.includeLeft_comp_algebraMap,
  ← Polynomial.eval₂_map]
state_before: case h.e'_3.h.e'_6
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ eval₂ Algebra.TensorProduct.includeLeftRingHom (1 ⊗ₜ[R] y) (Polynomial.map (_root_.algebraMap R A) p) = 0

tactic: convert Polynomial.eval₂_at_apply
  (Algebra.TensorProduct.includeRight : B →ₐ[R] A ⊗[R] B).toRingHom y
state_before: case h.e'_3.h.e'_6
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ eval₂ (↑Algebra.TensorProduct.includeRight) (1 ⊗ₜ[R] y) (Polynomial.map (_root_.algebraMap R B) p) = 0

tactic: rw [Polynomial.eval_map, hp', _root_.map_zero]
state_before: case h.e'_3
R : Type u_1
A : Type u_3
B : Type u_2
S : Type ?u.811467
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x : A
y : B
p : R[X]
hp : Monic p
hp' : eval₂ (_root_.algebraMap R B) y p = 0
⊢ 0 = ↑↑Algebra.TensorProduct.includeRight (eval y (Polynomial.map (_root_.algebraMap R B) p))