Fodd.v



(****************************************************************************
                                                                             
          IEEE754  :  Fodd                                                     
                                                                             
          Laurent Thery                                                      
                                                                             
*****************************************************************************
*)

Require Import ZArith.
Require Import PolyList.
Require Import Float.
Require Import Fnorm.
Require Import Fop.
Require Import Fcomp.
Require Import FSucc.
Require Import FPred.
Require Import Fmin.
Section FOdd.
Variable b:Fbound.
Variable radix:nat.
Variable precision:nat.

Local FtoRradix := (FtoR radix).
Coercion FtoRradix : float >-> R.
Hypothesis radixMoreThanOne:(lt (S O) radix).
Hypothesis precisionGreaterThanOne:(lt (1) precision).
Hypothesis pGivesBound:(vNum b)=(minus (exp radix precision) (1)).
(* We define the parity predicates*)

Inductive Even: nat ->Prop :=
     EvenO: (
Even O)
    | EvenSS: (n:nat) (Even n) ->(Even (S (S n))) .

Inductive Odd: nat ->Prop :=
     Odd1: (
Odd (S O))
    | OddSS: (n:nat) (Odd n) ->(Odd (S (S n))) .

Theorem OddSEven: (n:nat) (Odd n) ->(Even (S n)).

Theorem EvenSOdd: (n:nat) (Even n) ->(Odd (S n)).

Theorem OddSEvenInv: (n:nat) (Odd (S n)) ->(Even n).

Theorem EvenSOddInv: (n:nat) (Even (S n)) ->(Odd n).

Theorem OddEvenDec: (n:nat){(Odd n)}+{(Even n)}.

Theorem OddNEven: (n:nat) (Odd n) ->~ (Even n).

Theorem EvenNOdd: (n:nat) (Even n) ->~ (Odd n).

Theorem EvenPlusAux:
  (n, m:nat)
  (iff (
Odd (plus n m)) (Odd n) /\ (Even m) \/ (Even n) /\ (Odd m)) /\
  (iff (Even (plus n m)) (Even n) /\ (Even m) \/ (Odd n) /\ (Odd m)).

Theorem EvenPlus1: (n, m:nat) (Even n) -> (Even m) ->(Even (plus n m)).

Theorem EvenPlus2: (n, m:nat) (Odd n) -> (Odd m) ->(Even (plus n m)).

Theorem EvenPlusInv1: (n, m:nat) (Even (plus n m)) -> (Even n) ->(Even m).

Theorem EvenPlusInv2: (n, m:nat) (Even (plus n m)) -> (Odd n) ->(Odd m).

Theorem OddPlus1: (n, m:nat) (Odd n) -> (Even m) ->(Odd (plus n m)).

Theorem OddPlus2: (n, m:nat) (Even n) -> (Odd m) ->(Odd (plus n m)).

Theorem OddPlusInv1: (n, m:nat) (Odd (plus n m)) -> (Odd m) ->(Even n).

Theorem OddPlusInv2: (n, m:nat) (Odd (plus n m)) -> (Even m) ->(Odd n).

Theorem EvenMultAux:
  (n, m:nat)
  (iff (
Odd (mult n m)) (Odd n) /\ (Odd m)) /\
  (iff (Even (mult n m)) (Even n) \/ (Even m)).

Theorem EvenMult1: (n, m:nat) (Even n) ->(Even (mult n m)).

Theorem EvenMult2: (n, m:nat) (Even m) ->(Even (mult n m)).

Theorem EvenMultInv: (n, m:nat) (Even (mult n m)) -> (Odd n) ->(Even m).

Theorem OddMult: (n, m:nat) (Odd n) -> (Odd m) ->(Odd (mult n m)).

Theorem OddMultInv: (n, m:nat) (Odd (mult n m)) ->(Odd n).

Theorem OddExp: (n, m:nat) (Odd n) ->(Odd (exp n m)).

Theorem EvenExp: (n, m:nat) (Even n) ->(Even (exp n (S m))).

Definition Feven := [p:float](Even (absolu (Fnum p))).

Definition Fodd := [p:float](Odd (absolu (Fnum p))).

Theorem FevenO: (p:float) (is_Fzero p) ->(Feven p).

Theorem FevenOrFodd: (p:float)(Feven p) \/ (Fodd p).

Theorem FevenSucProp:
  (p:
float)
  ((Fodd p) ->(Feven (FSucc b radix precision p))) /\
  ((Feven p) ->(Fodd (FSucc b radix precision p))).

Theorem FoddSuc: (p:float) (Fodd p) ->(Feven (FSucc b radix precision p)).

Theorem FevenSuc: (p:float) (Feven p) ->(Fodd (FSucc b radix precision p)).

Theorem FevenFop: (p:float) (Feven p) ->(Feven (Fopp p)).

Theorem FoddFop: (p:float) (Fodd p) ->(Fodd (Fopp p)).

Theorem FevenPred: (p:float) (Fodd p) ->(Feven (FPred b radix precision p)).

Theorem FoddPred: (p:float) (Feven p) ->(Fodd (FPred b radix precision p)).

Definition FNodd := [p:float](Fodd (Fnormalize radix b precision p)).

Definition FNeven := [p:float](Feven (Fnormalize radix b precision p)).

Theorem FNoddEq:
  (f1, f2:
float)
  (Fbounded b f1) -> (Fbounded b f2) -> <R> f1==f2 -> (FNodd f1) ->(FNodd f2).

Theorem FNevenEq:
  (f1, f2:
float)
  (Fbounded b f1) -> (Fbounded b f2) -> <R> f1==f2 -> (FNeven f1) ->(FNeven f2).

Theorem FNevenFop: (p:float) (FNeven p) ->(FNeven (Fopp p)).

Theorem FNoddFop: (p:float) (FNodd p) ->(FNodd (Fopp p)).

Theorem FNoddSuc:
  (p:
float) (Fbounded b p) -> (FNodd p) ->(FNeven (FNSucc b radix precision p)).

Theorem FNevenSuc:
  (p:
float) (Fbounded b p) -> (FNeven p) ->(FNodd (FNSucc b radix precision p)).

Theorem FNevenPred:
  (p:
float) (Fbounded b p) -> (FNodd p) ->(FNeven (FNPred b radix precision p)).

Theorem FNoddPred:
  (p:
float) (Fbounded b p) -> (FNeven p) ->(FNodd (FNPred b radix precision p)).

Theorem FNevenOrFNodd: (p:float)(FNeven p) \/ (FNodd p).

Theorem FnOddNEven: (n:float) (FNodd n) ->~ (FNeven n).

Theorem EvenD: (n:nat) (Even n) ->(Ex [m:nat] n=(mult (2) m)).

Theorem FEvenD:
  (p:
float) (Fbounded b p) -> (Feven p) ->
  (Ex [q:float] (Fbounded b q) /\ <R> p==(Rmult (2) q)).

Theorem FNEvenD:
  (p:
float) (Fbounded b p) -> (FNeven p) ->
  (Ex [q:float] (Fbounded b q) /\ <R> p==(Rmult (2) q)).
End FOdd.

30/05/01, 18:07