Theorem: RingHom.isIntegral_stableUnderBaseChange
File: Mathlib/RingTheory/RingHom/Integral.lean

tactic: refine StableUnderBaseChange.mk _ isIntegral_respectsIso ?_
state_before: ⊢ StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] f => f.IsIntegral
state_after: ⊢ ∀ ⦃R S T : Type u_1⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).IsIntegral → includeLeftRingHom.IsIntegral

tactic: introv h x
state_before: ⊢ ∀ ⦃R S T : Type u_1⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).IsIntegral → includeLeftRingHom.IsIntegral
state_after: R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem x

tactic: refine TensorProduct.induction_on x ?_ ?_ ?_
state_before: R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem x
state_after: case refine_1
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem 0

case refine_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x : S) (y : T), includeLeftRingHom.IsIntegralElem (x ⊗ₜ[R] y)

case refine_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x y : S ⊗[R] T),
    includeLeftRingHom.IsIntegralElem x →
      includeLeftRingHom.IsIntegralElem y → includeLeftRingHom.IsIntegralElem (x + y)

tactic: apply isIntegral_zero
state_before: case refine_1
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem 0
state_after: no goals

tactic: intro x y
state_before: case refine_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x : S) (y : T), includeLeftRingHom.IsIntegralElem (x ⊗ₜ[R] y)
state_after: case refine_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x✝ : S ⊗[R] T
x : S
y : T
⊢ includeLeftRingHom.IsIntegralElem (x ⊗ₜ[R] y)

tactic: exact IsIntegral.tmul x (h y)
state_before: case refine_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x✝ : S ⊗[R] T
x : S
y : T
⊢ includeLeftRingHom.IsIntegralElem (x ⊗ₜ[R] y)
state_after: no goals

tactic: intro x y hx hy
state_before: case refine_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x y : S ⊗[R] T),
    includeLeftRingHom.IsIntegralElem x →
      includeLeftRingHom.IsIntegralElem y → includeLeftRingHom.IsIntegralElem (x + y)
state_after: case refine_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x✝ x y : S ⊗[R] T
hx : includeLeftRingHom.IsIntegralElem x
hy : includeLeftRingHom.IsIntegralElem y
⊢ includeLeftRingHom.IsIntegralElem (x + y)

tactic: exact IsIntegral.add hx hy
state_before: case refine_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x✝ x y : S ⊗[R] T
hx : includeLeftRingHom.IsIntegralElem x
hy : includeLeftRingHom.IsIntegralElem y
⊢ includeLeftRingHom.IsIntegralElem (x + y)
state_after: no goals