(* functional or *)
Definition fun_or (pred1 pred2 : E -> bool) (a : E) := pred1 a || pred2 a.(* functional sum *)
Definition fun_sum (f1 f2 : E -> Z) (a : E) := (f1 a + f2 a)%Z.Definition fun_minus (f1 f2 : E -> Z) (a : E) := (f1 a - f2 a)%Z.

Lemma reduce_in_queue_strictly_positive : forall (x : E) (q : queue E), (f x > 0)%Z -> In_queue E x q -> (reduce E f q > 0)%Z.