Library Waterproof.Libs.Reals.Integer
Require Import Notations.Common.
Require Import Notations.Sets.
Require Import Coq.Reals.Reals.
Definition Z_in_R : subset R := fun r => exists z : Z, IZR z = r.
Open Scope R_scope.
Lemma plus_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n + m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' + m')%Z.
rewrite plus_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma minus_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n - m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' - m')%Z.
rewrite minus_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma mult_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n * m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' * m')%Z.
rewrite mult_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma neg_Z_in_R (n : R) : n ∈ Z_in_R ⇒ (-n) ∈ Z_in_R.
Proof.
intros [n' hn'].
exists (-n')%Z.
rewrite opp_IZR.
rewrite hn'.
reflexivity.
Qed.
Lemma zero_Z_in_R : 0 ∈ Z_in_R.
Proof.
exists 0%Z.
reflexivity.
Qed.
Lemma one_Z_in_R : 1 ∈ Z_in_R.
Proof.
exists 1%Z.
reflexivity.
Qed.
Lemma two_Z_in_R : 2 ∈ Z_in_R.
Proof.
exists 2%Z.
reflexivity.
Qed.
Lemma INR_1 : INR(1%nat) = 1.
Proof.
reflexivity.
Qed.
Lemma INR_0 : INR(0%nat) = 0.
Proof.
reflexivity.
Qed.
Lemma ge_zero_gt_one (n : nat) : (INR n > 0) -> INR n >= 1.
Proof.
rewrite <-INR_1.
rewrite <-INR_0.
intro h.
apply Rle_ge.
apply le_INR.
apply INR_lt in h.
exact h.
Qed.
Require Import Notations.Sets.
Require Import Coq.Reals.Reals.
Definition Z_in_R : subset R := fun r => exists z : Z, IZR z = r.
Open Scope R_scope.
Lemma plus_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n + m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' + m')%Z.
rewrite plus_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma minus_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n - m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' - m')%Z.
rewrite minus_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma mult_Z_in_R (n m : R) : n ∈ Z_in_R ⇒ m ∈ Z_in_R ⇒ (n * m) ∈ Z_in_R.
Proof.
intros [n' hn'] [m' hm'].
exists (n' * m')%Z.
rewrite mult_IZR.
rewrite hn'.
rewrite hm'.
reflexivity.
Qed.
Lemma neg_Z_in_R (n : R) : n ∈ Z_in_R ⇒ (-n) ∈ Z_in_R.
Proof.
intros [n' hn'].
exists (-n')%Z.
rewrite opp_IZR.
rewrite hn'.
reflexivity.
Qed.
Lemma zero_Z_in_R : 0 ∈ Z_in_R.
Proof.
exists 0%Z.
reflexivity.
Qed.
Lemma one_Z_in_R : 1 ∈ Z_in_R.
Proof.
exists 1%Z.
reflexivity.
Qed.
Lemma two_Z_in_R : 2 ∈ Z_in_R.
Proof.
exists 2%Z.
reflexivity.
Qed.
Lemma INR_1 : INR(1%nat) = 1.
Proof.
reflexivity.
Qed.
Lemma INR_0 : INR(0%nat) = 0.
Proof.
reflexivity.
Qed.
Lemma ge_zero_gt_one (n : nat) : (INR n > 0) -> INR n >= 1.
Proof.
rewrite <-INR_1.
rewrite <-INR_0.
intro h.
apply Rle_ge.
apply le_INR.
apply INR_lt in h.
exact h.
Qed.