Theorem: Sym.multinomial_coe_fill_of_not_mem
File: Mathlib/Data/Nat/Choose/Multinomial.lean

tactic: rw [Multiset.multinomial_filter_ne x]
state_before: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ s
⊢ (↑(fill x m s)).multinomial = n.choose ↑m * (↑s).multinomial
state_after: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) *
      (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial =
    n.choose ↑m * (↑s).multinomial

tactic: rw [← mem_coe] at hx
state_before: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) *
      (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial =
    n.choose ↑m * (↑s).multinomial
state_after: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) *
      (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial =
    n.choose ↑m * (↑s).multinomial

tactic: refine congrArg₂ _ ?_ ?_
state_before: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) *
      (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial =
    n.choose ↑m * (↑s).multinomial
state_after: case refine_1
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) = n.choose ↑m

case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial = (↑s).multinomial

tactic: rw [card_coe, count_coe_fill_self_of_not_mem hx]
state_before: case refine_1
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.card ↑(fill x m s)).choose (Multiset.count x ↑(fill x m s)) = n.choose ↑m
state_after: no goals

tactic: refine congrArg _ ?_
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ (Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s)).multinomial = (↑s).multinomial
state_after: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s) = ↑s

tactic: rw [coe_fill, coe_replicate, Multiset.filter_add]
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) ↑(fill x m s) = ↑s
state_after: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) ↑s + Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = ↑s

tactic: rw [Multiset.filter_eq_self.mpr]
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) ↑s + Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = ↑s
state_after: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ↑s + Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = ↑s

case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ∀ a ∈ ↑s, x ≠ a

tactic: rw [add_right_eq_self]
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ↑s + Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = ↑s
state_after: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = 0

tactic: rw [Multiset.filter_eq_nil]
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ Multiset.filter (fun x_1 => x ≠ x_1) (Multiset.replicate (↑m) x) = 0
state_after: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ∀ a ∈ Multiset.replicate (↑m) x, ¬x ≠ a

tactic: exact fun j hj ↦ by simp [Multiset.mem_replicate.mp hj]
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ∀ a ∈ Multiset.replicate (↑m) x, ¬x ≠ a
state_after: no goals

tactic: simp [Multiset.mem_replicate.mp hj]
state_before: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
j : α
hj : j ∈ Multiset.replicate (↑m) x
⊢ ¬x ≠ j
state_after: no goals

tactic: exact fun j hj h ↦ hx <| by simpa [h] using hj
state_before: case refine_2
n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
⊢ ∀ a ∈ ↑s, x ≠ a
state_after: no goals

tactic: simpa [h] using hj
state_before: n : ℕ
α : Type u_1
inst✝ : DecidableEq α
m : Fin (n + 1)
s : Sym α (n - ↑m)
x : α
hx : x ∉ ↑s
j : α
hj : j ∈ ↑s
h : x = j
⊢ x ∈ ↑s
state_after: no goals