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

tactic: refine Finset.induction_on s ?_ ?_
state_before: α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ (∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support

tactic: simp
state_before: case refine_1
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ (∑ i in ∅, g i).support = Finset.biUnion ∅ fun i => (g i).support

tactic: intro i s hi
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    ¬a ∈ s →
      ((∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support) →
        (∑ i in insert a s, g i).support = Finset.biUnion (insert a s) fun i => (g i).support

tactic: simp only [hi, sum_insert, not_false_iff, biUnion_insert]
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
⊢ ((∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support) →
    (∑ i in insert i s, g i).support = Finset.biUnion (insert i s) fun i => (g i).support

tactic: intro hs
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
⊢ ((∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support) →
    (g i + ∑ i in s, g i).support = (g i).support ∪ Finset.biUnion s fun i => (g i).support

tactic: rw [Finsupp.support_add_eq, hs]
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
hs : (∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support
⊢ (g i + ∑ i in s, g i).support = (g i).support ∪ Finset.biUnion s fun i => (g i).support

tactic: rw [hs, Finset.disjoint_biUnion_right]
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
hs : (∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support
⊢ Disjoint (g i).support (∑ i in s, g i).support

tactic: intro j hj
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
hs : (∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support
⊢ ∀ (i_1 : ι), i_1 ∈ s → Disjoint (g i).support (g i_1).support

tactic: refine' h _ _ (ne_of_mem_of_not_mem hj hi).symm
state_before: case refine_2
α✝ : Type ?u.566677
ι✝ : Type ?u.566680
γ : Type ?u.566683
A : Type ?u.566686
B : Type ?u.566689
C : Type ?u.566692
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.569822
M✝ : Type ?u.569825
M' : Type ?u.569828
N : Type ?u.569831
P : Type ?u.569834
G : Type ?u.569837
H : Type ?u.569840
R : Type ?u.569843
S : Type ?u.569846
α : Type u_1
ι : Type u_2
M : Type u_3
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s✝ : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
i : ι
s : Finset ι
hi : ¬i ∈ s
hs : (∑ i in s, g i).support = Finset.biUnion s fun i => (g i).support
j : ι
hj : j ∈ s
⊢ Disjoint (g i).support (g j).support