Theorem: Multiset.finset_sum_eq_sup_iff_disjoint
File: Mathlib/Algebra/Order/BigOperators/Group/Finset.lean

tactic: induction' i using Finset.cons_induction_on with z i hz hr
state_before: ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
i : Finset β
f : β → Multiset α
⊢ i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
state_after: case h₁
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
⊢ ∅.sum f = ∅.sup f ↔ ∀ x ∈ ∅, ∀ y ∈ ∅, x ≠ y → (f x).Disjoint (f y)

case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
⊢ (Finset.cons z i hz).sum f = (Finset.cons z i hz).sup f ↔
    ∀ x ∈ Finset.cons z i hz, ∀ y ∈ Finset.cons z i hz, x ≠ y → (f x).Disjoint (f y)

tactic: simp only [Finset.not_mem_empty, IsEmpty.forall_iff, imp_true_iff, Finset.sum_empty,
  Finset.sup_empty, bot_eq_zero, eq_self_iff_true]
state_before: case h₁
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
⊢ ∅.sum f = ∅.sup f ↔ ∀ x ∈ ∅, ∀ y ∈ ∅, x ≠ y → (f x).Disjoint (f y)
state_after: no goals

tactic: simp_rw [Finset.sum_cons hz, Finset.sup_cons, Finset.mem_cons, Multiset.sup_eq_union,
  forall_eq_or_imp, Ne, not_true_eq_false, IsEmpty.forall_iff, true_and_iff,
  imp_and, forall_and, ← hr, @eq_comm _ z]
state_before: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
⊢ (Finset.cons z i hz).sum f = (Finset.cons z i hz).sup f ↔
    ∀ x ∈ Finset.cons z i hz, ∀ y ∈ Finset.cons z i hz, x ≠ y → (f x).Disjoint (f y)
state_after: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, ¬a = z → (f z).Disjoint (f a)) ∧ (∀ x ∈ i, ¬x = z → (f x).Disjoint (f z)) ∧ i.sum f = i.sup f

tactic: have := fun x (H : x ∈ i) => ne_of_mem_of_not_mem H hz
state_before: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, ¬a = z → (f z).Disjoint (f a)) ∧ (∀ x ∈ i, ¬x = z → (f x).Disjoint (f z)) ∧ i.sum f = i.sup f
state_after: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, ¬a = z → (f z).Disjoint (f a)) ∧ (∀ x ∈ i, ¬x = z → (f x).Disjoint (f z)) ∧ i.sum f = i.sup f

tactic: simp (config := { contextual := true }) only [this, not_false_iff, true_imp_iff]
state_before: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, ¬a = z → (f z).Disjoint (f a)) ∧ (∀ x ∈ i, ¬x = z → (f x).Disjoint (f z)) ∧ i.sum f = i.sup f
state_after: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, (f z).Disjoint (f a)) ∧ (∀ x ∈ i, (f x).Disjoint (f z)) ∧ i.sum f = i.sup f

tactic: simp_rw [← disjoint_finset_sum_left, ← disjoint_finset_sum_right, disjoint_comm, ← and_assoc,
  and_self_iff]
state_before: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔
    (∀ a ∈ i, (f z).Disjoint (f a)) ∧ (∀ x ∈ i, (f x).Disjoint (f z)) ∧ i.sum f = i.sup f
state_after: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔ (f z).Disjoint (i.sum f) ∧ i.sum f = i.sup f

tactic: exact add_eq_union_left_of_le (Finset.sup_le fun x hx => le_sum_of_mem (mem_map_of_mem f hx))
state_before: case h₂
ι : Type u_1
α : Type u_2
β✝ : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : DecidableEq α
β : Type u_9
f : β → Multiset α
z : β
i : Finset β
hz : z ∉ i
hr : i.sum f = i.sup f ↔ ∀ x ∈ i, ∀ y ∈ i, x ≠ y → (f x).Disjoint (f y)
this : ∀ x ∈ i, x ≠ z
⊢ f z + ∑ x ∈ i, f x = f z ∪ i.sup f ↔ (f z).Disjoint (i.sum f) ∧ i.sum f = i.sup f
state_after: no goals