End DISJOINT.
Section REDUCE_MORE.
Variable data : Set.
Hypothesis eq_data_dec : eq_dec data.
Variable f : data -> Z.

(* Specifications: *)
Lemma reduce_first_out :
forall (q : queue data) (m : data),
first data q = value data m ->
reduce data f (first_out data q) = (reduce data f q - f m)%Z.