Theorem: IsLocalizedModule.mk'_mul_mk'_of_map_mul
File: Mathlib/Algebra/Module/LocalizedModule.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ mk' f m₁ s₁ * mk' f m₂ s₂ = mk' f (m₁ * m₂) (s₁ * s₂)
state_after: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ mk' f (m₁ * m₂) (s₁ * s₂) = mk' f m₁ s₁ * mk' f m₂ s₂
tactic: symm
state_before: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ mk' f (m₁ * m₂) (s₁ * s₂) = mk' f m₁ s₁ * mk' f m₂ s₂
state_after: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ * m₂, s₁ * s₂).1 = ↑(m₁ * m₂, s₁ * s₂).2 • (mk' f m₁ s₁ * mk' f m₂ s₂)
tactic: apply (Module.End_algebraMap_isUnit_inv_apply_eq_iff _ _ _ _).mpr
state_before: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ * m₂, s₁ * s₂).1 = ↑(m₁ * m₂, s₁ * s₂).2 • (mk' f m₁ s₁ * mk' f m₂ s₂)
state_after: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ • m₂) = (↑s₁ • ↑s₂) • mk' f m₁ s₁ • mk' f m₂ s₂
tactic: simp_rw [Submonoid.coe_mul, ← smul_eq_mul]
state_before: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ • m₂) = (↑s₁ • ↑s₂) • mk' f m₁ s₁ • mk' f m₂ s₂
state_after: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ • m₂) = mk' f (↑s₁ • m₁) s₁ • mk' f (↑s₂ • m₂) s₂
tactic: rw [smul_smul_smul_comm, ← mk'_smul, ← mk'_smul]
state_before: R : Type u_1
inst✝¹⁷ : CommSemiring R
S : Submonoid R
M✝ : Type u_2
M'✝ : Type u_3
M'' : Type u_4
inst✝¹⁶ : AddCommMonoid M✝
inst✝¹⁵ : AddCommMonoid M'✝
inst✝¹⁴ : AddCommMonoid M''
A : Type u_5
inst✝¹³ : CommSemiring A
inst✝¹² : Algebra R A
inst✝¹¹ : Module A M'✝
inst✝¹⁰ : IsLocalization S A
inst✝⁹ : Module R M✝
inst✝⁸ : Module R M'✝
inst✝⁷ : Module R M''
inst✝⁶ : IsScalarTower R A M'✝
f✝ : M✝ →ₗ[R] M'✝
g : M✝ →ₗ[R] M''
inst✝⁵ : IsLocalizedModule S f✝
M : Type u_6
M' : Type u_7
inst✝⁴ : Semiring M
inst✝³ : Semiring M'
inst✝² : Module R M
inst✝¹ : Algebra R M'
f : M →ₗ[R] M'
hf : ∀ (m₁ m₂ : M), f (m₁ * m₂) = f m₁ * f m₂
inst✝ : IsLocalizedModule S f
m₁ m₂ : M
s₁ s₂ : ↥S
⊢ f (m₁ • m₂) = mk' f (↑s₁ • m₁) s₁ • mk' f (↑s₂ • m₂) s₂
state_after: no goals
tactic: simp_rw [← Submonoid.smul_def, mk'_cancel, smul_eq_mul, hf]