End APPEND.
Section INQUEUE_APPEND.
Variable data : Set.

(* Specifications: *)
Lemma inqueue_append :
forall (m : data) (q1 q2 : queue data),
In_queue data m q1 \/ In_queue data m q2 ->
In_queue data m (append data q1 q2).
Lemma not_inqueue_append :
forall (m : data) (q1 q2 : queue data),
~ In_queue data m q1 /\ ~ In_queue data m q2 ->
~ In_queue data m (append data q1 q2).
Lemma in_q_shuffle1 :
forall (m1 m2 : data) (q3 q4 : queue data),
In_queue data m2 (input data m1 (append data q3 q4)) ->
In_queue data m2 (append data q3 (input data m1 q4)).
Lemma not_in_q_shuffle1 :
forall (m1 m2 : data) (q3 q4 : queue data),
~ In_queue data m2 (input data m1 (append data q3 q4)) ->
~ In_queue data m2 (append data q3 (input data m1 q4)).
Lemma not_in_q_shuffle :
forall (m1 m2 : data) (q1 q2 q3 q4 : queue data),
~ In_queue data m2 (append data q1 (input data m1 q2)) ->
append data q1 q2 = append data q3 q4 ->
~ In_queue data m2 (append data q3 (input data m1 q4)).
Lemma in_q_shuffle :
forall (m1 m2 : data) (q1 q2 q3 q4 : queue data),
In_queue data m2 (append data q3 (input data m1 q4)) ->
append data q1 q2 = append data q3 q4 ->
In_queue data m2 (append data q1 (input data m1 q2)).