Theorem: Submodule.mul_smul_mul_eq_smul_mul_smul
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: ext
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
⊢ (x * y) • (M * N) = x • M * y • N
state_after: case h
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
⊢ x✝ ∈ (x * y) • (M * N) ↔ x✝ ∈ x • M * y • N

tactic: refine ⟨?_, fun hx ↦ Submodule.mul_induction_on hx ?_ fun _ _ hx hy ↦ Submodule.add_mem _ hx hy⟩
state_before: case h
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
⊢ x✝ ∈ (x * y) • (M * N) ↔ x✝ ∈ x • M * y • N
state_after: case h.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
⊢ x✝ ∈ (x * y) • (M * N) → x✝ ∈ x • M * y • N

case h.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
⊢ ∀ m ∈ x • M, ∀ n ∈ y • N, m * n ∈ (x * y) • (M * N)

tactic: rintro ⟨_, hx, rfl⟩
state_before: case h.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
⊢ x✝ ∈ (x * y) • (M * N) → x✝ ∈ x • M * y • N
state_after: case h.refine_1.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
⊢ (DistribMulAction.toLinearMap R A (x * y)) w✝ ∈ x • M * y • N

tactic: rw [DistribMulAction.toLinearMap_apply]
state_before: case h.refine_1.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
⊢ (DistribMulAction.toLinearMap R A (x * y)) w✝ ∈ x • M * y • N
state_after: case h.refine_1.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
⊢ (x * y) • w✝ ∈ x • M * y • N

tactic: refine Submodule.mul_induction_on hx (fun m hm n hn ↦ ?_) (fun _ _ hn hm ↦ ?_)
state_before: case h.refine_1.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
⊢ (x * y) • w✝ ∈ x • M * y • N
state_after: case h.refine_1.intro.intro.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
m : A
hm : m ∈ M
n : A
hn : n ∈ N
⊢ (x * y) • (m * n) ∈ x • M * y • N

case h.refine_1.intro.intro.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
x✝¹ x✝ : A
hn : (x * y) • x✝¹ ∈ x • M * y • N
hm : (x * y) • x✝ ∈ x • M * y • N
⊢ (x * y) • (x✝¹ + x✝) ∈ x • M * y • N

tactic: rw [← smul_mul_smul x y m n]
state_before: case h.refine_1.intro.intro.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
m : A
hm : m ∈ M
n : A
hn : n ∈ N
⊢ (x * y) • (m * n) ∈ x • M * y • N
state_after: case h.refine_1.intro.intro.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
m : A
hm : m ∈ M
n : A
hn : n ∈ N
⊢ x • m * y • n ∈ x • M * y • N

tactic: exact mul_mem_mul (smul_mem_pointwise_smul m x M hm) (smul_mem_pointwise_smul n y N hn)
state_before: case h.refine_1.intro.intro.refine_1
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
m : A
hm : m ∈ M
n : A
hn : n ∈ N
⊢ x • m * y • n ∈ x • M * y • N
state_after: no goals

tactic: rw [smul_add]
state_before: case h.refine_1.intro.intro.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
x✝¹ x✝ : A
hn : (x * y) • x✝¹ ∈ x • M * y • N
hm : (x * y) • x✝ ∈ x • M * y • N
⊢ (x * y) • (x✝¹ + x✝) ∈ x • M * y • N
state_after: case h.refine_1.intro.intro.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
x✝¹ x✝ : A
hn : (x * y) • x✝¹ ∈ x • M * y • N
hm : (x * y) • x✝ ∈ x • M * y • N
⊢ (x * y) • x✝¹ + (x * y) • x✝ ∈ x • M * y • N

tactic: exact Submodule.add_mem _ hn hm
state_before: case h.refine_1.intro.intro.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
w✝ : A
hx : w✝ ∈ ↑(M * N)
x✝¹ x✝ : A
hn : (x * y) • x✝¹ ∈ x • M * y • N
hm : (x * y) • x✝ ∈ x • M * y • N
⊢ (x * y) • x✝¹ + (x * y) • x✝ ∈ x • M * y • N
state_after: no goals

tactic: rintro _ ⟨m, hm, rfl⟩ _ ⟨n, hn, rfl⟩
state_before: case h.refine_2
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
⊢ ∀ m ∈ x • M, ∀ n ∈ y • N, m * n ∈ (x * y) • (M * N)
state_after: case h.refine_2.intro.intro.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
m : A
hm : m ∈ ↑M
n : A
hn : n ∈ ↑N
⊢ (DistribMulAction.toLinearMap R A x) m * (DistribMulAction.toLinearMap R A y) n ∈ (x * y) • (M * N)

tactic: erw [smul_mul_smul x y m n]
state_before: case h.refine_2.intro.intro.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
m : A
hm : m ∈ ↑M
n : A
hn : n ∈ ↑N
⊢ (DistribMulAction.toLinearMap R A x) m * (DistribMulAction.toLinearMap R A y) n ∈ (x * y) • (M * N)
state_after: case h.refine_2.intro.intro.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
m : A
hm : m ∈ ↑M
n : A
hn : n ∈ ↑N
⊢ (x * y) • (m * n) ∈ (x * y) • (M * N)

tactic: exact smul_mem_pointwise_smul _ _ _ (mul_mem_mul hm hn)
state_before: case h.refine_2.intro.intro.intro.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m✝ n✝ : A
x y : R
x✝ : A
hx : x✝ ∈ x • M * y • N
m : A
hm : m ∈ ↑M
n : A
hn : n ∈ ↑N
⊢ (x * y) • (m * n) ∈ (x * y) • (M * N)
state_after: no goals