Theorem: Finsupp.sum_curry_index
File: Mathlib/Data/Finsupp/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ (f.curry.sum fun a f => f.sum (g a)) = f.sum fun p c => g p.1 p.2 c
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ ((f.sum fun p c => single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = f.sum fun p c => g p.1 p.2 c
tactic: rw [Finsupp.curry]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ ((f.sum fun p c => single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = f.sum fun p c => g p.1 p.2 c
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ ((f.sum fun p c => single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = ?m.319618

α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ ?m.319618 = f.sum fun p c => g p.1 p.2 c

α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ N
tactic: trans
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ (f.sum fun a b => (single a.1 (single a.2 b)).sum fun a f => f.sum (g a)) = f.sum fun p c => g p.1 p.2 c
state_after: case e_g
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ (fun a b => (single a.1 (single a.2 b)).sum fun a f => f.sum (g a)) = fun p c => g p.1 p.2 c
tactic: congr
state_before: case e_g
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
⊢ (fun a b => (single a.1 (single a.2 b)).sum fun a f => f.sum (g a)) = fun p c => g p.1 p.2 c
state_after: case e_g.h.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ ((single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = g p.1 p.2 c
tactic: funext p c
state_before: case e_g.h.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ ((single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = g p.1 p.2 c
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ ((single p.1 (single p.2 c)).sum fun a f => f.sum (g a)) = ?m.321015

α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ ?m.321015 = g p.1 p.2 c

α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ N
tactic: trans
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M
inst✝ : AddCommMonoid N
f : α × β →₀ M
g : α → β → M → N
hg₀ : ∀ (a : α) (b : β), g a b 0 = 0
hg₁ : ∀ (a : α) (b : β) (c₀ c₁ : M), g a b (c₀ + c₁) = g a b c₀ + g a b c₁
p : α × β
c : M
⊢ (single p.2 c).sum (g p.1) = g p.1 p.2 c
state_after: no goals
tactic: exact sum_single_index (hg₀ _ _)