. intro p1 
  exists ⟨ t , []⟩
  simp [*]
case mp
α : Type u_1
q : QueueData α
x : α
xs : List α
h : α
t : List α
p : List.reverse tail = h :: t
⊢ h = x ∧ t = xs → ∃ qt, init ++ List.reverse tail = xs ∧ h = x ∧ { init := t, tail := [] } = qt

case mpr
α : Type u_1
q : QueueData α
x : α
xs : List α
h : α
t : List α
p : List.reverse tail = h :: t
⊢ (∃ qt, init ++ List.reverse tail = xs ∧ h = x ∧ { init := t, tail := [] } = qt) → h = x ∧ t = xs
case mpr
α : Type u_1
q : QueueData α
x : α
xs : List α
h : α
t : List α
p : List.reverse tail = h :: t
⊢ (∃ qt, init ++ List.reverse tail = xs ∧ h = x ∧ { init := t, tail := [] } = qt) → h = x ∧ t = xs