Ltac prog_assoc_r :=
    eapply comp_spec_eq_trans_r; [ idtac | eapply comp_spec_assoc].(* A bounded repeat based on fold. *)
Definition repeatMax(A : Set)(eqd : EqDec A)(c : Comp A)(P : A -> bool) def (n : nat):=
  compFold _ (fun a' i => if (P a') then (ret a') else c) def (allNatsLt n).

Lemma zip_app : forall (A B : Set)(lsa1 lsa2 : list A)(lsb1 lsb2 : list B), length lsa1 = length lsb1 -> length lsa2 = length lsb2 -> (zip lsa1 lsb1) ++ (zip lsa2 lsb2) = (zip (lsa1 ++ lsa2) (lsb1 ++ lsb2)).