induction ls; intuition.
inversion H0.
simpl in *.
inversion H; clear H; subst.
intuition; subst.
assert (sumList ls f == 0).
eapply sumList_0.
intuition.
eapply H1.
intuition.
intuition; subst; intuition.
unfold sumList in *; simpl.
rewrite fold_add_body_eq.
2:{
eapply ratAdd_comm.
}
rewrite fold_add_init.
rewrite H.
rewrite <- ratAdd_0_r.
intuition.
intuition.
assert (sumList ls f == f a).
eapply IHls; intuition.
unfold sumList in *.
simpl.
rewrite fold_add_body_eq.
2:{
eapply ratAdd_comm.
}
rewrite fold_add_init.
rewrite H0.
rewrite H1.
rewrite <- ratAdd_0_l.
intuition.
intuition.
intuition; subst; intuition.
intuition.
Qed.

(* Specifications: *)
Lemma fold_add_permutation : forall (A : Set) ls1 ls2,
Permutation ls1 ls2 ->
forall (f : A -> Rat) init1 init2,
init1 == init2 ->
fold_left (fun r a => r + (f a)) ls1 init1 == fold_left (fun r a => r + (f a)) ls2 init2.