sig
type location = Errormsg.location
type var = string
type exp =
Int of Int32.t
| UnOp of Logic.unop * Logic.exp
| BinOp of Logic.binop * Logic.exp * Logic.exp
| Fun of string * Logic.exp list
| Var of int
| NVar of Logic.var
| UVar of int
and unop = Mod32 | BNot | RepS32 | RepU32
and binop =
Plus
| Minus
| Times
| Add
| Sub
| Mult
| Div
| BAnd
| BOr
| BXor
| Sll
| Srl
| Sra
| SetEq
| SetNe
| SetGt
| SetGe
| SetLt
| SetLe
| SetAb
| SetAe
| SetBl
| SetBe
| SetPe
| SetPo
| SignExt
type pred =
Bool of bool
| PNez of Logic.exp
| PFun of string * Logic.exp list
| And of Logic.pred list
| Or of Logic.pred list
| Imply of Logic.pred * Logic.pred
| All of string * Logic.pred
| Exist of string * Logic.pred
exception CannotNegate of Logic.pred
val negateExp : Logic.exp -> Logic.exp
val negatePredRaise : Logic.pred -> Logic.pred
val negatePred : Logic.pred -> Logic.pred
val integer : int -> Logic.exp
exception IntegerTooLarge
val to_int : int32 -> int
val newVar : string -> Logic.var
val resetVars : unit -> unit
val varName : string -> string
val isAtomPred : Logic.pred -> bool
val zero : Logic.exp
val one : Logic.exp
val minus : Logic.exp -> Logic.exp -> Logic.exp
val plus : Logic.exp -> Logic.exp -> Logic.exp
val times : Logic.exp -> Logic.exp -> Logic.exp
val eq : Logic.exp -> Logic.exp -> Logic.pred
val ne : Logic.exp -> Logic.exp -> Logic.pred
val geq : Logic.exp -> Logic.exp -> Logic.pred
val leq : Logic.exp -> Logic.exp -> Logic.pred
val gt : Logic.exp -> Logic.exp -> Logic.pred
val lt : Logic.exp -> Logic.exp -> Logic.pred
val makeMap : (int * Logic.exp) list -> Logic.exp
val findMap : Logic.exp -> int -> Logic.exp
val insertMap : Logic.exp -> int -> Logic.exp -> Logic.exp
val substPred :
?depth:int ->
(int -> Logic.exp -> Logic.exp option) -> Logic.pred -> Logic.pred
val substExp :
?depth:int ->
(int -> Logic.exp -> Logic.exp option) -> Logic.exp -> Logic.exp
type soption = Unif | Done of Logic.sexp
and subst = Logic.soption array
and sexp = Logic.exp * Logic.subst
and spred = Logic.pred * Logic.subst
val eunify :
(Logic.subst -> int -> Logic.sexp -> bool) ->
Logic.exp * Logic.subst -> Logic.exp * Logic.subst -> bool
val punify :
(Logic.subst -> int -> Logic.sexp -> bool) ->
Logic.pred * Logic.subst -> Logic.pred * Logic.subst -> bool
val unrollUVars : Logic.subst -> Logic.exp -> Logic.exp
val unrollUVarsRaise : Logic.subst -> Logic.exp -> Logic.exp
val unrollUVarsPredRaise : Logic.subst -> Logic.pred -> Logic.pred
val unrollExp : Logic.sexp -> Logic.sexp
exception HasUVar
val unrollUVarsError : Logic.subst -> Logic.exp -> Logic.exp
val newSubst : int -> Logic.subst
val emptySubst : Logic.subst
val newSubstFromList : Logic.exp list -> Logic.subst
val d_sexp : unit -> Logic.sexp -> Pretty.doc
val d_spred : unit -> Logic.spred -> Pretty.doc
val d_subst : unit -> Logic.subst -> Pretty.doc
val d_sexpNoUnroll : unit -> Logic.sexp -> Pretty.doc
val simplifyArith : Logic.exp -> int option
type 'a visitAction =
SkipChildren
| DoChildren
| ChangeTo of 'a
| ChangeDoChildrenPost of 'a * ('a -> 'a)
class type logicVisitor =
object
method vexp : Logic.exp -> Logic.exp Logic.visitAction
method vpred : Logic.pred -> Logic.pred Logic.visitAction
end
class nopLogicVisitor : logicVisitor
val visitLogicExp : Logic.logicVisitor -> Logic.exp -> Logic.exp
val visitLogicPred : Logic.logicVisitor -> Logic.pred -> Logic.pred
val unop_to_string : Logic.unop -> string
val binop_to_string : Logic.binop -> string
class type logicPrinter =
object
method pExp : Logic.exp -> Pretty.doc option
method pPred : Logic.pred -> Pretty.doc option
end
class defaultLogicPrinterClass : logicPrinter
val defaultLogicPrinter : Logic.logicPrinter
class infixLogicPrinterClass : logicPrinter
val infixLogicPrinter : Logic.logicPrinter
val printExp : Logic.logicPrinter -> Logic.exp -> Pretty.doc
val printPred : Logic.logicPrinter -> Logic.pred -> Pretty.doc
val d_pred : unit -> Logic.pred -> Pretty.doc
val d_exp : unit -> Logic.exp -> Pretty.doc
val d_explist : unit -> Logic.exp list -> Pretty.doc
val d_loc : unit -> Logic.location -> Pretty.doc
class uvarLogicPrinterClass : Logic.subst -> logicPrinter
val renameVariable : Logic.pred -> string -> string -> Logic.pred
end