Imandra_preludemodule Caml : sig ... endmodule Imandra_caml = Camlmodule Unix : sig ... endmodule Sys : sig ... endBuiltin integer type, using arbitrary precision integers.
This type is an alias to Z.t (using Zarith).
NOTE: here Imandra diverges from normal OCaml, where integers width is bounded by native machine integers. "Normal" OCaml integers have type Caml.Int.t and can be entered using the 'i' suffix: 0i
const x y returns x. In other words, const x is the constant function that always returns x.
Euclidian division on integers, see http://smtlib.cs.uiowa.edu/theories-Ints.shtml
module Ordinal : sig ... endWe need to define ordinals before any recursive function is defined, because ordinals are used for termination proofs.
module Peano_nat : sig ... endResult type, representing either a successul result Ok x or an error Error x.
module Result : sig ... endPipeline operator.
x |> f is the same as f x, but it composes nicely: x |> f |> g |> h can be more readable than h(g(f x)).
Right-associative application operator.
f @@ x is the same as f x, but it binds to the right: f @@ g @@ h @@ x is the same as f (g (h x)) but with fewer parentheses.
Mathematical composition operator.
f %> g is fun x -> g (f x)
val (==) : 'a -> 'b -> Caml.use_normal_equalityval (!=) : 'a -> 'b -> Caml.use_normal_equalitymodule List : sig ... endInfix alias to List.append
module Int : sig ... endmodule Bool : sig ... endmodule Array : sig ... endmodule Option : sig ... endmodule Real : sig ... endmodule Map : sig ... endmodule Multiset : sig ... endmodule Set : sig ... endmodule String : sig ... endAlias to String.append
module Float : sig ... endmodule LChar : sig ... endStrings purely in Imandra.
module LString : sig ... endmodule Pervasives : sig ... endmodule Stdlib : sig ... end