Faux.v
(****************************************************************************
IEEE754 : Faux
Laurent Thery Sylvie Boldo
*****************************************************************************
Auxillary properties about natural numbers, relative numbers and reals *)
Require Import Min.
Require Import Arith.
Require Import Reals.
Require Import Zpower.
Require Import fast_integer.
Require Import Zcomplements.
Require Import sTactic.
Hints Resolve R1_neq_R0 :real.
(*Missing rule for nat *)
Theorem
minus_minus: (a, b:nat) (le a b) ->(minus b (minus b a))=a.
Theorem
lte_comp_mult:
(p, q, r, t:nat) (le p q) -> (le r t) ->(le (mult p r) (mult q t)).
Theorem
le_refl_eq: (n, m:nat) n=m ->(le n m).
Theorem
lt_le_pred: (n, m:nat) (lt n m) ->(le n (pred m)).
Theorem
lt_comp_mult_l:
(p, q, r:nat) (lt O p) -> (lt q r) ->(lt (mult p q) (mult p r)).
Theorem
lt_comp_mult_r:
(p, q, r:nat) (lt O p) -> (lt q r) ->(lt (mult q p) (mult r p)).
Theorem
lt_comp_mult:
(p, q, r, s:nat) (lt p q) -> (lt r s) ->(lt (mult p r) (mult q s)).
Theorem
mult_eq_inv: (n, m, p:nat) (lt O n) -> (mult n m)=(mult n p) ->m=p.
Definition
natEq: (n, m:nat){n=m}+{~ n=m}.
Theorem
notEqLt: (n:nat) (lt O n) ->~ n=O.
Theorem
lt_next: (n, m:nat) (lt n m) ->m=(S n) \/ (lt (S n) m).
Theorem
le_next: (n, m:nat) (le n m) ->m=n \/ (le (S n) m).
Theorem
min_or: (n, m:nat)(min n m)=n /\ (le n m) \/ (min n m)=m /\ (lt m n).
Theorem
minus_inv_lt_aux: (n, m:nat) (minus n m)=O ->(minus n (S m))=O.
Theorem
minus_inv_lt: (n, m:nat) (le m n) ->(minus m n)=O.
Theorem
minus_le:
(m, n, p, q:nat) (le m n) -> (le p q) ->(le (minus m q) (minus n p)).
Theorem
lt_minus_inv:
(n, m, p:nat) (le n p) -> (lt m n) ->(lt (minus p n) (minus p m)).
Theorem
lt_mult_anti_compatibility:
(n, n1, n2:nat) (lt O n) -> (lt (mult n n1) (mult n n2)) ->(lt n1 n2).
Theorem
le_mult_anti_compatibility:
(n, n1, n2:nat) (lt O n) -> (le (mult n n1) (mult n n2)) ->(le n1 n2).
Theorem
min_n_0: (n:nat)(min n O)=O.
(*Simplification rules missing in R *)
Theorem
Rplus_ne_l: (r:R)(Rplus r R0)==r.
Theorem
Rplus_ne_r: (r:R)(Rplus R0 r)==r.
Theorem
Rmult_ne_l: (r:R)(Rmult r R1)==r.
Theorem
Rmult_ne_r: (r:R)(Rmult R1 r)==r.
Theorem
Rminus_Ropp: (x, y:R)(Ropp (Rminus y x))==(Rminus x y).
Theorem
Rle_ref: (x:R)(Rle x x).
Theorem
Rle_monotony:
(r, r1, r2:R) (Rle R0 r) -> (Rle r1 r2) ->(Rle (Rmult r r1) (Rmult r r2)).
Theorem
Rle_monotony_r:
(r, r1, r2:R) (Rle R0 r) -> (Rle r1 r2) ->(Rle (Rmult r1 r) (Rmult r2 r)).
Theorem
Rlt_monotony_r:
(r, r1, r2:R) (Rlt R0 r) -> (Rlt r1 r2) ->(Rlt (Rmult r1 r) (Rmult r2 r)).
Theorem
Rlt_compatibility_r:
(r0, r1, r2:R) (Rlt r1 r2) ->(Rlt (Rplus r1 r0) (Rplus r2 r0)).
Theorem
Rle_Rmult_comp:
(x, y, z, t:R) (Rle R0 x) -> (Rle R0 z) -> (Rle x y) -> (Rle z t) ->
(Rle (Rmult x z) (Rmult y t)).
Theorem
Rlt_Ropp: (x, y:R) (Rlt y x) ->(Rlt (Ropp x) (Ropp y)).
Theorem
Ropp_Rlt: (x, y:R) (Rlt (Ropp y) (Ropp x)) ->(Rlt x y).
Theorem
Rle_Ropp: (x, y:R) (Rle y x) ->(Rle (Ropp x) (Ropp y)).
Theorem
Ropp_Rle: (x, y:R) (Rle (Ropp y) (Ropp x)) ->(Rle x y).
Theorem
Rplus_Rminus: (p, q:R)(Rplus p (Rminus q p))==q.
Theorem
Rinv_RN: (e:R) ~ e==R0 ->~ (Rinv e)==R0.
Theorem
Rinv_Rinv: (e:R) ~ e==R0 ->(Rinv (Rinv e))==e.
Theorem
Rmult_Rminus_distr:
(r1, r2, r3:R)(Rmult r1 (Rminus r2 r3))==(Rminus (Rmult r1 r2) (Rmult r1 r3)).
Theorem
Rle_or_lt: (n, m:R)(Rle n m) \/ (Rlt m n).
Theorem
le_IZR: (p, q:Z) (Rle (IZR p) (IZR q)) ->(Zle p q).
Theorem
Rlt_not: (r1, r2:R) (Rle r2 r1) ->~ (Rlt r1 r2).
Theorem
Rlt_mult_anticompatibility:
(x, y, z:R) (Rlt (Rmult z x) (Rmult z y)) -> (Rlt R0 z) ->(Rlt x y).
Theorem
Rle_mult_anticompatibility:
(x, y, z:R) (Rle (Rmult z x) (Rmult z y)) -> (Rlt R0 z) ->(Rle x y).
Theorem
Rmult_anticompatibility:
(r1, r2, r3:R) ~ r1==R0 -> (Rmult r1 r2)==(Rmult r1 r3) ->r2==r3.
Theorem
Rlt_Rinv_R1: (x, y:R) (Rle R1 x) -> (Rlt x y) ->(Rlt (Rinv y) (Rinv x)).
Theorem
R1_Rinv: (Rinv R1)==R1.
Theorem
Rabsolu_R1: (Rabsolu R1)==R1.
Theorem
Rle_antisym: (r, s:R) (Rle r s) -> (Rle s r) ->r==s.
Theorem
RabsoluR0Inv: (r:R) (Rle (Rabsolu r) R0) ->r==R0.
Theorem
Rminus_Rabsolu:
(p, q:R) (Rle q p) ->(Rabsolu (Rminus p q))==(Rminus p q).
Theorem
Rabsolu_Ropp: (r:R)(Rabsolu (Ropp r))==(Rabsolu r).
Theorem
Rabsolu_simpl1: (x:R) (Rle R0 x) ->(Rabsolu x)==x.
Theorem
Rabsolu_simpl2: (x:R) (Rle x R0) ->(Rabsolu x)==(Ropp x).
Theorem
RabsoluR0: (r:R)(Rle R0 (Rabsolu r)).
Theorem
Rabsolu_Rabsolu: (r:R)(Rabsolu (Rabsolu r))==(Rabsolu r).
Theorem
Rplus_le:
(r1, r2, r3, r4:R) (Rle r1 r2) -> (Rle r3 r4) ->
(Rle (Rplus r1 r3) (Rplus r2 r4)).
Theorem
Rmult_Rle_O: (x, y:R) (Rle R0 x) -> (Rle R0 y) ->(Rle R0 (Rmult x y)).
Theorem
Rmult_not_zero: (x, y:R) ~ x==R0 -> ~ y==R0 ->~ (Rmult x y)==R0.
Theorem
Rle_compatibility_r:
(r, r1, r2:R) (Rle r1 r2) ->(Rle (Rplus r1 r) (Rplus r2 r)).
Theorem
Rle_Rinv: (x, y:R) (Rlt R0 x) -> (Rle x y) ->(Rle (Rinv y) (Rinv x)).
Definition
Rmax: R -> R ->R :=
[x, y:R]
Cases (total_order_Rle x y) of
(leftT _) => y
| (rightT _) => x
end.
Theorem
RmaxLess1: (r1, r2:R)(Rle r1 (Rmax r1 r2)).
Theorem
RmaxLess2: (r1, r2:R)(Rle r2 (Rmax r1 r2)).
Theorem
RmaxSym: (p, q:R)(Rmax p q)==(Rmax q p).
Theorem
RmaxAbs:
(p, q, r:R) (Rle p q) -> (Rle q r) ->
(Rle (Rabsolu q) (Rmax (Rabsolu p) (Rabsolu r))).
Theorem
RmaxRmult:
(p, q, r:R) (Rle R0 r) ->(Rmax (Rmult r p) (Rmult r q))==(Rmult r (Rmax p q)).
(* Properties of Z *)
Theorem
convert_not_O: (p:positive)~ (convert p)=O.
Theorem
inj_abs: (x:Z) (Zle ZERO x) ->(inject_nat (absolu x))=x.
Theorem
inject_nat_convert:
(p:Z) (q:positive) p=(POS q) ->(inject_nat (convert q))=p.
Theorem
ZleLe: (x, y:nat) (Zle (INZ x) (INZ y)) ->(le x y).
Theorem
inject_nat_eq: (x, y:nat) (inject_nat x)=(inject_nat y) ->x=y.
Theorem
Zcompare_EGAL: (p, q:Z) (Zcompare p q)=EGAL ->p=q.
Theorem
Zlt_Zopp: (x, y:Z) (Zlt x y) ->(Zlt (Zopp y) (Zopp x)).
Theorem
Zle_Zopp: (x, y:Z) (Zle x y) ->(Zle (Zopp y) (Zopp x)).
Theorem
absolu_INR: (n:nat)(absolu (inject_nat n))=n.
Theorem
absolu_Zopp: (p:Z)(absolu (Zopp p))=(absolu p).
Theorem
Zabs_absolu: (z:Z)(Zabs z)=(inject_nat (absolu z)).
Theorem
absolu_comp_mult:
(p, q:Z)(absolu (Zmult p q))=(mult (absolu p) (absolu q)).
Theorem
Zmin_sym: (m, n:Z)(Zmin n m)=(Zmin m n).
Theorem
Zpower_nat_O: (z:Z)(Zpower_nat z O)=(inject_nat (S O)).
Theorem
Zpower_nat_1: (z:Z)(Zpower_nat z (S O))=z.
Theorem
Zmin_le1: (z1, z2:Z) (Zle z1 z2) ->(Zmin z1 z2)=z1.
Theorem
Zmin_le2: (z1, z2:Z) (Zle z2 z1) ->(Zmin z1 z2)=z2.
Theorem
Zmin_Zle:
(z1, z2, z3:Z) (Zle z1 z2) -> (Zle z1 z3) ->(Zle z1 (Zmin z2 z3)).
Theorem
Zminus_n_predm: (n, m:Z)(Zs (Zminus n m))=(Zminus n (Zpred m)).
Theorem
Zopp_Zpred_Zs: (z:Z)(Zopp (Zpred z))=(Zs (Zopp z)).
Theorem
Zle_mult_gen:
(x, y:Z) (Zle ZERO x) -> (Zle ZERO y) ->(Zle ZERO (Zmult x y)).
Definition
Zmax: (_, _:Z)Z :=
[n, m:Z]
Cases (Zcompare n m) of
EGAL => m
| INFERIEUR => m
| SUPERIEUR => n
end.
Theorem
ZmaxLe1: (z1, z2:Z)(Zle z1 (Zmax z1 z2)).
Theorem
ZmaxSym: (z1, z2:Z)(Zmax z1 z2)=(Zmax z2 z1).
Theorem
Zmax_le2: (z1, z2:Z) (Zle z1 z2) ->(Zmax z1 z2)=z2.
Theorem
Zmax_le1: (z1, z2:Z) (Zle z2 z1) ->(Zmax z1 z2)=z1.
Theorem
ZmaxLe2: (z1, z2:Z)(Zle z2 (Zmax z1 z2)).
Theorem
Zeq_Zs: (p, q:Z) (Zle p q) -> (Zlt q (Zs p)) ->p=q.
Theorem
Zmin_Zmax: (z1, z2:Z)(Zle (Zmin z1 z2) (Zmax z1 z2)).
Theorem
Zabs_Zmult: (z1, z2:Z)(Zabs (Zmult z1 z2))=(Zmult (Zabs z1) (Zabs z2)).
Theorem
Zle_Zmult_comp_r:
(x, y, z:Z) (Zle ZERO z) -> (Zle x y) ->(Zle (Zmult x z) (Zmult y z)).
Theorem
Zle_Zmult_comp_l:
(x, y, z:Z) (Zle ZERO z) -> (Zle x y) ->(Zle (Zmult z x) (Zmult z y)).
(* Conversions from R <-> Z <-> N *)
Theorem
IZR_zero: (p:Z) p=ZERO ->(IZR p)==R0.
Theorem
IZR_zero_r: (p:Z) (IZR p)==R0 ->p=ZERO.
Theorem
Rminus_IZR: (z, t:Z)(IZR (Zminus z t))==(Rminus (IZR z) (IZR t)).
Theorem
Rlt_INR: (n, m:nat) (lt n m) ->(Rlt (INR n) (INR m)).
Theorem
Rlt_INR0: (n:nat) (lt O n) ->(Rlt R0 (INR n)).
Theorem
Rlt_INR1: (n:nat) (lt (S O) n) ->(Rlt R1 (INR n)).
Theorem
NEq_INR: (n, m:nat) ~ n=m ->~ (INR n)==(INR m).
Theorem
NEq_INRO: (n:nat) ~ n=O ->~ (INR n)==R0.
Theorem
NEq_INR1: (n:nat) ~ n=(S O) ->~ (INR n)==R1.
Theorem
not_O_lt: (n:nat) ~ n=O ->(lt O n).
Theorem
Rlt_IZR: (p, q:Z) (Zlt p q) ->(Rlt (IZR p) (IZR q)).
Theorem
Rle_IZR: (x, y:Z) (Zle x y) ->(Rle (IZR x) (IZR y)).
Theorem
lt_Rlt: (n, m:nat) (Rlt (INR n) (INR m)) ->(lt n m).
Theorem
INR_inv: (n, m:nat) (INR n)==(INR m) ->n=m.
Theorem
Rle_INR: (x, y:nat) (le x y) ->(Rle (INR x) (INR y)).
Theorem
le_Rle: (n, m:nat) (Rle (INR n) (INR m)) ->(le n m).
Theorem
Rmult_INR: (n, m:nat)(INR (mult n m))==(Rmult (INR n) (INR m)).
Theorem
Rmult_IZR: (z, t:Z)(IZR (Zmult z t))==(Rmult (IZR z) (IZR t)).
Theorem
absolu_Zs: (z:Z) (Zle ZERO z) ->(absolu (Zs z))=(S (absolu z)).
Theorem
Zlt_next: (n, m:Z) (Zlt n m) ->m=(Zs n) \/ (Zlt (Zs n) m).
Theorem
Zle_next: (n, m:Z) (Zle n m) ->m=n \/ (Zle (Zs n) m).
Theorem
Zlt_Zopp_Inv: (p, q:Z) (Zlt (Zopp p) (Zopp q)) ->(Zlt q p).
Theorem
Zle_Zopp_Inv: (p, q:Z) (Zle (Zopp p) (Zopp q)) ->(Zle q p).
Theorem
absolu_Zs_neg:
(z:Z) (Zlt z ZERO) -><nat> (S (absolu (Zs z)))=(absolu z).
Theorem
Zlt_absolu: (x:Z) (n:nat) (lt (absolu x) n) ->(Zlt x (inject_nat n)).
Theorem
inj_pred: (n:nat) ~ n=O ->(inject_nat (pred n))=(Zpred (inject_nat n)).
Theorem
Zle_abs: (p:Z)(Zle p (inject_nat (absolu p))).
Theorem
ZleAbs:
(z:Z) (n:nat) (Zle (Zopp (inject_nat n)) z) -> (Zle z (inject_nat n)) ->
(le (absolu z) n).
Theorem
Rabsolu_Zabs: (z:Z)(Rabsolu (IZR z))==(IZR (Zabs z)).
Theorem
lt_Zlt_inv: (n, m:nat) (Zlt (INZ n) (INZ m)) ->(lt n m).
Theorem
NconvertO: (p:positive)~ (convert p)=O.
Theorem
absolu_lt_nz: (z:Z) ~ z=ZERO ->(lt O (absolu z)).
Theorem
Rlt2: (Rlt R0 (INR (S (S O)))).
Theorem
RlIt2: (Rlt R0 (Rinv (INR (S (S O))))).
Theorem
Rledouble: (r:R) (Rle R0 r) ->(Rle r (Rmult (INR (S (S O))) r)).
Theorem
Rltdouble: (r:R) (Rlt R0 r) ->(Rlt r (Rmult (INR (2)) r)).
Theorem
Rlt_RinvDouble: (r:R) (Rlt R0 r) ->(Rlt (Rmult (Rinv (INR (2))) r) r).
Theorem
Int_part_INR: (n:nat)(Int_part (INR n))=(inject_nat n).
Theorem
Ropp_Zopp: (z:Z)(Ropp (IZR z))==(IZR (Zopp z)).
Theorem
Rle_lt: (r1, r2:R) (Rle r1 r2) -> ~ <R> r1==r2 ->(Rlt r1 r2).
Theorem
Rle_Rabs: (x:R)(Rle x (Rabsolu x)).
30/05/01, 17:44