Theorem: Multiset.toFinset_eq_singleton_iff
File: Mathlib/Data/Finset/Basic.lean

tactic: refine ⟨fun H ↦ ⟨fun h ↦ ?_, ext' fun x ↦ ?_⟩, fun H ↦ ?_⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
⊢ s.toFinset = {a} ↔ card s ≠ 0 ∧ s = card s • {a}
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
h : card s = 0
⊢ False

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
⊢ count x s = count x (card s • {a})

case refine_3
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : card s ≠ 0 ∧ s = card s • {a}
⊢ s.toFinset = {a}

tactic: simpa only [toFinset_nsmul _ _ H.1, toFinset_singleton] using congr($(H.2).toFinset)
state_before: case refine_3
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : card s ≠ 0 ∧ s = card s • {a}
⊢ s.toFinset = {a}
state_after: no goals

tactic: rw [card_eq_zero.1 h, toFinset_zero] at H
state_before: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
h : card s = 0
⊢ False
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : ∅ = {a}
h : card s = 0
⊢ False

tactic: exact Finset.singleton_ne_empty _ H.symm
state_before: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : ∅ = {a}
h : card s = 0
⊢ False
state_after: no goals

tactic: rw [count_nsmul, count_singleton]
state_before: case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
⊢ count x s = count x (card s • {a})
state_after: case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
⊢ count x s = card s * if x = a then 1 else 0

tactic: by_cases hx : x = a
state_before: case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
⊢ count x s = card s * if x = a then 1 else 0
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
⊢ count x s = card s * if x = a then 1 else 0

case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : ¬x = a
⊢ count x s = card s * if x = a then 1 else 0

tactic: have hx' : x ∉ s := fun h' ↦ hx <| by rwa [← mem_toFinset, H, Finset.mem_singleton] at h'
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : ¬x = a
⊢ count x s = card s * if x = a then 1 else 0
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : ¬x = a
hx' : x ∉ s
⊢ count x s = card s * if x = a then 1 else 0

tactic: simp_rw [count_eq_zero_of_not_mem hx', hx, ite_false, Nat.mul_zero]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : ¬x = a
hx' : x ∉ s
⊢ count x s = card s * if x = a then 1 else 0
state_after: no goals

tactic: simp_rw [hx, ite_true, mul_one, count_eq_card]
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
⊢ count x s = card s * if x = a then 1 else 0
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
⊢ ∀ x ∈ s, a = x

tactic: intro y hy
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
⊢ ∀ x ∈ s, a = x
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
y : α
hy : y ∈ s
⊢ a = y

tactic: rw [← mem_toFinset, H, Finset.mem_singleton] at hy
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
y : α
hy : y ∈ s
⊢ a = y
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
y : α
hy : y = a
⊢ a = y

tactic: exact hy.symm
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : x = a
y : α
hy : y = a
⊢ a = y
state_after: no goals

tactic: rwa [← mem_toFinset, H, Finset.mem_singleton] at h'
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t s : Multiset α
a : α
H : s.toFinset = {a}
x : α
hx : ¬x = a
h' : x ∈ s
⊢ x = a
state_after: no goals