-- Mathlib/RingTheory/RingHom/Flat.lean
lemma isStableUnderBaseChange : IsStableUnderBaseChange Flat

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
⊢ Module.Flat S (S ⊗[R] T)

Tactic:
convert this

Result:
case h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
⊢ Algebra.toModule = leftModule

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Module.Flat R T

Tactic:
convert h

Result:
case h.e'_5.h.e'_5
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ inst✝ = (algebraMap R T).toAlgebra

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).Flat
⊢ Algebra.TensorProduct.includeLeftRingHom.Flat

Tactic:
replace h : Module.Flat R T := by
  rw [RingHom.Flat] at h; convert h; ext; simp_rw [Algebra.smul_def]; rfl

Result:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Algebra.TensorProduct.includeLeftRingHom.Flat

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Module.Flat S (S ⊗[R] T)

Tactic:
exact inferInstance

Result:
no goals

Proof state:
case h.e'_5.h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
r✝ : R
x✝ : T
⊢ (algebraMap R T) r✝ * x✝ = (algebraMap R T) r✝ * x✝

Tactic:
rfl

Result:
no goals

Proof state:
⊢ ∀ ⦃R S T : Type u_4⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).Flat → Algebra.TensorProduct.includeLeftRingHom.Flat

Tactic:
introv h

Result:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).Flat
⊢ Algebra.TensorProduct.includeLeftRingHom.Flat

Proof state:
⊢ IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Flat

Tactic:
apply IsStableUnderBaseChange.mk _ respectsIso

Result:
⊢ ∀ ⦃R S T : Type u_4⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).Flat → Algebra.TensorProduct.includeLeftRingHom.Flat

Proof state:
case h.e'_5.h.h.e_5.h.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
r✝ : S
x✝ : S ⊗[R] T
⊢ (let_fun I := Algebra.TensorProduct.includeLeftRingHom.toAlgebra;
    r✝ • x✝) =
    r✝ • x✝

Tactic:
simp_rw [Algebra.smul_def]

Result:
case h.e'_5.h.h.e_5.h.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
r✝ : S
x✝ : S ⊗[R] T
⊢ (algebraMap S (S ⊗[R] T)) r✝ * x✝ = (algebraMap S (S ⊗[R] T)) r✝ * x✝

Proof state:
case h.e'_5.h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
r✝ : R
x✝ : T
⊢ (let_fun I := inst✝;
    r✝ • x✝) =
    r✝ • x✝

Tactic:
simp_rw [Algebra.smul_def]

Result:
case h.e'_5.h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
r✝ : R
x✝ : T
⊢ (algebraMap R T) r✝ * x✝ = (algebraMap R T) r✝ * x✝

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).Flat
⊢ Module.Flat R T

Tactic:
rw [RingHom.Flat] at h

Result:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Module.Flat R T

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Algebra.TensorProduct.includeLeftRingHom.Flat

Tactic:
suffices Module.Flat S (S ⊗[R] T) by
  rw [RingHom.Flat]; convert this; congr; ext; simp_rw [Algebra.smul_def]; rfl

Result:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ Module.Flat S (S ⊗[R] T)

Proof state:
case h.e'_5.h.e'_5
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
⊢ inst✝ = (algebraMap R T).toAlgebra

Tactic:
ext

Result:
case h.e'_5.h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
r✝ : R
x✝ : T
⊢ (let_fun I := inst✝;
    r✝ • x✝) =
    r✝ • x✝

Proof state:
case h.e'_5.h.h.e_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
⊢ Algebra.TensorProduct.includeLeftRingHom.toAlgebra = Algebra.TensorProduct.leftAlgebra

Tactic:
ext

Result:
case h.e'_5.h.h.e_5.h.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
r✝ : S
x✝ : S ⊗[R] T
⊢ (let_fun I := Algebra.TensorProduct.includeLeftRingHom.toAlgebra;
    r✝ • x✝) =
    r✝ • x✝

Proof state:
case h.e'_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
⊢ Algebra.toModule = leftModule

Tactic:
congr

Result:
case h.e'_5.h.h.e_5.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
⊢ Algebra.TensorProduct.includeLeftRingHom.toAlgebra = Algebra.TensorProduct.leftAlgebra

Proof state:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
⊢ Algebra.TensorProduct.includeLeftRingHom.Flat

Tactic:
rw [RingHom.Flat]

Result:
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
⊢ Module.Flat S (S ⊗[R] T)

Proof state:
case h.e'_5.h.h.e_5.h.h
R S T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : Module.Flat R T
this : Module.Flat S (S ⊗[R] T)
e_4✝ : NonUnitalNonAssocSemiring.toAddCommMonoid = addCommMonoid
r✝ : S
x✝ : S ⊗[R] T
⊢ (algebraMap S (S ⊗[R] T)) r✝ * x✝ = (algebraMap S (S ⊗[R] T)) r✝ * x✝

Tactic:
rfl

Result:
no goals