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

tactic: refine Finset.induction_on s ?_ ?_
state_before: α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ (∑ i ∈ s, g i).support = s.biUnion fun i => (g i).support
state_after: case refine_1
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ (∑ i ∈ ∅, g i).support = ∅.biUnion fun i => (g i).support

case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
        (∑ i ∈ insert a s, g i).support = (insert a s).biUnion fun i => (g i).support

tactic: simp
state_before: case refine_1
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
inst✝¹ : DecidableEq α
inst✝ : AddCommMonoid M
g : ι → α →₀ M
s : Finset ι
h : ∀ (i₁ i₂ : ι), i₁ ≠ i₂ → Disjoint (g i₁).support (g i₂).support
⊢ (∑ i ∈ ∅, g i).support = ∅.biUnion fun i => (g i).support
state_after: no goals

tactic: intro i s hi
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
        (∑ i ∈ insert a s, g i).support = (insert a s).biUnion fun i => (g i).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
    (∑ i ∈ insert i s, g i).support = (insert i s).biUnion fun i => (g i).support

tactic: simp only [hi, sum_insert, not_false_iff, biUnion_insert]
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
    (∑ i ∈ insert i s, g i).support = (insert i s).biUnion fun i => (g i).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
    (g i + ∑ i ∈ s, g i).support = (g i).support ∪ s.biUnion fun i => (g i).support

tactic: intro hs
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support) →
    (g i + ∑ i ∈ s, g i).support = (g i).support ∪ s.biUnion fun i => (g i).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ (g i + ∑ i ∈ s, g i).support = (g i).support ∪ s.biUnion fun i => (g i).support

tactic: rw [Finsupp.support_add_eq, hs]
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ (g i + ∑ i ∈ s, g i).support = (g i).support ∪ s.biUnion fun i => (g i).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ Disjoint (g i).support (∑ i ∈ s, g i).support

tactic: rw [hs, Finset.disjoint_biUnion_right]
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ Disjoint (g i).support (∑ i ∈ s, g i).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ ∀ i_1 ∈ s, Disjoint (g i).support (g i_1).support

tactic: intro j hj
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
⊢ ∀ i_1 ∈ s, Disjoint (g i).support (g i_1).support
state_after: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
j : ι
hj : j ∈ s
⊢ Disjoint (g i).support (g j).support

tactic: exact h _ _ (ne_of_mem_of_not_mem hj hi).symm
state_before: case refine_2
α✝ : Type u_1
ι✝ : Type u_2
γ : Type u_3
A : Type u_4
B : Type u_5
C : Type u_6
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_7
M✝ : Type u_8
M' : Type u_9
N : Type u_10
P : Type u_11
G : Type u_12
H : Type u_13
R : Type u_14
S : Type u_15
α : Type u_16
ι : Type u_17
M : Type u_18
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 ∈ s, g i).support = s.biUnion fun i => (g i).support
j : ι
hj : j ∈ s
⊢ Disjoint (g i).support (g j).support
state_after: no goals