Elementary.Theoryinclude Bap_core_theory.Theory.Basicinclude Bap_core_theory.Theory.Minimalinclude Bap_core_theory.Theory.Initval var : 'a Bap_core_theory.Theory.var -> 'a Bap_core_theory.Theory.purevar v is the value of the variable v.
val unk :
'a Bap_core_theory.Theory.Value.sort ->
'a Bap_core_theory.Theory.pureunk s an unknown value of sort s.
This term explicitly denotes a term with undefined or unknown value.
val let_ :
'a Bap_core_theory.Theory.var ->
'a Bap_core_theory.Theory.pure ->
'b Bap_core_theory.Theory.pure ->
'b Bap_core_theory.Theory.purelet_ v exp body bind the value of exp to v body.
val ite :
Bap_core_theory.Theory.bool ->
'a Bap_core_theory.Theory.pure ->
'a Bap_core_theory.Theory.pure ->
'a Bap_core_theory.Theory.pureite c x y is x if c evaluates to b1 else y.
include Bap_core_theory.Theory.Boolval b0 : Bap_core_theory.Theory.boolb0 is false aka 0 bit
val b1 : Bap_core_theory.Theory.boolb1 is true aka 1 bit
val inv : Bap_core_theory.Theory.bool -> Bap_core_theory.Theory.boolinv x inverts x.
val and_ :
Bap_core_theory.Theory.bool ->
Bap_core_theory.Theory.bool ->
Bap_core_theory.Theory.booland_ x y is a conjunction of x and y.
or_ x y is a disjunction of x and y.
include Bap_core_theory.Theory.Bitvval int :
's Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.word ->
's Bap_core_theory.Theory.bitvint s x is a bitvector constant x of sort s.
val msb : 's Bap_core_theory.Theory.bitv -> Bap_core_theory.Theory.boolmsb x is the most significant bit of x.
val lsb : 's Bap_core_theory.Theory.bitv -> Bap_core_theory.Theory.boollsb x is the least significant bit of x.
val neg : 's Bap_core_theory.Theory.bitv -> 's Bap_core_theory.Theory.bitvneg x is two-complement unary minus
val not : 's Bap_core_theory.Theory.bitv -> 's Bap_core_theory.Theory.bitvnot x is one-complement negation.
val add :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvadd x y addition modulo 2^'s
val sub :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvsub x y subtraction modulo 2^'s
val mul :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvmul x y multiplication modulo 2^'s
val div :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvdiv x y unsigned division modulo 2^'s truncating towards 0.
The division by zero is defined to be a vector of all ones of size 's.
val sdiv :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvsdiv x y is signed division of x by y modulo 2^'s,
The signed division operator is defined in terms of the div operator as follows:
/
| div x y : if not mx /\ not my
| neg (div (neg x) y) if mx /\ not my
x sdiv y = <
| neg (div x (neg y)) if not mx /\ my
| div (neg x) (neg y) if mx /\ my
\
where mx = msb x, and my = msb y.val modulo :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvmodulo x y is the remainder of div x y modulo 2^'s.
val smodulo :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvsmodulo x y is the signed remainder of div x y modulo 2^'s.
This version of the signed remainder where the sign follows the dividend, and is defined via the % = modulo operation as follows
/
| x % y : if not mx /\ not my
| neg (neg x % y) if mx /\ not my
x smodulo y = <
| neg (x % (neg y)) if not mx /\ my
| neg (neg x % neg y) mod m if mx /\ my
\
where mx = msb x and my = msb y.val logand :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvlogand x y is a bitwise logical and of x and y.
val logor :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvlogor x y is a bitwise logical or of x and y.
val logxor :
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvlogxor x y is a bitwise logical xor of x and y.
val shiftr :
Bap_core_theory.Theory.bool ->
's Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvshiftr s x m shifts x right by m bits filling with s.
val shiftl :
Bap_core_theory.Theory.bool ->
's Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
's Bap_core_theory.Theory.bitvshiftl s x m shifts x left by m bits filling with s.
val sle :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolsle x y binary predicate for singed less than or equal
val ule :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolule x y binary predicate for unsigned less than or equal
val cast :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.bool ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvcast s b x casts x to sort s filling with b.
If m = size s - size (sort b) > 0 then m bits b are prepended to the most significant part of the vector.
Otherwise, if m <= 0, i.e., it is a narrowing cast, then the value of b doesn't affect the result of evaluation.
val concat :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv list ->
'a Bap_core_theory.Theory.bitvconcat s xs concatenates a list of vectors xs.
All vectors are concatenated from left to right (so that the most significant bits of the resulting vector are defined by the first element of the list and so on).
The result of concatenation are then casted to sort s with all extra bits (if any) set to zero.
val append :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'c Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvappend s x y appends x and y and casts to s.
Appends x and y so that in the resulting vector the vector x occupies the most significant part and y the least significant part. The resulting vector is then casted to the sort s with extra bits (if any) set to zero.
include Bap_core_theory.Theory.Memoryval load :
('a, 'b) Bap_core_theory.Theory.mem ->
'a Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitvload m k is the value associated with the key k in the memory m.
val store :
('a, 'b) Bap_core_theory.Theory.mem ->
'a Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
('a, 'b) Bap_core_theory.Theory.memstore m k x a memory m in which the key k is associated with the word x.
include Bap_core_theory.Theory.Effectval perform :
'a Bap_core_theory.Theory.Effect.sort ->
'a Bap_core_theory.Theory.effperform s performs a generic effect of sort s.
val set :
'a Bap_core_theory.Theory.var ->
'a Bap_core_theory.Theory.pure ->
Bap_core_theory.Theory.data Bap_core_theory.Theory.effset v x changes the value stored in v to the value of x.
jmp dst passes the control to a program located at dst.
goto lbl passes the control to a program labeled with lbl.
val seq :
'a Bap_core_theory.Theory.eff ->
'a Bap_core_theory.Theory.eff ->
'a Bap_core_theory.Theory.effseq x y performs effect x, after that perform effect y.
val blk :
Bap_core_theory.Theory.label ->
Bap_core_theory.Theory.data Bap_core_theory.Theory.eff ->
Bap_core_theory.Theory.ctrl Bap_core_theory.Theory.eff ->
unit Bap_core_theory.Theory.effblk lbl data ctrl a labeled sequence of effects.
val repeat :
Bap_core_theory.Theory.bool ->
Bap_core_theory.Theory.data Bap_core_theory.Theory.eff ->
Bap_core_theory.Theory.data Bap_core_theory.Theory.effrepeat c data repeats data effects until the condition c holds.
val branch :
Bap_core_theory.Theory.bool ->
'a Bap_core_theory.Theory.eff ->
'a Bap_core_theory.Theory.eff ->
'a Bap_core_theory.Theory.effbranch c lhs rhs if c holds then performs lhs else rhs.
val zero :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'a Bap_core_theory.Theory.bitvzero s creates a bitvector of all zeros of sort s.
val is_zero : 'a Bap_core_theory.Theory.bitv -> Bap_core_theory.Theory.boolis_zero x holds if x is a bitvector of all zeros
val non_zero : 'a Bap_core_theory.Theory.bitv -> Bap_core_theory.Theory.boolnon_zero x holds if x is not a zero bitvector.
val succ : 'a Bap_core_theory.Theory.bitv -> 'a Bap_core_theory.Theory.bitvsucc x is the successor of x.
val pred : 'a Bap_core_theory.Theory.bitv -> 'a Bap_core_theory.Theory.bitvpred x is the predecessor of x.
val nsucc :
'a Bap_core_theory.Theory.bitv ->
int ->
'a Bap_core_theory.Theory.bitvnsucc x n is the nth successor of x.
val npred :
'a Bap_core_theory.Theory.bitv ->
int ->
'a Bap_core_theory.Theory.bitvnpred x is the nth predecessor of x.
val high :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvhigh s x is the high cast of x to sort s.
if m = size (sort x) - size s > 0 then high s x evaluates to m most significant bits of x; else if m = 0 then high s x evaluates to the value of x; else m zeros are prepended to the most significant part of x.
val low :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvlow s x = cast s b0 x is the low cast of x to sort s.
if m = size (sort x) - size s < 0 then low s x evaluates to size s least significant bits of x; else if m = 0 then high s x evaluates to the value of x; else m zeros are prepended to the most significant part of x.
val signed :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvsigned s x = cast s (msb x) x is the signed cast of x to sort s.
if m = size s - (size (sort x)) > 0 then extends x on its most significant side with m bits equal to msb x; else if m = 0 then signed s x evaluates to x else it evaluates to size s least significant bits of x.
val unsigned :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvunsigned s x = cast s b0 x is the unsigned cast of x to sort s.
if m = size s - (size (sort x)) > 0 then extends x on its most significant side with m zeros; else if m = 0 then unsigned s x evaluates to x else it evaluates to size s least significant bits of x.
val extract :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
'b Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
_ Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvextract s hi lo x extracts bits of x between hi and lo.
Extracts hi-lo+1 consecutive bits of x from hi to lo, and casts them to sort s with any excessive bits set to zero.
Note that hi-lo+1 is taken modulo 2^'b, so this operation is defined even if lo is greater or equal to hi.
val loadw :
'c Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.bool ->
('a, _) Bap_core_theory.Theory.mem ->
'a Bap_core_theory.Theory.bitv ->
'c Bap_core_theory.Theory.bitvloadw s e m k loads a word from the memory m.
if e evaluates to b1 (big endian case), then the term evaluates to low s (m[k] @ m[k+1] @ ... @ m[k+n] ), else the term evaluates to low s (m[k+n] @ m[k+n-1] @ ... @ m[k] ) where x @ y is append (vals m) x y, and n is the smallest natural number such that n * size (vals (sort m)) >= size s, an m[i] is the i'th value of memory m. .
This is a generic function that loads words using specified endianess (e could be read as is_big_endian) with arbitrary byte size.
val storew :
Bap_core_theory.Theory.bool ->
('a, 'b) Bap_core_theory.Theory.mem ->
'a Bap_core_theory.Theory.bitv ->
'c Bap_core_theory.Theory.bitv ->
('a, 'b) Bap_core_theory.Theory.memstorew e m k x stores a word in the memory m.
Splits the word x into chunks of size equal to the size of memory elements and lays them out in the big endian order, if e evaluates to b1, or little endian order otherwise.
val arshift :
'a Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvarshift x m = shiftr (msb x) m arithmetically shifts x right by m bits.
val rshift :
'a Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvrshift x m = shiftr b0 x m shifts x right by m bits
val lshift :
'a Bap_core_theory.Theory.bitv ->
'b Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitvlshift x y = shiftl b0 x m shifts x left by m bits.
val eq :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.booleq x y holds if x and y are bitwise equal.
val neq :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.booleq x y holds if x and y are not bitwise equal.
val slt :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolslt x y signed strict less than.
val ult :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolult x y unsigned strict less than.
val sgt :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolsgt x y signed strict greater than.
val ugt :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolugt x y unsigned strict greater than.
val sge :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolsge x y signed greater or equal than.
val uge :
'a Bap_core_theory.Theory.bitv ->
'a Bap_core_theory.Theory.bitv ->
Bap_core_theory.Theory.boolsge x y signed greater or equal than.
include Bap_core_theory.Theory.Floatinclude Bap_core_theory.Theory.Fbasicval float :
('r, 's) Bap_core_theory.Theory.format Bap_core_theory.Theory.Float.t
Bap_core_theory.Theory.Value.sort ->
's Bap_core_theory.Theory.bitv ->
('r, 's) Bap_core_theory.Theory.format Bap_core_theory.Theory.floatfloat s x interprets x as a floating point number.
val fbits :
('r, 's) Bap_core_theory.Theory.format Bap_core_theory.Theory.float ->
's Bap_core_theory.Theory.bitvfbits x is a bitvector representation of the floating point number x.
val is_finite : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_finite x holds if x represents a finite number.
A floating point number is finite if it represents a number from the set of real numbers R.
The predicate always holds for formats in which only finite floating point numbers are representable.
val is_nan : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_nan x holds if x represents a not-a-number.
A floating point value is not-a-number if it is neither finite nor infinite number.
The predicated never holds for formats that represent only numbers.
val is_inf : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_inf x holds if x represents an infinite number.
Never holds for formats in which infinite numbers are not representable.
val is_fzero : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_fzero x holds if x represents a zero.
val is_fpos : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_fpos x holds if x represents a positive number.
The denotation is not defined if x represents zero.
val is_fneg : 'f Bap_core_theory.Theory.float -> Bap_core_theory.Theory.boolis_fneg x hold if x represents a negative number.
The denotation is not defined if x represents zero.
Many operations in the Theory of Floating Point numbers are defined using the rounding mode parameter.
The rounding mode gives a precise meaning to the phrase "the closest floating point number to x", where x is a real number. When x is not representable by the given format, some other number x' is selected based on rules of the rounding mode.
val rne : Bap_core_theory.Theory.rmoderounding to nearest, ties to even.
The denotation is the floating point number nearest to the denoted real number. If the two nearest numbers are equally close, then the one with an even least significant digit shall be selected. The denotation is not defined, if both numbers have an even least significant digit.
val rna : Bap_core_theory.Theory.rmoderounding to nearest, ties away.
The denotation is the floating point number nearest to the denoted real number. If the two nearest numbers are equally close, then the one with larger magnitude shall be selected.
val rtp : Bap_core_theory.Theory.rmoderounding towards positive.
The denotation is the floating point number that is nearest but no less than the denoted real number.
val rtn : Bap_core_theory.Theory.rmoderounding towards negative.
The denotation is the floating point number that is nearest but not greater than the denoted real number.
val rtz : Bap_core_theory.Theory.rmoderounding towards zero.
The denotation is the floating point number that is nearest but not greater in magnitude than the denoted real number.
val requal :
Bap_core_theory.Theory.rmode ->
Bap_core_theory.Theory.rmode ->
Bap_core_theory.Theory.boolrequal x y holds if rounding modes are equal.
val cast_float :
'f Bap_core_theory.Theory.Float.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.rmode ->
'a Bap_core_theory.Theory.bitv ->
'f Bap_core_theory.Theory.floatcast_float s m x is the closest to x floating number of sort s.
The bitvector x is interpreted as an unsigned integer in the two-complement form.
val cast_sfloat :
'f Bap_core_theory.Theory.Float.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.rmode ->
'a Bap_core_theory.Theory.bitv ->
'f Bap_core_theory.Theory.floatcast_sfloat s rm x is the closest to x floating point number of sort x.
The bitvector x is interpreted as a signed integer in the two-complement form.
val cast_int :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'a Bap_core_theory.Theory.bitvcast_int s rm x returns an integer closest to x.
The resulting bitvector should be interpreted as an unsigned two-complement integer.
val cast_sint :
'a Bap_core_theory.Theory.Bitv.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'a Bap_core_theory.Theory.bitvcast_sint s rm x returns an integer closest to x.
The resulting bitvector should be interpreted as a signed two-complement integer.
val fneg : 'f Bap_core_theory.Theory.float -> 'f Bap_core_theory.Theory.floatfneg x is -x
val fabs : 'f Bap_core_theory.Theory.float -> 'f Bap_core_theory.Theory.floatfabs x the absolute value of x.
val fadd :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfadd m x y is the floating point number closest to x+y.
val fsub :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfsub m x y is the floating point number closest to x-y.
val fmul :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfmul m x y is the floating point number closest to x*y.
val fdiv :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfdiv m x y is the floating point number closest to x/y.
val fsqrt :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfsqrt m x is the floating point number closest to sqrt x.
The denotation is not defined if
val fmodulo :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfdiv m x y is the floating point number closest to the remainder of x/y.
val fmad :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfmad m x y z is the floating point number closest to x * y + z.
val fround :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfround m x is the floating point number closest to x rounded to an integral, using the rounding mode m.
val fconvert :
'f Bap_core_theory.Theory.Float.t Bap_core_theory.Theory.Value.sort ->
Bap_core_theory.Theory.rmode ->
_ Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatfconvert f r x is the closest to x floating number in format f.
val fsucc : 'f Bap_core_theory.Theory.float -> 'f Bap_core_theory.Theory.floatfsucc m x is the least floating point number representable in (sort x) that is greater than x.
val fpred : 'f Bap_core_theory.Theory.float -> 'f Bap_core_theory.Theory.floatfsucc m x is the greatest floating point number representable in (sort x) that is less than x.
val forder :
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
Bap_core_theory.Theory.boolforder x y holds if floating point number x is less than y.
The denotation is not defined if either of arguments do not represent a floating point number.
val pow :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatpow m b a is a floating point number closest to b^a.
Where b^a is b raised to the power of a.
Values, such as 0^0, as well as 1^infinity and infinity^1 in formats that have a representation for infinity, are not defined.
val compound :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'a Bap_core_theory.Theory.bitv ->
'f Bap_core_theory.Theory.floatcompound m x n is the floating point number closest to (1+x)^n.
Where b^a is b raised to the power of a.
The denotation is not defined if x is less than -1, or if x is n represent zeros, or if x doesn't represent a finite floating point number.
val rootn :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'a Bap_core_theory.Theory.bitv ->
'f Bap_core_theory.Theory.floatrootn m x n is the floating point number closest to x^(1/n).
Where b^a is b raised to the power of a.
The denotation is not defined if:
n is zero;x is zero and n is less than zero;x is not a finite floating point number;val pown :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'a Bap_core_theory.Theory.bitv ->
'f Bap_core_theory.Theory.floatpown m x n is the floating point number closest to x^n.
Where b^a is b raised to the power of a.
The denotation is not defined if x and n both represent zero or if x doesn't represent a finite floating point number.
val rsqrt :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatrsqrt m x is the closest floating point number to 1 / sqrt x.
The denotation is not defined if x is less than or equal to zero or doesn't represent a finite floating point number.
val hypot :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floathypot m x y is the closest floating point number to sqrt(x^2 + y^2).
The denotation is not defined if x or y do not represent finite floating point numbers.
include Bap_core_theory.Theory.Transval exp :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexp m x is the floating point number closes to e^x,
where b^a is b raised to the power of a and e is the base of natural logarithm.
val expm1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexpm1 m x is the floating point number closes to e^x - 1,
where b^a is b raised to the power of a and e is the base of natural logarithm.
val exp2 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexp2 m x is the floating point number closes to 2^x,
where b^a is b raised to the power of a.
val exp2m1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexp2 m x is the floating point number closes to 2^x - 1,
where b^a is b raised to the power of a.
val exp10 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexp10 m x is the floating point number closes to 10^x,
where b^a is b raised to the power of a.
val exp10m1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatexp10m1 m x is the floating point number closes to 10^x - 1,
where b^a is b raised to the power of a.
val log :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlog m x is the floating point number closest to log x.
val log2 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlog2 m x is the floating point number closest to log x / log 2.
val log10 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlog10 m x is the floating point number closest to log x / log 10.
val logp1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlogp1 m x is the floating point number closest to log (1+x).
val log2p1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlogp1 m x is the floating point number closest to log (1+x) / log 2.
val log10p1 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatlogp1 m x is the floating point number closest to log (1+x) / log 10.
val sin :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatsin m x is the floating point number closest to sin x.
val cos :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatcos m x is the floating point number closest to cos x.
val tan :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floattan m x is the floating point number closest to tan x.
val sinpi :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatsinpi m x is the floating point number closest to sin (pi*x).
val cospi :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatcospi m x is the floating point number closest to cos (pi*x).
val atanpi :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatatanpi m y x is the floating point number closest to atan(y/x) / pi.
val atan2pi :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatatanpi m y x is the floating point number closest to atan(y/x) / (2*pi).
val asin :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatasin m x is the floating point number closest to asin x.
val acos :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatacos m x is the floating point number closest to acos x.
val atan :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatatan m x is the floating point number closest to atan x.
val atan2 :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatatan2 m y x is the floating point number closest to atan (y/x).
val sinh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatsinh m x is the floating point number closest to sinh x.
val cosh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatcosh m x is the floating point number closest to cosh x.
val tanh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floattanh m x is the floating point number closest to tanh x.
val asinh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatasinh m x is the floating point number closest to asinh x.
val acosh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatacosh m x is the floating point number closest to acosh x.
val atanh :
Bap_core_theory.Theory.rmode ->
'f Bap_core_theory.Theory.float ->
'f Bap_core_theory.Theory.floatatanh m x is the floating point number closest to atanh x.