Fixpoint append (q : queue data) : queue data -> queue data :=
  fun q2 : queue data =>
  match q with
  | empty => q2
  | input d q' => input data d (append q' q2)
  end.

Lemma case_append_right : forall (E : Set) (x y : E) (q1 q2 : queue data) (d : data), match append q1 (input data d q2) with | empty => x | input _ _ => y end = y.