Section APPEND.
Variable data : Set.
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 append_assoc :
forall q1 q2 q3 : queue data,
append q1 (append q2 q3) = append (append q1 q2) q3.