Theorem: Finsupp.mapDomain_apply'
File: Mathlib/Data/Finsupp/Basic.lean

tactic: rw [mapDomain, sum_apply, sum]
state_before: α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
⊢ ↑(mapDomain f x) (f a) = ↑x a

tactic: simp_rw [single_apply]
state_before: α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
⊢ ∑ a_1 in x.support, ↑(single (f a_1) (↑x a_1)) (f a) = ↑x a

tactic: by_cases hax : a ∈ x.support
state_before: α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
⊢ (∑ x_1 in x.support, if f x_1 = f a then ↑x x_1 else 0) = ↑x a

tactic: rw [← Finset.add_sum_erase _ _ hax, if_pos rfl]
state_before: case pos
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : a ∈ x.support
⊢ (∑ x_1 in x.support, if f x_1 = f a then ↑x x_1 else 0) = ↑x a

tactic: convert add_zero (x a)
state_before: case pos
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : a ∈ x.support
⊢ (↑x a + ∑ x_1 in Finset.erase x.support a, if f x_1 = f a then ↑x x_1 else 0) = ↑x a

tactic: refine' Finset.sum_eq_zero fun i hi => if_neg _
state_before: case h.e'_2.h.e'_6
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : a ∈ x.support
⊢ (∑ x_1 in Finset.erase x.support a, if f x_1 = f a then ↑x x_1 else 0) = 0

tactic: exact (hf.mono hS).ne (Finset.mem_of_mem_erase hi) hax (Finset.ne_of_mem_erase hi)
state_before: case h.e'_2.h.e'_6
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : a ∈ x.support
i : α
hi : i ∈ Finset.erase x.support a
⊢ ¬f i = f a

tactic: rw [not_mem_support_iff.1 hax]
state_before: case neg
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : ¬a ∈ x.support
⊢ (∑ x_1 in x.support, if f x_1 = f a then ↑x x_1 else 0) = ↑x a

tactic: refine' Finset.sum_eq_zero fun i hi => if_neg _
state_before: case neg
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : ¬a ∈ x.support
⊢ (∑ x_1 in x.support, if f x_1 = f a then ↑x x_1 else 0) = 0

tactic: exact hf.ne (hS hi) ha (ne_of_mem_of_not_mem hi hax)
state_before: case neg
α : Type u_1
β : Type u_3
γ : Type ?u.190515
ι : Type ?u.190518
M : Type u_2
M' : Type ?u.190524
N : Type ?u.190527
P : Type ?u.190530
G : Type ?u.190533
H : Type ?u.190536
R : Type ?u.190539
S✝ : Type ?u.190542
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
x : α →₀ M
hS : ↑x.support ⊆ S
hf : Set.InjOn f S
a : α
ha : a ∈ S
hax : ¬a ∈ x.support
i : α
hi : i ∈ x.support
⊢ ¬f i = f a