Theorem: _private.Mathlib.Algebra.Module.LocalizedModule.0.LocalizedModule.add_assoc'
File: Mathlib/Algebra/Module/LocalizedModule.lean

Proof steps:
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
x y z : LocalizedModule S M
⊢ x + y + z = x + (y + z)
state_after: case h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
y z : LocalizedModule S M
mx : M
sx : ↥S
⊢ mk mx sx + y + z = mk mx sx + (y + z)
tactic: induction' x with mx sx
state_before: case h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
y z : LocalizedModule S M
mx : M
sx : ↥S
⊢ mk mx sx + y + z = mk mx sx + (y + z)
state_after: case h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
z : LocalizedModule S M
mx : M
sx : ↥S
my : M
sy : ↥S
⊢ mk mx sx + mk my sy + z = mk mx sx + (mk my sy + z)
tactic: induction' y with my sy
state_before: case h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
z : LocalizedModule S M
mx : M
sx : ↥S
my : M
sy : ↥S
⊢ mk mx sx + mk my sy + z = mk mx sx + (mk my sy + z)
state_after: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ mk mx sx + mk my sy + mk mz sz = mk mx sx + (mk my sy + mk mz sz)
tactic: induction' z with mz sz
state_before: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ mk mx sx + mk my sy + mk mz sz = mk mx sx + (mk my sy + mk mz sz)
state_after: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ mk (sz • sy • mx + sz • sx • my + (sx * sy) • mz) (sx * sy * sz) =
    mk ((sy * sz) • mx + (sx • sz • my + sx • sy • mz)) (sx * (sy * sz))
tactic: simp only [mk_add_mk, smul_add]
state_before: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ mk (sz • sy • mx + sz • sx • my + (sx * sy) • mz) (sx * sy * sz) =
    mk ((sy * sz) • mx + (sx • sz • my + sx • sy • mz)) (sx * (sy * sz))
state_after: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ 1 • (sx * (sy * sz)) • (sz • sy • mx + sz • sx • my + (sx * sy) • mz) =
    1 • (sx * sy * sz) • ((sy * sz) • mx + (sx • sz • my + sx • sy • mz))
tactic: refine mk_eq.mpr ⟨1, ?_⟩
state_before: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ 1 • (sx * (sy * sz)) • (sz • sy • mx + sz • sx • my + (sx * sy) • mz) =
    1 • (sx * sy * sz) • ((sy * sz) • mx + (sx • sz • my + sx • sy • mz))
state_after: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ (sx * (sy * sz)) • (sz • sy • mx + sz • sx • my + (sx * sy) • mz) =
    (sx * sy * sz) • ((sy * sz) • mx + (sx • sz • my + sx • sy • mz))
tactic: rw [one_smul, one_smul]
state_before: case h.h.h
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ (sx * (sy * sz)) • (sz • sy • mx + sz • sx • my + (sx * sy) • mz) =
    (sx * sy * sz) • ((sy * sz) • mx + (sx • sz • my + sx • sy • mz))
state_after: case h.h.h.e_a
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ sx * (sy * sz) = sx * sy * sz

case h.h.h.e_a
R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
mx : M
sx : ↥S
my : M
sy : ↥S
mz : M
sz : ↥S
⊢ sz • sy • mx + sz • sx • my + (sx * sy) • mz = (sy * sz) • mx + (sx • sz • my + sx • sy • mz)
tactic: congr 1