(** * Addendum to the standard library of Coq *)
Require Export Omega.
Global Obligation Tactic := idtac.
Notation "[ x ; .. ; y ]" := (cons x .. (cons y nil) .. ).
Definition andl {A} (P:A->Prop)(l:list A) : Prop :=
fold_right (fun a res => P a /\ res) True l.
Fixpoint fun_power {A:Type}(n:nat)(f:A->A)(x:A) : A :=
match n with
| 0 => x
| S n' => f (fun_power n' f x)
end.
Definition mod2 (n : nat) : nat :=
n - 2 * div2 n.
Fixpoint power (m n:nat) : nat :=
match n with
| 0 => 1
| S n' => m * power m n'
end.
Definition plusl (l:list nat) : nat :=
fold_right plus 0 l.
Definition multl (l:list nat) : nat :=
fold_right mult 1 l.

Lemma multl_plus_distr_l n l :
n * plusl l = plusl (map (fun m => n * m) l).