Theorem: LinearMap.lsum_symm_apply
File: Mathlib/LinearAlgebra/Pi.lean

Proof steps:
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f g : (i : ι) → φ i →ₗ[R] M
⊢ (fun f => ∑ i : ι, f i ∘ₗ proj i) (f + g) = (fun f => ∑ i : ι, f i ∘ₗ proj i) f + (fun f => ∑ i : ι, f i ∘ₗ proj i) g
state_after: no goals
tactic: simp only [Pi.add_apply, add_comp, Finset.sum_add_distrib]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
c : S
f : (i : ι) → φ i →ₗ[R] M
⊢ { toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯ }.toFun (c • f) =
    (RingHom.id S) c • { toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯ }.toFun f
state_after: no goals
tactic: simp only [Pi.smul_apply, smul_comp, Finset.smul_sum, RingHom.id_apply]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : (i : ι) → φ i →ₗ[R] M
⊢ (fun f i => f ∘ₗ single i) ({ toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun f) = f
state_after: case h.h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : (i : ι) → φ i →ₗ[R] M
i : ι
x : φ i
⊢ ((fun f i => f ∘ₗ single i) ({ toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun f) i)
      x =
    (f i) x
tactic: ext i x
state_before: case h.h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : (i : ι) → φ i →ₗ[R] M
i : ι
x : φ i
⊢ ((fun f i => f ∘ₗ single i) ({ toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun f) i)
      x =
    (f i) x
state_after: no goals
tactic: simp [apply_single]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : ((i : ι) → φ i) →ₗ[R] M
⊢ { toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun f i => f ∘ₗ single i) f) = f
state_after: case h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : ((i : ι) → φ i) →ₗ[R] M
x : (i : ι) → φ i
⊢ ({ toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun f i => f ∘ₗ single i) f)) x =
    f x
tactic: ext x
state_before: case h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : ((i : ι) → φ i) →ₗ[R] M
x : (i : ι) → φ i
⊢ ({ toFun := fun f => ∑ i : ι, f i ∘ₗ proj i, map_add' := ⋯, map_smul' := ⋯ }.toFun ((fun f i => f ∘ₗ single i) f)) x =
    f x
state_after: case h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : ((i : ι) → φ i) →ₗ[R] M
x : (i : ι) → φ i
⊢ f (∑ j : ι, Pi.single j (x j)) = f x
tactic: suffices f (∑ j, Pi.single j (x j)) = f x by simpa [apply_single]
state_before: case h
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
ι' : Type x'
inst✝¹³ : Semiring R
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R M₃
φ : ι → Type i
inst✝⁸ : (i : ι) → AddCommMonoid (φ i)
inst✝⁷ : (i : ι) → Module R (φ i)
S : Type ?u.32694
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : Fintype ι
inst✝³ : DecidableEq ι
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
f : ((i : ι) → φ i) →ₗ[R] M
x : (i : ι) → φ i
⊢ f (∑ j : ι, Pi.single j (x j)) = f x
state_after: no goals
tactic: rw [Finset.univ_sum_single]