Finduct

# Library Finduct

`Require Export FPred.
Section finduct.
Variable b : Fbound.
Variable radix : Z.
Variable precision : nat.
Coercion Local FtoRradix := FtoR radix.
Hypothesis radixMoreThanOne : (1 < radix)%Z.
Let radixMoreThanZERO := Zlt_1_O _ (Zlt_le_weak _ _ radixMoreThanOne).
Hint Resolve radixMoreThanZERO: zarith.
Hypothesis precisionNotZero : precision <> 0.
Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix precision.
Definition Fweight (p : float) :=
(Fnum p + Fexp p * Zpower_nat radix precision)%Z.
Theorem FweightLt :
forall p q : float,
Fcanonic radix b p ->
Fcanonic radix b q -> (0 <= p)%R -> (p < q)%R -> (Fweight p < Fweight q)%Z.
Theorem FweightEq :
forall p q : float,
Fcanonic radix b p ->
Fcanonic radix b q -> p = q :>R -> Fweight p = Fweight q.
Theorem FweightZle :
forall p q : float,
Fcanonic radix b p ->
Fcanonic radix b q -> (0 <= p)%R -> (p <= q)%R -> (Fweight p <= Fweight q)%Z.
Theorem FinductPosAux :
forall (P : float -> Prop) (p : float),
(0 <= p)%R ->
Fcanonic radix b p ->
P p ->
(forall q : float,
Fcanonic radix b q -> (p <= q)%R -> P q -> P (FSucc b radix precision q)) ->
forall x : Z,
(0 <= x)%Z ->
forall q : float,
x = (Fweight q - Fweight p)%Z -> Fcanonic radix b q -> (p <= q)%R -> P q.
Theorem FinductPos :
forall (P : float -> Prop) (p : float),
(0 <= p)%R ->
Fcanonic radix b p ->
P p ->
(forall q : float,
Fcanonic radix b q -> (p <= q)%R -> P q -> P (FSucc b radix precision q)) ->
forall q : float, Fcanonic radix b q -> (p <= q)%R -> P q.
Theorem FinductNegAux :
forall (P : float -> Prop) (p : float),
(0 <= p)%R ->
Fcanonic radix b p ->
P p ->
(forall q : float,
Fcanonic radix b q ->
(0 < q)%R -> (q <= p)%R -> P q -> P (FPred b radix precision q)) ->
forall x : Z,
(0 <= x)%Z ->
forall q : float,
x = (Fweight p - Fweight q)%Z ->
Fcanonic radix b q -> (0 <= q)%R -> (q <= p)%R -> P q.
Theorem FinductNeg :
forall (P : float -> Prop) (p : float),
(0 <= p)%R ->
Fcanonic radix b p ->
P p ->
(forall q : float,
Fcanonic radix b q ->
(0 < q)%R -> (q <= p)%R -> P q -> P (FPred b radix precision q)) ->
forall q : float, Fcanonic radix b q -> (0 <= q)%R -> (q <= p)%R -> P q.
Theorem radixRangeBoundExp :
forall p q : float,
Fcanonic radix b p ->
Fcanonic radix b q ->
(0 <= p)%R ->
(p < q)%R -> (q < radix * p)%R -> Fexp p = Fexp q \/ Zsucc (Fexp p) = Fexp q.
End finduct.
`