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

tactic: have : ∀ b : α × β, single b.fst (single b.snd (f b)) x y = if b = (x, y) then f b else 0 := by
  rintro ⟨b₁, b₂⟩
  simp only [ne_eq, single_apply, Prod.ext_iff, ite_and]
  split_ifs <;> simp [single_apply, *]
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
x : α
y : β
⊢ (f.curry x) y = f (x, y)
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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ (f.curry x) y = f (x, y)

tactic: rw [Finsupp.curry, sum_apply, sum_apply, sum_eq_single, this, if_pos rfl]
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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ (f.curry x) y = f (x, y)
state_after: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ ∀ (b : α × β), f b ≠ 0 → b ≠ (x, y) → ((single b.1 (single b.2 (f b))) x) y = 0

case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ f (x, y) = 0 → ((single (x, y).1 (single (x, y).2 0)) x) y = 0

tactic: rintro ⟨b₁, b₂⟩
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
x : α
y : β
⊢ ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
state_after: case mk
α : 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
x : α
y : β
b₁ : α
b₂ : β
⊢ ((single (b₁, b₂).1 (single (b₁, b₂).2 (f (b₁, b₂)))) x) y = if (b₁, b₂) = (x, y) then f (b₁, b₂) else 0

tactic: simp only [ne_eq, single_apply, Prod.ext_iff, ite_and]
state_before: case mk
α : 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
x : α
y : β
b₁ : α
b₂ : β
⊢ ((single (b₁, b₂).1 (single (b₁, b₂).2 (f (b₁, b₂)))) x) y = if (b₁, b₂) = (x, y) then f (b₁, b₂) else 0
state_after: case mk
α : 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
x : α
y : β
b₁ : α
b₂ : β
⊢ (if b₁ = x then single b₂ (f (b₁, b₂)) else 0) y = if b₁ = x then if b₂ = y then f (b₁, b₂) else 0 else 0

tactic: split_ifs <;> simp [single_apply, *]
state_before: case mk
α : 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
x : α
y : β
b₁ : α
b₂ : β
⊢ (if b₁ = x then single b₂ (f (b₁, b₂)) else 0) y = if b₁ = x then if b₂ = y then f (b₁, b₂) else 0 else 0
state_after: no goals

tactic: intro b _ b_ne
state_before: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ ∀ (b : α × β), f b ≠ 0 → b ≠ (x, y) → ((single b.1 (single b.2 (f b))) x) y = 0
state_after: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
b : α × β
a✝ : f b ≠ 0
b_ne : b ≠ (x, y)
⊢ ((single b.1 (single b.2 (f b))) x) y = 0

tactic: rw [this b, if_neg b_ne]
state_before: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
b : α × β
a✝ : f b ≠ 0
b_ne : b ≠ (x, y)
⊢ ((single b.1 (single b.2 (f b))) x) y = 0
state_after: no goals

tactic: intro _
state_before: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
⊢ f (x, y) = 0 → ((single (x, y).1 (single (x, y).2 0)) x) y = 0
state_after: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
a✝ : f (x, y) = 0
⊢ ((single (x, y).1 (single (x, y).2 0)) x) y = 0

tactic: rw [single_zero, single_zero, coe_zero, Pi.zero_apply, coe_zero, Pi.zero_apply]
state_before: case 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
x : α
y : β
this : ∀ (b : α × β), ((single b.1 (single b.2 (f b))) x) y = if b = (x, y) then f b else 0
a✝ : f (x, y) = 0
⊢ ((single (x, y).1 (single (x, y).2 0)) x) y = 0
state_after: no goals