End DEF_FIFO.
Section BELONG.
(* quelques lemmes sur des considerations plus dynamiques, l'existence d'un element dans la liste apres ajout ou retrait d'un element *)
Variable data : Set.

(* Specifications: *)
Lemma first_in :
forall (d : data) (q : queue data),
first data q = value data d -> In_queue data d q.
Lemma in_q_input :
forall (d' d : data) (q : queue data),
d <> d' -> In_queue data d (input data d' q) -> In_queue data d q.
Lemma not_in_q_input :
forall (data : Set) (d' d : data) (q : queue data),
d <> d' -> ~ In_queue data d (input data d' q) -> ~ In_queue data d q.
Lemma in_q_output :
forall (d : data) (q : queue data),
In_queue data d (first_out data q) -> In_queue data d q.
Lemma not_in_q_output :
forall (data : Set) (d : data) (q : queue data),
~ In_queue data d q -> ~ In_queue data d (first_out data q).