Theorem: PiTensorProduct.lifts_smul
File: Mathlib/LinearAlgebra/PiTensorProduct.lean

Proof steps:
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : p ∈ x.lifts
a : R
⊢ List.map (fun y => (a * y.1, y.2)) p ∈ (a • x).lifts
state_after: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) (List.map (fun y => (a * y.1, y.2)) p)).sum = a • x
tactic: rw [mem_lifts_iff] at h ⊢
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) (List.map (fun y => (a * y.1, y.2)) p)).sum = a • x
state_after: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ (List.map ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) p).sum =
    (List.map ((fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum
tactic: rw [← List.comp_map, ← h, List.smul_sum, ← List.comp_map]
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ (List.map ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) p).sum =
    (List.map ((fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum
state_after: case e_a.e_f
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) =
    (fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i
tactic: congr 2
state_before: case e_a.e_f
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
⊢ ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) =
    (fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i
state_after: case e_a.e_f.h
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
x✝ : R × ((i : ι) → s i)
⊢ ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) x✝ =
    ((fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) x✝
tactic: ext _
state_before: case e_a.e_f.h
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
x : ⨂[R] (i : ι), s i
p : FreeAddMonoid (R × ((i : ι) → s i))
h : (List.map (fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) p).sum = x
a : R
x✝ : R × ((i : ι) → s i)
⊢ ((fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) ∘ fun y => (a * y.1, y.2)) x✝ =
    ((fun x => a • x) ∘ fun x => x.1 • ⨂ₜ[R] (i : ι), x.2 i) x✝
state_after: no goals
tactic: simp only [comp_apply, smul_smul]