(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2018       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \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)         *)
(************************************************************************)
(** Strict order on natural numbers.  This file is mostly OBSOLETE now, see module [PeanoNat.Nat] instead.  [lt] is defined in library [Init/Peano.v] as: << Definition lt (n m:nat) := S n <= m. Infix "<" := lt : nat_scope. >> *)
Local Open Scope nat_scope.
(** * Irreflexivity *)
Notation lt_irrefl := Nat.lt_irrefl (only parsing). (* ~ x < x *)
Hint Resolve lt_irrefl: arith.
(** * Relationship between [le] and [lt] *)
Hint Immediate lt_le_S: arith.
Hint Immediate lt_n_Sm_le: arith.
Hint Immediate le_lt_n_Sm: arith.
Hint Immediate le_not_lt lt_not_le: arith.
(** * Asymmetry *)
Notation lt_asym := Nat.lt_asymm (only parsing). (* n<m -> ~m<n *)
(** * Order and 0 *)
Notation lt_0_Sn := Nat.lt_0_succ (only parsing). (* 0 < S n *)
Notation lt_n_0 := Nat.nlt_0_r (only parsing). (* ~ n < 0 *)
Hint Resolve lt_0_Sn lt_n_0 : arith.
Hint Immediate neq_0_lt lt_0_neq: arith.
(** * Order and successor *)
Notation lt_n_Sn := Nat.lt_succ_diag_r (only parsing). (* n < S n *)
Notation lt_S := Nat.lt_lt_succ_r (only parsing). (* n < m -> n < S m *)
Hint Resolve lt_n_Sn lt_S lt_n_S : arith.
Hint Immediate lt_S_n : arith.
(** * Predecessor *)
Hint Immediate lt_pred: arith.
Hint Resolve lt_pred_n_n: arith.
(** * Transitivity properties *)
Notation lt_trans := Nat.lt_trans (only parsing).
Notation lt_le_trans := Nat.lt_le_trans (only parsing).
Notation le_lt_trans := Nat.le_lt_trans (only parsing).
Hint Resolve lt_trans lt_le_trans le_lt_trans: arith.
(** * Large = strict or equal *)
Notation le_lt_or_eq_iff := Nat.lt_eq_cases (only parsing).
Notation lt_le_weak := Nat.lt_le_incl (only parsing).
Hint Immediate lt_le_weak: arith.
(** * Dichotomy *)
Notation le_or_lt := Nat.le_gt_cases (only parsing). (* n <= m \/ m < n *)

Theorem nat_total_order n m : n <> m -> n < m \/ m < n.