intros m n f; generalize m; clear m; elim n; simpl in |- *; intros.
rewrite (plus_comm m); auto.
rewrite H; repeat (rewrite (plus_comm m); simpl in |- *); auto with arith.
Qed.

(* Specifications: *)
Lemma sum_nm_ext :
forall (m n : nat) (f g : nat -> nat),
(forall x : nat, x <= n -> f (m + x) = g (m + x)) ->
sum_nm n m f = sum_nm n m g.
Lemma sum_nm_add :
forall (m n : nat) (f g : nat -> nat),
sum_nm n m f + sum_nm n m g = sum_nm n m (fun i : nat => f i + g i).
Lemma sum_nm_times :
forall (m n x : nat) (f : nat -> nat),
x * sum_nm n m f = sum_nm n m (fun i : nat => x * f i).
Lemma inv_sum_nm :
forall (P : nat -> Prop) (i n : nat) (f : nat -> nat),
(forall a b : nat, P a -> P b -> P (a + b)) ->
(forall x : nat, x <= n -> P (f (i + x))) -> P (sum_nm n i f).
Lemma t_sum_Svars :
forall (n k : nat) (f : nat -> nat),
sum_nm k n f = sum_nm k (S n) (fun i : nat => f (pred i)).