(* 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_null :
forall (d : data) (q : queue), ~ In_queue d q -> card d q = 0%Z.