(************************************************************************)
(*         *      The Rocq Prover / The Rocq Development Team           *)
(*  v      *         Copyright INRIA, CNRS and contributors             *)
(* <O___,, * (see version control and CREDITS file for authors & dates) *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)
(*                      Evgeny Makarov, INRIA, 2007                     *)
(************************************************************************)
Require Export NBase.
Module NAddProp (Import N : NAxiomsMiniSig').
Include NBaseProp N.
(** For theorems about [add] that are both valid for [N] and [Z], see [NZAdd] *)
(** Now comes theorems valid for natural numbers but not for Z *)

(* Specifications: *)
Theorem eq_add_0 : forall n m, n + m == 0 <-> n == 0 /\ m == 0.
Theorem eq_add_succ :
forall n m, (exists p, n + m == S p) <->
(exists n', n == S n') \/ (exists m', m == S m').
Theorem eq_add_1 : forall n m,
n + m == 1 -> n == 1 /\ m == 0 \/ n == 0 /\ m == 1.
Theorem succ_add_discr : forall n m, m ~= S (n + m).
Theorem add_pred_l : forall n m, n ~= 0 -> P n + m == P (n + m).
Theorem add_pred_r : forall n m, m ~= 0 -> n + P m == P (n + m).
End NAddProp.