Theorem: Finsupp.total_total
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: simp only [total_apply]
state_before: α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ (Finsupp.total α M R A) ((Finsupp.total β (α →₀ R) R B) f) =
    (Finsupp.total β M R fun b => (Finsupp.total α M R A) (B b)) f
state_after: α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ((f.sum fun i a => a • B i).sum fun i a => a • A i) = f.sum fun i a => a • (B i).sum fun i a => a • A i

tactic: apply induction_linear f
state_before: α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ((f.sum fun i a => a • B i).sum fun i a => a • A i) = f.sum fun i a => a • (B i).sum fun i a => a • A i
state_after: case h0
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ((sum 0 fun i a => a • B i).sum fun i a => a • A i) = sum 0 fun i a => a • (B i).sum fun i a => a • A i

case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (f g : β →₀ R),
    (((f.sum fun i a => a • B i).sum fun i a => a • A i) = f.sum fun i a => a • (B i).sum fun i a => a • A i) →
      (((g.sum fun i a => a • B i).sum fun i a => a • A i) = g.sum fun i a => a • (B i).sum fun i a => a • A i) →
        (((f + g).sum fun i a => a • B i).sum fun i a => a • A i) =
          (f + g).sum fun i a => a • (B i).sum fun i a => a • A i

case hsingle
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (a : β) (b : R),
    (((single a b).sum fun i a => a • B i).sum fun i a => a • A i) =
      (single a b).sum fun i a => a • (B i).sum fun i a => a • A i

tactic: simp only [sum_zero_index]
state_before: case h0
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ((sum 0 fun i a => a • B i).sum fun i a => a • A i) = sum 0 fun i a => a • (B i).sum fun i a => a • A i
state_after: no goals

tactic: intro f₁ f₂ h₁ h₂
state_before: case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (f g : β →₀ R),
    (((f.sum fun i a => a • B i).sum fun i a => a • A i) = f.sum fun i a => a • (B i).sum fun i a => a • A i) →
      (((g.sum fun i a => a • B i).sum fun i a => a • A i) = g.sum fun i a => a • (B i).sum fun i a => a • A i) →
        (((f + g).sum fun i a => a • B i).sum fun i a => a • A i) =
          (f + g).sum fun i a => a • (B i).sum fun i a => a • A i
state_after: case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
f₁ f₂ : β →₀ R
h₁ : ((f₁.sum fun i a => a • B i).sum fun i a => a • A i) = f₁.sum fun i a => a • (B i).sum fun i a => a • A i
h₂ : ((f₂.sum fun i a => a • B i).sum fun i a => a • A i) = f₂.sum fun i a => a • (B i).sum fun i a => a • A i
⊢ (((f₁ + f₂).sum fun i a => a • B i).sum fun i a => a • A i) =
    (f₁ + f₂).sum fun i a => a • (B i).sum fun i a => a • A i

tactic: simp [sum_add_index, h₁, h₂, add_smul]
state_before: case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
f₁ f₂ : β →₀ R
h₁ : ((f₁.sum fun i a => a • B i).sum fun i a => a • A i) = f₁.sum fun i a => a • (B i).sum fun i a => a • A i
h₂ : ((f₂.sum fun i a => a • B i).sum fun i a => a • A i) = f₂.sum fun i a => a • (B i).sum fun i a => a • A i
⊢ (((f₁ + f₂).sum fun i a => a • B i).sum fun i a => a • A i) =
    (f₁ + f₂).sum fun i a => a • (B i).sum fun i a => a • A i
state_after: no goals

tactic: simp [sum_single_index, sum_smul_index, smul_sum, mul_smul]
state_before: case hsingle
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (a : β) (b : R),
    (((single a b).sum fun i a => a • B i).sum fun i a => a • A i) =
      (single a b).sum fun i a => a • (B i).sum fun i a => a • A i
state_after: no goals