[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b a : α
s : Sym α n
⊢ ↑Multiset.card (a ::ₘ ↑s) = Nat.succ n
[PROOFSTEP]
rw [Multiset.card_cons, s.2]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
v : Vector α n
⊢ ofVector (a ::ᵥ v) = a ::ₛ ofVector v
[PROOFSTEP]
cases v
[GOAL]
case mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
val✝ : List α
property✝ : List.length val✝ = n
⊢ ofVector (a ::ᵥ { val := val✝, property := property✝ }) = a ::ₛ ofVector { val := val✝, property := property✝ }
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
v : Vector α n
⊢ ↑(a ::ₛ ofVector v) = ↑(ofVector (a ::ᵥ v))
[PROOFSTEP]
cases v
[GOAL]
case mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
val✝ : List α
property✝ : List.length val✝ = n
⊢ ↑(a ::ₛ ofVector { val := val✝, property := property✝ }) = ↑(ofVector (a ::ᵥ { val := val✝, property := property✝ }))
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
m : Multiset α
hc : ↑Multiset.card m = n + 1
a : α
h : a ∈ m
⊢ ↑Multiset.card (Multiset.erase m a) = n
[PROOFSTEP]
rw [Multiset.card_erase_of_mem h, hc]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
m : Multiset α
hc : ↑Multiset.card m = n + 1
a : α
h : a ∈ m
⊢ Nat.pred (n + 1) = n
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
x✝ : List α
⊢ List.length x✝ = n ↔ ↑Multiset.card (Quotient.mk (List.isSetoid α) x✝) = n
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
x✝¹ x✝ : { l // List.length l = n }
⊢ Setoid.r x✝¹ x✝ ↔ ↑x✝¹ ≈ ↑x✝
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a✝ b : α✝
α : Type u_3
n : ℕ
a : α
s : Sym α n
⊢ (a :: ↑symEquivSym' s) = ↑symEquivSym' (a ::ₛ s)
[PROOFSTEP]
rcases s with ⟨⟨l⟩, _⟩
[GOAL]
case mk.mk
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s : Sym α✝ n✝
a✝ b : α✝
α : Type u_3
n : ℕ
a : α
val✝ : Multiset α
l : List α
property✝ : ↑Multiset.card (Quot.mk Setoid.r l) = n
⊢ (a :: ↑symEquivSym' { val := Quot.mk Setoid.r l, property := property✝ }) =
    ↑symEquivSym' (a ::ₛ { val := Quot.mk Setoid.r l, property := property✝ })
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
⊢ s = replicate n a ↔ ∀ (b : α), b ∈ s → b = a
[PROOFSTEP]
erw [Subtype.ext_iff, Multiset.eq_replicate]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
⊢ (↑Multiset.card ↑s = n ∧ ∀ (b : α), b ∈ ↑s → b = a) ↔ ∀ (b : α), b ∈ s → b = a
[PROOFSTEP]
exact and_iff_right s.2
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α (Nat.succ n)
⊢ ∃ a s', s = a ::ₛ s'
[PROOFSTEP]
obtain ⟨a, ha⟩ := exists_mem s
[GOAL]
case intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b : α
s : Sym α (Nat.succ n)
a : α
ha : a ∈ s
⊢ ∃ a s', s = a ::ₛ s'
[PROOFSTEP]
classical exact ⟨a, s.erase a ha, (cons_erase ha).symm⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b : α
s : Sym α (Nat.succ n)
a : α
ha : a ∈ s
⊢ ∃ a s', s = a ::ₛ s'
[PROOFSTEP]
exact ⟨a, s.erase a ha, (cons_erase ha).symm⟩
[GOAL]
α : Type u_1
β : Type u_2
n✝ n' m : ℕ
s : Sym α n✝
a b : α
inst✝ : Subsingleton α
n : ℕ
⊢ ∀ (a b : Sym α n), a = b
[PROOFSTEP]
cases n
[GOAL]
case zero
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
inst✝ : Subsingleton α
⊢ ∀ (a b : Sym α Nat.zero), a = b
[PROOFSTEP]
simp
[GOAL]
case succ
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
inst✝ : Subsingleton α
n✝ : ℕ
⊢ ∀ (a b : Sym α (Nat.succ n✝)), a = b
[PROOFSTEP]
intro s s'
[GOAL]
case succ
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
inst✝ : Subsingleton α
n✝ : ℕ
s s' : Sym α (Nat.succ n✝)
⊢ s = s'
[PROOFSTEP]
obtain ⟨b, -⟩ := exists_mem s
[GOAL]
case succ.intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b✝ : α
inst✝ : Subsingleton α
n✝ : ℕ
s s' : Sym α (Nat.succ n✝)
b : α
⊢ s = s'
[PROOFSTEP]
rw [eq_replicate_of_subsingleton b s', eq_replicate_of_subsingleton b s]
[GOAL]
α : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α n✝
a b : α
n : ℕ
inst✝ : IsEmpty α
s : Sym α (Nat.succ n)
⊢ False
[PROOFSTEP]
obtain ⟨a, -⟩ := exists_mem s
[GOAL]
case intro
α : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α n✝
a✝ b : α
n : ℕ
inst✝ : IsEmpty α
s : Sym α (Nat.succ n)
a : α
⊢ False
[PROOFSTEP]
exact isEmptyElim a
[GOAL]
α : Type u_1
β : Type u_2
n✝ n' m : ℕ
s : Sym α n✝
a b : α
n : ℕ
f : α → β
x : Sym α n
⊢ ↑Multiset.card (Multiset.map f ↑x) = n
[PROOFSTEP]
simpa [Multiset.card_map] using x.property
[GOAL]
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ map (fun x => x) s = s
[PROOFSTEP]
ext
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ ↑(map (fun x => x) s) = ↑s
[PROOFSTEP]
simp [Sym.map]
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ { val := ↑s, property := (_ : (fun s => ↑Multiset.card s = n) ↑s) } = s
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ map id s = s
[PROOFSTEP]
ext
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ ↑(map id s) = ↑s
[PROOFSTEP]
simp [Sym.map]
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
n : ℕ
s : Sym α n
⊢ { val := ↑s, property := (_ : (fun s => ↑Multiset.card s = n) ↑s) } = s
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β✝ : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
β : Type u_4
γ : Type u_5
n : ℕ
g : β → γ
f : α → β
s : Sym α n
⊢ ↑(map g (map f s)) = ↑(map (g ∘ f) s)
[PROOFSTEP]
dsimp only [Sym.map]
[GOAL]
α✝ : Type u_1
β✝ : Type u_2
n✝ n' m : ℕ
s✝ : Sym α✝ n✝
a b : α✝
α : Type u_3
β : Type u_4
γ : Type u_5
n : ℕ
g : β → γ
f : α → β
s : Sym α n
⊢ Multiset.map g (Multiset.map f ↑s) = Multiset.map (g ∘ f) ↑s
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a b : α
f : α → β
m : Multiset α
hc : ↑Multiset.card m = n
⊢ ↑Multiset.card (Multiset.map f m) = n
[PROOFSTEP]
simp [hc]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
e : α ≃ β
x : Sym α n
⊢ map (↑e.symm) (map (↑e) x) = x
[PROOFSTEP]
rw [map_map, Equiv.symm_comp_self, map_id]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
e : α ≃ β
x : Sym β n
⊢ map (↑e) (map (↑e.symm) x) = x
[PROOFSTEP]
rw [map_map, Equiv.self_comp_symm, map_id]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α n
⊢ ↑Multiset.card (Multiset.attach ↑s) = n
[PROOFSTEP]
conv_rhs => rw [← s.2, ← Multiset.card_attach]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α n
| n
[PROOFSTEP]
rw [← s.2, ← Multiset.card_attach]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α n
| n
[PROOFSTEP]
rw [← s.2, ← Multiset.card_attach]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α n
| n
[PROOFSTEP]
rw [← s.2, ← Multiset.card_attach]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α n
s' : Sym α n'
⊢ ↑Multiset.card (↑s + ↑s') = n + n'
[PROOFSTEP]
rw [map_add, s.2, s'.2]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s s' : Sym α n'
⊢ append s s' = ↑(Sym.cast (_ : n' + n' = n' + n')) (append s' s)
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s s' : Sym α n'
⊢ ↑(append s s') = ↑(↑(Sym.cast (_ : n' + n' = n' + n')) (append s' s))
[PROOFSTEP]
simp [append, add_comm]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b✝ a b : α
i : Fin (n + 1)
s : Sym α (n - ↑i)
⊢ a ∈ fill b i s ↔ ↑i ≠ 0 ∧ a = b ∨ a ∈ s
[PROOFSTEP]
rw [fill, mem_cast, mem_append_iff, or_comm, mem_replicate]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ ↑card ↑m < n + 1
[PROOFSTEP]
rw [m.2, Nat.lt_succ_iff]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ ↑card (filter ((fun x x_1 => x ≠ x_1) a) ↑m) + ↑{ val := count a ↑m, isLt := (_ : count a ↑m < n + 1) } = ↑card ↑m
[PROOFSTEP]
rw [← countp_eq_card_filter, add_comm]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ ↑{ val := count a ↑m, isLt := (_ : count a ↑m < n + 1) } + countp ((fun x x_1 => x ≠ x_1) a) ↑m = ↑card ↑m
[PROOFSTEP]
simp only [eq_comm, Ne.def, count]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ countp (fun x => a = x) ↑m + countp (fun x => ¬a = x) ↑m = ↑card ↑m
[PROOFSTEP]
rw [← card_eq_countp_add_countp _ _]
[GOAL]
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
m₁ m₂ : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ↑m₁.snd = ↑m₂.snd
⊢ ↑m₁.fst = ↑m₂.fst
[PROOFSTEP]
rw [← Nat.sub_sub_self (Nat.le_of_lt_succ m₁.1.is_lt), ← m₁.2.2, val_eq_coe, h, ← val_eq_coe, m₂.2.2,
  Nat.sub_sub_self (Nat.le_of_lt_succ m₂.1.is_lt)]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ ↑(fill a (filterNe a m).fst (filterNe a m).snd) = ↑m
[PROOFSTEP]
rw [coe_fill, filterNe, ← val_eq_coe, Subtype.coe_mk, Fin.val_mk]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ filter ((fun x x_1 => x ≠ x_1) a) ↑m + ↑(replicate (count a ↑m) a) = ↑m
[PROOFSTEP]
ext b
[GOAL]
case a
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : Sym α n
b : α
⊢ count b (filter ((fun x x_1 => x ≠ x_1) a) ↑m + ↑(replicate (count a ↑m) a)) = count b ↑m
[PROOFSTEP]
dsimp
[GOAL]
case a
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : Sym α n
b : α
⊢ count b (filter (fun x => ¬a = x) ↑m + ↑(replicate (count a ↑m) a)) = count b ↑m
[PROOFSTEP]
rw [count_add, count_filter, Sym.coe_replicate, count_replicate]
[GOAL]
case a
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : Sym α n
b : α
⊢ ((if ¬a = b then count b ↑m else 0) + if b = a then count a ↑m else 0) = count b ↑m
[PROOFSTEP]
obtain rfl | h := eq_or_ne a b
[GOAL]
case a.inl
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : Sym α n
⊢ ((if ¬a = a then count a ↑m else 0) + if a = a then count a ↑m else 0) = count a ↑m
[PROOFSTEP]
rw [if_pos rfl, if_neg (not_not.2 rfl), zero_add]
[GOAL]
case a.inr
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : Sym α n
b : α
h : a ≠ b
⊢ ((if ¬a = b then count b ↑m else 0) + if b = a then count a ↑m else 0) = count b ↑m
[PROOFSTEP]
rw [if_pos h, if_neg h.symm, add_zero]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
⊢ ↑(filterNe a (fill a m.fst m.snd)).snd = ↑m.snd
[PROOFSTEP]
rw [filterNe, ← val_eq_coe, Subtype.coe_mk, val_eq_coe, coe_fill]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
⊢ filter ((fun x x_1 => x ≠ x_1) a) (↑m.snd + ↑(replicate (↑m.fst) a)) = ↑m.snd
[PROOFSTEP]
rw [filter_add, filter_eq_self.2, add_right_eq_self, eq_zero_iff_forall_not_mem]
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
⊢ ∀ (a_1 : α), ¬a_1 ∈ filter ((fun x x_1 => x ≠ x_1) a) ↑(replicate (↑m.fst) a)
[PROOFSTEP]
intro b hb
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
b : α
hb : b ∈ filter ((fun x x_1 => x ≠ x_1) a) ↑(replicate (↑m.fst) a)
⊢ False
[PROOFSTEP]
rw [mem_filter, Sym.mem_coe, mem_replicate] at hb 
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b✝ : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
b : α
hb : (↑m.fst ≠ 0 ∧ b = a) ∧ (fun x x_1 => x ≠ x_1) a b
⊢ False
[PROOFSTEP]
exact hb.2 hb.1.2.symm
[GOAL]
α : Type u_1
β : Type u_2
n n' m✝ : ℕ
s : Sym α n
a✝ b : α
inst✝ : DecidableEq α
a : α
m : (i : Fin (n + 1)) × Sym α (n - ↑i)
h : ¬a ∈ m.snd
⊢ ∀ (a_1 : α), a_1 ∈ ↑m.snd → (fun x x_1 => x ≠ x_1) a a_1
[PROOFSTEP]
exact fun a ha ha' => h <| ha'.symm ▸ ha
[GOAL]
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) (Nat.succ n)
⊢ decode (encode s) = s
[PROOFSTEP]
by_cases h : none ∈ s
[GOAL]
case pos
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) (Nat.succ n)
h : none ∈ s
⊢ decode (encode s) = s
[PROOFSTEP]
simp [h]
[GOAL]
case neg
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) (Nat.succ n)
h : ¬none ∈ s
⊢ decode (encode s) = s
[PROOFSTEP]
simp only [decode, h, not_false_iff, encode_of_not_none_mem, Embedding.some_apply, map_map, comp_apply, Option.some_get]
[GOAL]
case neg
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) (Nat.succ n)
h : ¬none ∈ s
⊢ map (fun x => ↑x) (attach s) = s
[PROOFSTEP]
convert s.attach_map_coe
[GOAL]
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) n ⊕ Sym α (Nat.succ n)
⊢ encode (decode s) = s
[PROOFSTEP]
obtain s | s := s
[GOAL]
case inl
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym (Option α) n
⊢ encode (decode (Sum.inl s)) = Sum.inl s
[PROOFSTEP]
simp
[GOAL]
case inr
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
⊢ encode (decode (Sum.inr s)) = Sum.inr s
[PROOFSTEP]
unfold SymOptionSuccEquiv.encode
[GOAL]
case inr
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
⊢ (if h : none ∈ decode (Sum.inr s) then Sum.inl (erase (decode (Sum.inr s)) none h)
    else Sum.inr (map (fun o => Option.get ↑o (_ : Option.isSome ↑o = true)) (attach (decode (Sum.inr s))))) =
    Sum.inr s
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : none ∈ decode (Sum.inr s)
⊢ False
[PROOFSTEP]
obtain ⟨a, _, ha⟩ := Multiset.mem_map.mp h
[GOAL]
case pos.intro.intro
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : none ∈ decode (Sum.inr s)
a : α
left✝ : a ∈ ↑s
ha : ↑Embedding.some a = none
⊢ False
[PROOFSTEP]
exact Option.some_ne_none _ ha
[GOAL]
case neg
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ Sum.inr (map (fun o => Option.get ↑o (_ : Option.isSome ↑o = true)) (attach (decode (Sum.inr s)))) = Sum.inr s
[PROOFSTEP]
refine' congr_arg Sum.inr _
[GOAL]
case neg
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ map (fun o => Option.get ↑o (_ : Option.isSome ↑o = true)) (attach (decode (Sum.inr s))) = s
[PROOFSTEP]
refine' map_injective (Option.some_injective _) _ _
[GOAL]
case neg
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ map some (map (fun o => Option.get ↑o (_ : Option.isSome ↑o = true)) (attach (decode (Sum.inr s)))) = map some s
[PROOFSTEP]
refine' Eq.trans _ (Eq.trans (SymOptionSuccEquiv.decode (Sum.inr s)).attach_map_coe _)
[GOAL]
case neg.refine'_1
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ map some (map (fun o => Option.get ↑o (_ : Option.isSome ↑o = true)) (attach (decode (Sum.inr s)))) =
    map Subtype.val (attach (decode (Sum.inr s)))
case neg.refine'_2
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ decode (Sum.inr s) = map some s
[PROOFSTEP]
simp
[GOAL]
case neg.refine'_2
α : Type u_1
n : ℕ
inst✝ : DecidableEq α
s : Sym α (Nat.succ n)
h : ¬none ∈ decode (Sum.inr s)
⊢ decode (Sum.inr s) = map some s
[PROOFSTEP]
simp
