Fixpoint reduce (q : queue E) : Z :=
  match q with
  | empty => 0%Z
  | input d q' => (reduce q' + f d)%Z
  end.

Lemma reduce_append_nil2_symmetric : forall (q1 : queue E) (d : E), reduce q1 = (reduce (append E q1 (input E d (empty E))) - f d)%Z.