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

tactic: use ∑ a ∈ s.toFinset, (s.count a / k) • {a}
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ ∃ u, s = k • u
state_after: case h
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ s = k • ∑ a ∈ s.toFinset, (count a s / k) • {a}

tactic: have h₂ :
  (∑ x ∈ s.toFinset, k • (count x s / k) • ({x} : Multiset α)) =
    ∑ x ∈ s.toFinset, count x s • {x} := by
  apply Finset.sum_congr rfl
  intro x hx
  rw [← mul_nsmul', Nat.mul_div_cancel' (h x (mem_toFinset.mp hx))]
state_before: case h
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ s = k • ∑ a ∈ s.toFinset, (count a s / k) • {a}
state_after: case h
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
h₂ : ∑ x ∈ s.toFinset, k • (count x s / k) • {x} = ∑ x ∈ s.toFinset, count x s • {x}
⊢ s = k • ∑ a ∈ s.toFinset, (count a s / k) • {a}

tactic: rw [← Finset.sum_nsmul, h₂, toFinset_sum_count_nsmul_eq]
state_before: case h
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
h₂ : ∑ x ∈ s.toFinset, k • (count x s / k) • {x} = ∑ x ∈ s.toFinset, count x s • {x}
⊢ s = k • ∑ a ∈ s.toFinset, (count a s / k) • {a}
state_after: no goals

tactic: apply Finset.sum_congr rfl
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ ∑ x ∈ s.toFinset, k • (count x s / k) • {x} = ∑ x ∈ s.toFinset, count x s • {x}
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ ∀ x ∈ s.toFinset, k • (count x s / k) • {x} = count x s • {x}

tactic: intro x hx
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
⊢ ∀ x ∈ s.toFinset, k • (count x s / k) • {x} = count x s • {x}
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
x : α
hx : x ∈ s.toFinset
⊢ k • (count x s / k) • {x} = count x s • {x}

tactic: rw [← mul_nsmul', Nat.mul_div_cancel' (h x (mem_toFinset.mp hx))]
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : DecidableEq α
s : Multiset α
k : ℕ
h : ∀ a ∈ s, k ∣ count a s
x : α
hx : x ∈ s.toFinset
⊢ k • (count x s / k) • {x} = count x s • {x}
state_after: no goals