Theorem: Multiset.toEnumFinset_subset_iff
File: Mathlib/Data/Multiset/Fintype.lean

tactic: refine ⟨fun h ↦ ?_, Multiset.toEnumFinset_mono⟩
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
⊢ m₁.toEnumFinset ⊆ m₂.toEnumFinset ↔ m₁ ≤ m₂
state_after: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
⊢ m₁ ≤ m₂

tactic: rw [Multiset.le_iff_count]
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
⊢ m₁ ≤ m₂
state_after: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
⊢ ∀ (a : α), count a m₁ ≤ count a m₂

tactic: intro x
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
⊢ ∀ (a : α), count a m₁ ≤ count a m₂
state_after: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
⊢ count x m₁ ≤ count x m₂

tactic: by_cases hx : x ∈ m₁
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
⊢ count x m₁ ≤ count x m₂
state_after: case pos
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ count x m₁ ≤ count x m₂

case neg
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∉ m₁
⊢ count x m₁ ≤ count x m₂

tactic: apply Nat.le_of_pred_lt
state_before: case pos
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ count x m₁ ≤ count x m₂
state_after: case pos.a
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ (count x m₁).pred < count x m₂

tactic: have : (x, m₁.count x - 1) ∈ m₁.toEnumFinset := by
  rw [Multiset.mem_toEnumFinset]
  exact Nat.pred_lt (ne_of_gt (Multiset.count_pos.mpr hx))
state_before: case pos.a
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ (count x m₁).pred < count x m₂
state_after: case pos.a
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
this : (x, count x m₁ - 1) ∈ m₁.toEnumFinset
⊢ (count x m₁).pred < count x m₂

tactic: simpa only [Multiset.mem_toEnumFinset] using h this
state_before: case pos.a
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
this : (x, count x m₁ - 1) ∈ m₁.toEnumFinset
⊢ (count x m₁).pred < count x m₂
state_after: no goals

tactic: rw [Multiset.mem_toEnumFinset]
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ (x, count x m₁ - 1) ∈ m₁.toEnumFinset
state_after: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ (x, count x m₁ - 1).2 < count (x, count x m₁ - 1).1 m₁

tactic: exact Nat.pred_lt (ne_of_gt (Multiset.count_pos.mpr hx))
state_before: α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∈ m₁
⊢ (x, count x m₁ - 1).2 < count (x, count x m₁ - 1).1 m₁
state_after: no goals

tactic: simp [hx]
state_before: case neg
α : Type u_1
inst✝ : DecidableEq α
m m₁ m₂ : Multiset α
h : m₁.toEnumFinset ⊆ m₂.toEnumFinset
x : α
hx : x ∉ m₁
⊢ count x m₁ ≤ count x m₂
state_after: no goals