(* lorsque l'egalite est decidable, on peut compter le nombre d'occurence d'un element dans la liste *)
Fixpoint card (d : data) (q : queue) {struct q} : Z :=
match q with
| empty => 0%Z
| input d' q' =>
if eq_data_dec d d'
then (card d q' + 1)%Z
else card d q'
end.

Lemma card_pos : forall (d : data) (q : queue), (card d q >= 0)%Z.