Infix "+" := N.add : N_scope.Infix "-" := N.sub : N_scope.Infix "*" := N.mul : N_scope.Infix "^" := N.pow : N_scope.Infix "?=" := N.compare (at level 70, no associativity) : N_scope.Infix "=?" := N.eqb (at level 70, no associativity) : N_scope.Infix "<=?" := N.leb (at level 70, no associativity) : N_scope.Infix "<?" := N.ltb (at level 70, no associativity) : N_scope.Infix "/" := N.div : N_scope.Infix "mod" := N.modulo (at level 40, no associativity) : N_scope.(** Compatibility notations *)

Notation N_rect := N_rect (only parsing).Notation N_rec := N_rec (only parsing).Notation N_ind := N_ind (only parsing).Notation N0 := N0 (only parsing).Notation Npos := N.pos (only parsing).Notation Ndouble_plus_one := N.succ_double (only parsing).Notation Nplus := N.add (only parsing).Notation Nminus := N.sub (only parsing).Notation Nmult := N.mul (only parsing).Notation nat_of_N := N.to_nat (only parsing).Notation N_of_nat := N.of_nat (only parsing).Notation Nrect := N.peano_rect (only parsing).Notation Nrect_base := N.peano_rect_base (only parsing).Notation Nrect_step := N.peano_rect_succ (only parsing).Notation Nind := N.peano_ind (only parsing).Notation Nrec := N.peano_rec (only parsing).Notation Nrec_base := N.peano_rec_base (only parsing).Notation Nrec_succ := N.peano_rec_succ (only parsing).Notation Npred_minus := N.pred_sub (only parsing).Notation Ppred_N_spec := N.pos_pred_spec (only parsing).Notation Ppred_Nsucc := N.pos_pred_succ (only parsing).Notation Nplus_0_l := N.add_0_l (only parsing).Notation Nplus_0_r := N.add_0_r (only parsing).Notation Nplus_comm := N.add_comm (only parsing).Notation Nplus_assoc := N.add_assoc (only parsing).Notation Nplus_succ := N.add_succ_l (only parsing).Notation Nsucc_0 := N.succ_0_discr (only parsing).Notation Nminus_N0_Nle := N.sub_0_le (only parsing).Notation Nminus_0_r := N.sub_0_r (only parsing).Notation Nminus_succ_r:= N.sub_succ_r (only parsing).Notation Nmult_0_l := N.mul_0_l (only parsing).Notation Nmult_1_l := N.mul_1_l (only parsing).Notation Nmult_1_r := N.mul_1_r (only parsing).Notation Nmult_comm := N.mul_comm (only parsing).Notation Nmult_assoc := N.mul_assoc (only parsing).Notation Nmult_plus_distr_r := N.mul_add_distr_r (only parsing).Notation Nle_0 := N.le_0_l (only parsing).Notation Ncompare_Eq_eq := N.compare_eq (only parsing).Notation Ncompare_eq_correct := N.compare_eq_iff (only parsing).Notation Nle_lteq := N.lt_eq_cases (only parsing).Notation Ncompare_0 := N.compare_0_r (only parsing).Notation Ndouble_div2 := N.div2_double (only parsing).Notation Ndouble_plus_one_div2 := N.div2_succ_double (only parsing).Notation Ndouble_plus_one_inj := N.succ_double_inj (only parsing).Notation Nlt_not_eq := N.lt_neq (only parsing).Notation Ngt_Nlt := N.gt_lt (only parsing).

(* Specifications: *)
Lemma Nplus_reg_l n m p : n + m = n + p -> m = p.
Lemma Nmult_Sn_m n m : N.succ n * m = m + n * m.
Lemma Nmult_plus_distr_l n m p : p * (n + m) = p * n + p * m.
Lemma Nmult_reg_r n m p : p <> 0 -> n * p = m * p -> n = m.
Lemma Ncompare_antisym n m : CompOpp (n ?= m) = (m ?= n).