Section SUM.
(* on definit la somme d'une fonction de E dans F sur une liste d'elements de E par induction, puis on demontre quelques proprietes elementaires *)
Variable E : Set.
Fixpoint sigma (l1 : list E) : (E -> Z) -> Z :=
fun f : E -> Z =>
match l1 with
| nil => 0%Z
| e :: l2 => (f e + sigma l2 f)%Z
end.
Remark le_sigma_sigma :
forall (l : list E) (f g : E -> Z),
(forall x : E, (f x <= g x)%Z) -> (sigma l f <= sigma l g)%Z.
Hypothesis eq_E_dec : eq_dec E.

Lemma lt_sigma_sigma :
forall (l : list E) (f g : E -> Z),
(forall x : E, (f x <= g x)%Z) ->
(exists y : E, (f y < g y)%Z /\ In y l) -> (sigma l f < sigma l g)%Z.