Theorem: Finsupp.prod_add_index_of_disjoint
File: Mathlib/Algebra/BigOperators/Finsupp.lean

tactic: have :
  ∀ {f1 f2 : α →₀ M},
    Disjoint f1.support f2.support → (∏ x in f1.support, g x (f1 x + f2 x)) = f1.prod g :=
  fun hd =>
  Finset.prod_congr rfl fun x hx => by
    simp only [not_mem_support_iff.mp (disjoint_left.mp hd hx), add_zero]
state_before: α : Type u_2
ι : Type ?u.581469
γ : Type ?u.581472
A : Type ?u.581475
B : Type ?u.581478
C : Type ?u.581481
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x : γ
β✝ : Type ?u.584611
M : Type u_1
M' : Type ?u.584617
N : Type ?u.584620
P : Type ?u.584623
G : Type ?u.584626
H : Type ?u.584629
R : Type ?u.584632
S : Type ?u.584635
inst✝¹ : AddCommMonoid M
f1 f2 : α →₀ M
hd : Disjoint f1.support f2.support
β : Type u_3
inst✝ : CommMonoid β
g : α → M → β
⊢ prod (f1 + f2) g = prod f1 g * prod f2 g

tactic: classical simp_rw [← this hd, ← this hd.symm, add_comm (f2 _), Finsupp.prod, support_add_eq hd,
    prod_union hd, add_apply]
state_before: α : Type u_2
ι : Type ?u.581469
γ : Type ?u.581472
A : Type ?u.581475
B : Type ?u.581478
C : Type ?u.581481
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x : γ
β✝ : Type ?u.584611
M : Type u_1
M' : Type ?u.584617
N : Type ?u.584620
P : Type ?u.584623
G : Type ?u.584626
H : Type ?u.584629
R : Type ?u.584632
S : Type ?u.584635
inst✝¹ : AddCommMonoid M
f1 f2 : α →₀ M
hd : Disjoint f1.support f2.support
β : Type u_3
inst✝ : CommMonoid β
g : α → M → β
this : ∀ {f1 f2 : α →₀ M}, Disjoint f1.support f2.support → ∏ x in f1.support, g x (↑f1 x + ↑f2 x) = prod f1 g
⊢ prod (f1 + f2) g = prod f1 g * prod f2 g

tactic: simp only [not_mem_support_iff.mp (disjoint_left.mp hd hx), add_zero]
state_before: α : Type u_2
ι : Type ?u.581469
γ : Type ?u.581472
A : Type ?u.581475
B : Type ?u.581478
C : Type ?u.581481
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x✝ : γ
β✝ : Type ?u.584611
M : Type u_1
M' : Type ?u.584617
N : Type ?u.584620
P : Type ?u.584623
G : Type ?u.584626
H : Type ?u.584629
R : Type ?u.584632
S : Type ?u.584635
inst✝¹ : AddCommMonoid M
f1 f2 : α →₀ M
hd✝ : Disjoint f1.support f2.support
β : Type u_3
inst✝ : CommMonoid β
g : α → M → β
f1✝ f2✝ : α →₀ M
hd : Disjoint f1✝.support f2✝.support
x : α
hx : x ∈ f1✝.support
⊢ g x (↑f1✝ x + ↑f2✝ x) = g x (↑f1✝ x)

tactic: simp_rw [← this hd, ← this hd.symm, add_comm (f2 _), Finsupp.prod, support_add_eq hd,
prod_union hd, add_apply]
state_before: α : Type u_2
ι : Type ?u.581469
γ : Type ?u.581472
A : Type ?u.581475
B : Type ?u.581478
C : Type ?u.581481
inst✝⁴ : AddCommMonoid A
inst✝³ : AddCommMonoid B
inst✝² : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x : γ
β✝ : Type ?u.584611
M : Type u_1
M' : Type ?u.584617
N : Type ?u.584620
P : Type ?u.584623
G : Type ?u.584626
H : Type ?u.584629
R : Type ?u.584632
S : Type ?u.584635
inst✝¹ : AddCommMonoid M
f1 f2 : α →₀ M
hd : Disjoint f1.support f2.support
β : Type u_3
inst✝ : CommMonoid β
g : α → M → β
this : ∀ {f1 f2 : α →₀ M}, Disjoint f1.support f2.support → ∏ x in f1.support, g x (↑f1 x + ↑f2 x) = prod f1 g
⊢ prod (f1 + f2) g = prod f1 g * prod f2 g