[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : SMul M α
inst✝³ : SMul N α
inst✝² : SMul M β
inst✝¹ : SMul N β
inst✝ : SMulCommClass M N β
f : α → β
hf : Injective f
h₁ : ∀ (c : M) (x : α), f (c • x) = c • f x
h₂ : ∀ (c : N) (x : α), f (c • x) = c • f x
c₁ : M
c₂ : N
x : α
⊢ f (c₁ • c₂ • x) = f (c₂ • c₁ • x)
[PROOFSTEP]
simp only [h₁, h₂, smul_comm c₁ c₂ (f x)]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : SMul M α
inst✝³ : SMul N α
inst✝² : SMul M β
inst✝¹ : SMul N β
inst✝ : SMulCommClass M N α
f : α → β
hf : Surjective f
h₁ : ∀ (c : M) (x : α), f (c • x) = c • f x
h₂ : ∀ (c : N) (x : α), f (c • x) = c • f x
c₁ : M
c₂ : N
x : α
⊢ c₁ • c₂ • f x = c₂ • c₁ • f x
[PROOFSTEP]
simp only [← h₁, ← h₂, smul_comm c₁ c₂ x]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α✝ : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
α : Type u_11
inst✝¹ : CommMonoid M
inst✝ : MulAction M α
a a' : M
b : α
⊢ a • a' • b = a' • a • b
[PROOFSTEP]
rw [← mul_smul, mul_comm, mul_smul]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α✝ : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
α : Type u_11
inst✝² : SMul M α
inst✝¹ : SMul Mᵐᵒᵖ α
inst✝ : IsCentralScalar M α
m : Mᵐᵒᵖ
a : α
⊢ MulOpposite.unop m • a = m • a
[PROOFSTEP]
induction m using MulOpposite.rec'
[GOAL]
case h
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α✝ : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
α : Type u_11
inst✝² : SMul M α
inst✝¹ : SMul Mᵐᵒᵖ α
inst✝ : IsCentralScalar M α
a : α
X✝ : M
⊢ MulOpposite.unop (MulOpposite.op X✝) • a = MulOpposite.op X✝ • a
[PROOFSTEP]
exact (IsCentralScalar.op_smul_eq_smul _ a).symm
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : SMul M α
inst✝³ : SMul Mᵐᵒᵖ α
inst✝² : IsCentralScalar M α
inst✝¹ : SMul N α
inst✝ : SMulCommClass M N α
m : Mᵐᵒᵖ
n : N
a : α
⊢ m • n • a = n • m • a
[PROOFSTEP]
rw [← unop_smul_eq_smul m (n • a), ← unop_smul_eq_smul m a, smul_comm]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : SMul M α
inst✝³ : SMul N α
inst✝² : SMul Nᵐᵒᵖ α
inst✝¹ : IsCentralScalar N α
inst✝ : SMulCommClass M N α
m : M
n : Nᵐᵒᵖ
a : α
⊢ m • n • a = n • m • a
[PROOFSTEP]
rw [← unop_smul_eq_smul n (m • a), ← unop_smul_eq_smul n a, smul_comm]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁷ : SMul M α
inst✝⁶ : SMul Mᵐᵒᵖ α
inst✝⁵ : IsCentralScalar M α
inst✝⁴ : SMul M N
inst✝³ : SMul Mᵐᵒᵖ N
inst✝² : IsCentralScalar M N
inst✝¹ : SMul N α
inst✝ : IsScalarTower M N α
m : Mᵐᵒᵖ
n : N
a : α
⊢ (m • n) • a = m • n • a
[PROOFSTEP]
rw [← unop_smul_eq_smul m (n • a), ← unop_smul_eq_smul m n, smul_assoc]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁵ : SMul M α
inst✝⁴ : SMul M N
inst✝³ : SMul N α
inst✝² : SMul Nᵐᵒᵖ α
inst✝¹ : IsCentralScalar N α
inst✝ : IsScalarTower M N α
m : M
n : Nᵐᵒᵖ
a : α
⊢ (m • n) • a = m • n • a
[PROOFSTEP]
rw [← unop_smul_eq_smul n a, ← unop_smul_eq_smul (m • n) a, MulOpposite.unop_smul, smul_assoc]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : SMul M α
inst✝² : SMul M β
inst✝¹ : SMul α β
inst✝ : IsScalarTower M α β
g : N → M
⊢ Sort ?u.10323
[PROOFSTEP]
haveI := comp α g
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : SMul M α
inst✝² : SMul M β
inst✝¹ : SMul α β
inst✝ : IsScalarTower M α β
g : N → M
this : SMul N α
⊢ Sort ?u.10323
[PROOFSTEP]
haveI := comp β g
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : SMul M α
inst✝² : SMul M β
inst✝¹ : SMul α β
inst✝ : IsScalarTower M α β
g : N → M
this✝ : SMul N α
this : SMul N β
⊢ Sort ?u.10323
[PROOFSTEP]
exact IsScalarTower N α β
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁷ : SMul α β
inst✝⁶ : SMul α γ
inst✝⁵ : SMul β δ
inst✝⁴ : SMul α δ
inst✝³ : SMul γ δ
inst✝² : IsScalarTower α β δ
inst✝¹ : IsScalarTower α γ δ
inst✝ : SMulCommClass β γ δ
a : α
b : β
c : γ
d : δ
⊢ (a • b) • c • d = (a • c) • b • d
[PROOFSTEP]
rw [smul_assoc, smul_assoc, smul_comm b]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a₁ a₂ : M
b : α
⊢ (if p then a₁ else a₂) • b = if p then a₁ • b else a₂ • b
[PROOFSTEP]
split_ifs
[GOAL]
case pos
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a₁ a₂ : M
b : α
h✝ : p
⊢ a₁ • b = a₁ • b
[PROOFSTEP]
rfl
[GOAL]
case neg
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a₁ a₂ : M
b : α
h✝ : ¬p
⊢ a₂ • b = a₂ • b
[PROOFSTEP]
rfl
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a : M
b₁ b₂ : α
⊢ (a • if p then b₁ else b₂) = if p then a • b₁ else a • b₂
[PROOFSTEP]
split_ifs
[GOAL]
case pos
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a : M
b₁ b₂ : α
h✝ : p
⊢ a • b₁ = a • b₁
[PROOFSTEP]
rfl
[GOAL]
case neg
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : SMul M α
p : Prop
inst✝ : Decidable p
a : M
b₁ b₂ : α
h✝ : ¬p
⊢ a • b₂ = a • b₂
[PROOFSTEP]
rfl
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : SMul M β
f : β → α
hf : Injective f
smul : ∀ (c : M) (x : β), f (c • x) = c • f x
c₁ c₂ : M
x : β
⊢ f ((c₁ * c₂) • x) = f (c₁ • c₂ • x)
[PROOFSTEP]
simp only [smul, mul_smul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : SMul M β
f : α → β
hf : Surjective f
smul : ∀ (c : M) (x : α), f (c • x) = c • f x
y : β
⊢ 1 • y = y
[PROOFSTEP]
rcases hf y with ⟨x, rfl⟩
[GOAL]
case intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : SMul M β
f : α → β
hf : Surjective f
smul : ∀ (c : M) (x : α), f (c • x) = c • f x
x : α
⊢ 1 • f x = f x
[PROOFSTEP]
rw [← smul, one_smul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : SMul M β
f : α → β
hf : Surjective f
smul : ∀ (c : M) (x : α), f (c • x) = c • f x
c₁ c₂ : M
y : β
⊢ (c₁ * c₂) • y = c₁ • c₂ • y
[PROOFSTEP]
rcases hf y with ⟨x, rfl⟩
[GOAL]
case intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : SMul M β
f : α → β
hf : Surjective f
smul : ∀ (c : M) (x : α), f (c • x) = c • f x
c₁ c₂ : M
x : α
⊢ (c₁ * c₂) • f x = c₁ • c₂ • f x
[PROOFSTEP]
simp only [← smul, mul_smul]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁵ : Monoid M✝
inst✝⁴ : MulAction M✝ α
R : Type u_10
S : Type u_11
M : Type u_12
inst✝³ : Monoid R
inst✝² : MulAction R M
inst✝¹ : Monoid S
inst✝ : SMul S M
f : R →* S
hf : Surjective ↑f
hsmul : ∀ (c : R) (x : M), ↑f c • x = c • x
b : M
⊢ 1 • b = b
[PROOFSTEP]
rw [← f.map_one, hsmul, one_smul]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁵ : Monoid M✝
inst✝⁴ : MulAction M✝ α
R : Type u_10
S : Type u_11
M : Type u_12
inst✝³ : Monoid R
inst✝² : MulAction R M
inst✝¹ : Monoid S
inst✝ : SMul S M
f : R →* S
hf : Surjective ↑f
hsmul : ∀ (c : R) (x : M), ↑f c • x = c • x
a b : R
x : M
⊢ (↑f a * ↑f b) • x = ↑f a • ↑f b • x
[PROOFSTEP]
simp only [← f.map_mul, hsmul, mul_smul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : MulAction M α
inst✝² : Mul α
r s : M
x y : α
inst✝¹ : IsScalarTower M α α
inst✝ : SMulCommClass M α α
⊢ r • x * s • y = (r * s) • (x * y)
[PROOFSTEP]
rw [smul_mul_assoc, mul_smul_comm, ← smul_assoc, smul_eq_mul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝¹ : Monoid M
inst✝ : MulAction M α
y₁ y₂ : α
H : (fun y x => x • y) y₁ = (fun y x => x • y) y₂
⊢ 1 • y₁ = 1 • y₂
[PROOFSTEP]
convert congr_fun H 1
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : Monoid N
g : N →* M
x✝ : α
⊢ 1 • x✝ = x✝
[PROOFSTEP]
simp [(· • ·)]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : Monoid N
g : N →* M
x✝ : α
⊢ SMul.smul 1 x✝ = x✝
[PROOFSTEP]
apply MulAction.one_smul
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : Monoid N
g : N →* M
x✝² x✝¹ : N
x✝ : α
⊢ (x✝² * x✝¹) • x✝ = x✝² • x✝¹ • x✝
[PROOFSTEP]
simp [(· • ·)]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : MulAction M α
inst✝ : Monoid N
g : N →* M
x✝² x✝¹ : N
x✝ : α
⊢ SMul.smul (↑g x✝² * ↑g x✝¹) x✝ = SMul.smul (↑g x✝²) (SMul.smul (↑g x✝¹) x✝)
[PROOFSTEP]
apply MulAction.mul_smul
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
N : Type u_11
inst✝⁴ : Monoid N
inst✝³ : SMul M N
inst✝² : MulAction N α
inst✝¹ : SMul M α
inst✝ : IsScalarTower M N α
x : M
y : α
⊢ (x • 1) • y = x • y
[PROOFSTEP]
rw [smul_assoc, one_smul]
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
N : Type u_11
inst✝² : MulOneClass N
inst✝¹ : SMul M N
inst✝ : IsScalarTower M N N
x : M
y : N
⊢ x • 1 * y = x • y
[PROOFSTEP]
rw [smul_mul_assoc, one_mul]
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
N : Type u_11
inst✝² : MulOneClass N
inst✝¹ : SMul M N
inst✝ : SMulCommClass M N N
x : M
y : N
⊢ y * x • 1 = x • y
[PROOFSTEP]
rw [← smul_eq_mul, ← smul_comm, smul_eq_mul, mul_one]
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
N : Type u_11
inst✝¹ : Monoid N
inst✝ : SMul M N
h : ∀ (x : M) (y : N), x • 1 * y = x • y
x : M
y z : N
⊢ (x • y) • z = x • y • z
[PROOFSTEP]
rw [← h, smul_eq_mul, mul_assoc, h, smul_eq_mul]
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type u_10
N : Type u_11
inst✝¹ : Monoid N
inst✝ : SMul M N
H : ∀ (x : M) (y : N), y * x • 1 = x • y
x : M
y z : N
⊢ x • y • z = y • x • z
[PROOFSTEP]
rw [← H x z, smul_eq_mul, ← H, smul_eq_mul, mul_assoc]
[GOAL]
M✝ : Type u_1
N✝ : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
M : Type ?u.30564
N : Type ?u.30567
inst✝³ : Monoid M
inst✝² : Monoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
x y : M
⊢ OneHom.toFun { toFun := fun x => x • 1, map_one' := (_ : 1 • 1 = 1) } (x * y) =
    OneHom.toFun { toFun := fun x => x • 1, map_one' := (_ : 1 • 1 = 1) } x *
      OneHom.toFun { toFun := fun x => x • 1, map_one' := (_ : 1 • 1 = 1) } y
[PROOFSTEP]
rw [smul_one_mul, smul_smul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : Zero A
inst✝² : SMulZeroClass M A
inst✝¹ : Zero B
inst✝ : SMul M B
f : ZeroHom B A
hf : Injective ↑f
smul : ∀ (c : M) (x : B), ↑f (c • x) = c • ↑f x
c : M
⊢ ↑f (c • 0) = ↑f 0
[PROOFSTEP]
simp only [smul, map_zero, smul_zero]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : Zero A
inst✝² : SMulZeroClass M A
inst✝¹ : Zero B
inst✝ : SMul M B
f : ZeroHom A B
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
c : M
⊢ c • 0 = 0
[PROOFSTEP]
rw [← map_zero f, ← smul, smul_zero]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Zero A
inst✝³ : SMulZeroClass M✝ A
R : Type u_10
S : Type u_11
M : Type u_12
inst✝² : Zero M
inst✝¹ : SMulZeroClass R M
inst✝ : SMul S M
f : R → S
hf : Surjective f
hsmul : ∀ (c : R) (x : M), f c • x = c • x
c : R
⊢ f c • 0 = 0
[PROOFSTEP]
rw [hsmul, smul_zero]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : AddZeroClass A
inst✝¹ : DistribSMul M A
inst✝ : AddZeroClass B
r : M
f : B →+ A
⊢ (fun a => r • ↑f a) 0 = 0
[PROOFSTEP]
simp only [map_zero, smul_zero]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : AddZeroClass A
inst✝¹ : DistribSMul M A
inst✝ : AddZeroClass B
r : M
f : B →+ A
x y : B
⊢ ZeroHom.toFun { toFun := fun a => r • ↑f a, map_zero' := (_ : r • ↑f 0 = 0) } (x + y) =
    ZeroHom.toFun { toFun := fun a => r • ↑f a, map_zero' := (_ : r • ↑f 0 = 0) } x +
      ZeroHom.toFun { toFun := fun a => r • ↑f a, map_zero' := (_ : r • ↑f 0 = 0) } y
[PROOFSTEP]
simp only [map_add, smul_add]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : AddZeroClass A
inst✝² : DistribSMul M A
inst✝¹ : AddZeroClass B
inst✝ : SMul M B
f : B →+ A
hf : Injective ↑f
smul : ∀ (c : M) (x : B), ↑f (c • x) = c • ↑f x
src✝ : SMulZeroClass M B := Injective.smulZeroClass (↑f) hf smul
c : M
x y : B
⊢ ↑f (c • (x + y)) = ↑f (c • x + c • y)
[PROOFSTEP]
simp only [smul, map_add, smul_add]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : AddZeroClass A
inst✝² : DistribSMul M A
inst✝¹ : AddZeroClass B
inst✝ : SMul M B
f : A →+ B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : SMulZeroClass M B := ZeroHom.smulZeroClass (↑f) smul
c : M
x y : B
⊢ c • (x + y) = c • x + c • y
[PROOFSTEP]
rcases hf x with ⟨x, rfl⟩
[GOAL]
case intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : AddZeroClass A
inst✝² : DistribSMul M A
inst✝¹ : AddZeroClass B
inst✝ : SMul M B
f : A →+ B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : SMulZeroClass M B := ZeroHom.smulZeroClass (↑f) smul
c : M
y : B
x : A
⊢ c • (↑f x + y) = c • ↑f x + c • y
[PROOFSTEP]
rcases hf y with ⟨y, rfl⟩
[GOAL]
case intro.intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝³ : AddZeroClass A
inst✝² : DistribSMul M A
inst✝¹ : AddZeroClass B
inst✝ : SMul M B
f : A →+ B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : SMulZeroClass M B := ZeroHom.smulZeroClass (↑f) smul
c : M
x y : A
⊢ c • (↑f x + ↑f y) = c • ↑f x + c • ↑f y
[PROOFSTEP]
simp only [smul_add, ← smul, ← map_add]
[GOAL]
M✝ : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : AddZeroClass A
inst✝³ : DistribSMul M✝ A
R : Type u_10
S : Type u_11
M : Type u_12
inst✝² : AddZeroClass M
inst✝¹ : DistribSMul R M
inst✝ : SMul S M
f : R → S
hf : Surjective f
hsmul : ∀ (c : R) (x : M), f c • x = c • x
src✝ : SMulZeroClass S M := smulZeroClassLeft f hf hsmul
c : R
x y : M
⊢ f c • (x + y) = f c • x + f c • y
[PROOFSTEP]
simp only [hsmul, smul_add]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : AddGroup A
inst✝ : DistribMulAction M A
r : M
x : A
⊢ r • -x + r • x = 0
[PROOFSTEP]
rw [← smul_add, neg_add_self, smul_zero]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝² : Monoid M
inst✝¹ : AddGroup A
inst✝ : DistribMulAction M A
r : M
x y : A
⊢ r • (x - y) = r • x - r • y
[PROOFSTEP]
rw [sub_eq_add_neg, sub_eq_add_neg, smul_add, smul_neg]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : B →* A
hf : Injective ↑f
smul : ∀ (c : M) (x : B), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Injective.mulAction (↑f) hf smul
c : M
x y : B
⊢ ↑f (c • (x * y)) = ↑f (c • x * c • y)
[PROOFSTEP]
simp only [smul, f.map_mul, smul_mul']
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : B →* A
hf : Injective ↑f
smul : ∀ (c : M) (x : B), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Injective.mulAction (↑f) hf smul
c : M
⊢ ↑f (c • 1) = ↑f 1
[PROOFSTEP]
simp only [smul, f.map_one, smul_one]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : A →* B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Surjective.mulAction (↑f) hf smul
c : M
x y : B
⊢ c • (x * y) = c • x * c • y
[PROOFSTEP]
rcases hf x with ⟨x, rfl⟩
[GOAL]
case intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : A →* B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Surjective.mulAction (↑f) hf smul
c : M
y : B
x : A
⊢ c • (↑f x * y) = c • ↑f x * c • y
[PROOFSTEP]
rcases hf y with ⟨y, rfl⟩
[GOAL]
case intro.intro
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : A →* B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Surjective.mulAction (↑f) hf smul
c : M
x y : A
⊢ c • (↑f x * ↑f y) = c • ↑f x * c • ↑f y
[PROOFSTEP]
simp only [smul_mul', ← smul, ← f.map_mul]
[GOAL]
M : Type u_1
N : Type u_2
G : Type u_3
A : Type u_4
B : Type u_5
α : Type u_6
β : Type u_7
γ : Type u_8
δ : Type u_9
inst✝⁴ : Monoid M
inst✝³ : Monoid A
inst✝² : MulDistribMulAction M A
inst✝¹ : Monoid B
inst✝ : SMul M B
f : A →* B
hf : Surjective ↑f
smul : ∀ (c : M) (x : A), ↑f (c • x) = c • ↑f x
src✝ : MulAction M B := Surjective.mulAction (↑f) hf smul
c : M
⊢ c • 1 = 1
[PROOFSTEP]
rw [← f.map_one, ← smul, smul_one]