induction ls; intuition; unfold sumList in *; simpl in *.
rewrite <- ratAdd_0_l.
intuition.
rewrite fold_add_body_eq.
2:{
eapply ratAdd_comm.
}
rewrite fold_add_init.
rewrite (IHls f1 f2).
eapply eqRat_trans.
2:{
symmetry.
eapply ratAdd_eqRat_compat.
rewrite fold_add_body_eq.
2:{
eapply ratAdd_comm.
}
eapply fold_add_init.
intuition.
eapply eqRat_refl.
rewrite fold_add_body_eq.
2:{
eapply ratAdd_comm.
}
eapply fold_add_init.
intuition.
eapply eqRat_refl.
}
repeat rewrite <- ratAdd_assoc.
eapply ratAdd_eqRat_compat.
repeat rewrite ratAdd_assoc.
eapply ratAdd_eqRat_compat; intuition.
rewrite ratAdd_comm.
eapply ratAdd_eqRat_compat; intuition.
eapply fold_add_body_eq; intuition.
intuition.
Qed.

(* Specifications: *)
Lemma sumList_summation : forall (A B : Set) f (lsa : list A)(lsb : list B),
sumList lsa (fun a => sumList lsb (fun b => (f a b))) ==
sumList lsb (fun b => sumList lsa (fun a => (f a b))).