Theorem: Sym.oneEquiv_apply
File: Mathlib/Data/Sym/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
⊢ Multiset.card {a} = 1
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α 1
l l' : { x // x.length = 1 }
⊢ Setoid.r l l' ↔ Setoid.r ↑l ↑l'
state_after: no goals
tactic: rfl
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α 1
l : { x // x.length = 1 }
⊢ 0 < (↑l).length
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a b : α
s : Sym α 1
x✝¹ x✝ : { x // x.length = 1 }
val✝¹ : List α
property✝ : val✝¹.length = 1
val✝ : List α
h : val✝.length = 1
perm : ⟨val✝¹, property✝⟩ ≈ ⟨val✝, h⟩
⊢ (fun l => (↑l).head ⋯) ⟨val✝¹, property✝⟩ = (fun l => (↑l).head ⋯) ⟨val✝, h⟩
state_after: case intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b : α
s : Sym α 1
x✝¹ x✝ : { x // x.length = 1 }
val✝ : List α
property✝ : val✝.length = 1
a : α
h : [a].length = 1
perm : ⟨val✝, property✝⟩ ≈ ⟨[a], h⟩
⊢ (fun l => (↑l).head ⋯) ⟨val✝, property✝⟩ = (fun l => (↑l).head ⋯) ⟨[a], h⟩
tactic: obtain ⟨a, rfl⟩ := List.length_eq_one.mp h
state_before: case intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s✝ : Sym α n
a✝ b : α
s : Sym α 1
x✝¹ x✝ : { x // x.length = 1 }
val✝ : List α
property✝ : val✝.length = 1
a : α
h : [a].length = 1
perm : ⟨val✝, property✝⟩ ≈ ⟨[a], h⟩
⊢ (fun l => (↑l).head ⋯) ⟨val✝, property✝⟩ = (fun l => (↑l).head ⋯) ⟨[a], h⟩
state_after: no goals
tactic: exact List.eq_of_mem_singleton (perm.mem_iff.mp <| List.head_mem _)
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
⊢ (fun s =>
        ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯)
              s).liftOn
          (fun l => (↑l).head ⋯) ⋯)
      ((fun a => ⟨{a}, ⋯⟩) a) =
    a
state_after: no goals
tactic: rfl
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
⊢ Function.RightInverse
    (fun s =>
      ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯) s).liftOn
        (fun l => (↑l).head ⋯) ⋯)
    fun a => ⟨{a}, ⋯⟩
state_after: case mk.mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
val✝ : Multiset α
l : List α
h : Multiset.card (Quot.mk Setoid.r l) = 1
⊢ (fun a => ⟨{a}, ⋯⟩)
      ((fun s =>
          ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯)
                s).liftOn
            (fun l => (↑l).head ⋯) ⋯)
        ⟨Quot.mk Setoid.r l, h⟩) =
    ⟨Quot.mk Setoid.r l, h⟩
tactic: rintro ⟨⟨l⟩, h⟩
state_before: case mk.mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a b : α
val✝ : Multiset α
l : List α
h : Multiset.card (Quot.mk Setoid.r l) = 1
⊢ (fun a => ⟨{a}, ⋯⟩)
      ((fun s =>
          ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯)
                s).liftOn
            (fun l => (↑l).head ⋯) ⋯)
        ⟨Quot.mk Setoid.r l, h⟩) =
    ⟨Quot.mk Setoid.r l, h⟩
state_after: case mk.mk.intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b : α
val✝ : Multiset α
a : α
h : Multiset.card (Quot.mk Setoid.r [a]) = 1
⊢ (fun a => ⟨{a}, ⋯⟩)
      ((fun s =>
          ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯)
                s).liftOn
            (fun l => (↑l).head ⋯) ⋯)
        ⟨Quot.mk Setoid.r [a], h⟩) =
    ⟨Quot.mk Setoid.r [a], h⟩
tactic: obtain ⟨a, rfl⟩ := List.length_eq_one.mp h
state_before: case mk.mk.intro
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b : α
val✝ : Multiset α
a : α
h : Multiset.card (Quot.mk Setoid.r [a]) = 1
⊢ (fun a => ⟨{a}, ⋯⟩)
      ((fun s =>
          ((Equiv.subtypeQuotientEquivQuotientSubtype (fun x => x.length = 1) (fun x => Multiset.card x = 1) ⋯ ⋯)
                s).liftOn
            (fun l => (↑l).head ⋯) ⋯)
        ⟨Quot.mk Setoid.r [a], h⟩) =
    ⟨Quot.mk Setoid.r [a], h⟩
state_after: no goals
tactic: rfl