(************************************************************************)
(*         *   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)         *)
(************************************************************************)
(*********************************************************)
(**    Axiomatisation of the classical reals             *)
(*********************************************************)
Require Export ZArith_base.
Require Export Rdefinitions.
Declare Scope R_scope.
Local Open Scope R_scope.
(*********************************************************)
(** *            Field axioms                            *)
(*********************************************************)
(*********************************************************)
(** **   Addition                                        *)
(*********************************************************)
Hint Resolve Rplus_comm: real.
Hint Resolve Rplus_assoc: real.
Hint Resolve Rplus_opp_r: real.
Hint Resolve Rplus_0_l: real.
(***********************************************************)
(** **    Multiplication                                   *)
(***********************************************************)
Hint Resolve Rmult_comm: real.
Hint Resolve Rmult_assoc: real.
Hint Resolve Rinv_l: real.
Hint Resolve Rmult_1_l: real.
Hint Resolve R1_neq_R0: real.
(*********************************************************)
(** **   Distributivity                                  *)
(*********************************************************)
(**********)
Axiom
Rmult_plus_distr_l : forall r1 r2 r3:R, r1 * (r2 + r3) = r1 * r2 + r1 * r3.
Hint Resolve Rmult_plus_distr_l: real.
(*********************************************************)
(** *    Order axioms                                    *)
(*********************************************************)
(*********************************************************)
(** **   Total Order                                     *)
(*********************************************************)
(*********************************************************)
(** **   Lower                                           *)
(*********************************************************)
(**********)
Axiom
Rmult_lt_compat_l : forall r r1 r2:R, 0 < r -> r1 < r2 -> r * r1 < r * r2.
Hint Resolve Rlt_asym Rplus_lt_compat_l Rmult_lt_compat_l: real.
(**********************************************************)
(** *    Injection from N to R                            *)
(**********************************************************)
(**********)
Fixpoint INR (n:nat) : R :=
match n with
| O => 0
| S O => 1
| S n => INR n + 1
end.
Arguments INR n%nat.
(**********************************************************)
(** *    [R] Archimedean                                  *)
(**********************************************************)

(**********)
Axiom archimed : forall r:R, IZR (up r) > r /\ IZR (up r) - r <= 1.