Copyright | (c) Iago Abal, 2012-2014 (c) David Castro, 2012-2013 |
---|---|
License | BSD3 |
Maintainer | Iago Abal <mail@iagoabal.eu>, David Castro <david.castro.dcp@gmail.com> |
Safe Haskell | None |
Language | Haskell98 |
Low-level bindings to Z3 API.
There is (mostly) a one-to-one correspondence with Z3 C API, thus see http://research.microsoft.com/en-us/um/redmond/projects/z3/group__capi.html for further details.
Note that these bindings still focus on the old Z3 3.x API, and will not handle reference counting for you if you decide to use Z3 4.x API functions. Mixing both API is known to cause some segmentation faults!
Supporting Z3 4.x API (and removing support for 3.x) is planned for the 0.4 version of these bindings.
- data Config
- data Context
- data Symbol
- data AST
- data Sort
- data FuncDecl
- data App
- data Pattern
- data Model
- data FuncInterp
- data FuncEntry
- data Params
- data Solver
- data Result
- mkConfig :: IO Config
- delConfig :: Config -> IO ()
- withConfig :: (Config -> IO a) -> IO a
- setParamValue :: Config -> String -> String -> IO ()
- mkContext :: Config -> IO Context
- delContext :: Context -> IO ()
- withContext :: Config -> (Context -> IO a) -> IO a
- contextToString :: Context -> IO String
- showContext :: Context -> IO String
- mkIntSymbol :: Integral int => Context -> int -> IO Symbol
- mkStringSymbol :: Context -> String -> IO Symbol
- mkUninterpretedSort :: Context -> Symbol -> IO Sort
- mkBoolSort :: Context -> IO Sort
- mkIntSort :: Context -> IO Sort
- mkRealSort :: Context -> IO Sort
- mkBvSort :: Context -> Int -> IO Sort
- mkArraySort :: Context -> Sort -> Sort -> IO Sort
- mkTupleSort :: Context -> Symbol -> [(Symbol, Sort)] -> IO (Sort, FuncDecl, [FuncDecl])
- mkFuncDecl :: Context -> Symbol -> [Sort] -> Sort -> IO FuncDecl
- mkApp :: Context -> FuncDecl -> [AST] -> IO AST
- mkConst :: Context -> Symbol -> Sort -> IO AST
- mkTrue :: Context -> IO AST
- mkFalse :: Context -> IO AST
- mkEq :: Context -> AST -> AST -> IO AST
- mkNot :: Context -> AST -> IO AST
- mkIte :: Context -> AST -> AST -> AST -> IO AST
- mkIff :: Context -> AST -> AST -> IO AST
- mkImplies :: Context -> AST -> AST -> IO AST
- mkXor :: Context -> AST -> AST -> IO AST
- mkAnd :: Context -> [AST] -> IO AST
- mkOr :: Context -> [AST] -> IO AST
- mkDistinct :: Context -> [AST] -> IO AST
- mkAdd :: Context -> [AST] -> IO AST
- mkMul :: Context -> [AST] -> IO AST
- mkSub :: Context -> [AST] -> IO AST
- mkUnaryMinus :: Context -> AST -> IO AST
- mkDiv :: Context -> AST -> AST -> IO AST
- mkMod :: Context -> AST -> AST -> IO AST
- mkRem :: Context -> AST -> AST -> IO AST
- mkLt :: Context -> AST -> AST -> IO AST
- mkLe :: Context -> AST -> AST -> IO AST
- mkGt :: Context -> AST -> AST -> IO AST
- mkGe :: Context -> AST -> AST -> IO AST
- mkInt2Real :: Context -> AST -> IO AST
- mkReal2Int :: Context -> AST -> IO AST
- mkIsInt :: Context -> AST -> IO AST
- mkBvnot :: Context -> AST -> IO AST
- mkBvredand :: Context -> AST -> IO AST
- mkBvredor :: Context -> AST -> IO AST
- mkBvand :: Context -> AST -> AST -> IO AST
- mkBvor :: Context -> AST -> AST -> IO AST
- mkBvxor :: Context -> AST -> AST -> IO AST
- mkBvnand :: Context -> AST -> AST -> IO AST
- mkBvnor :: Context -> AST -> AST -> IO AST
- mkBvxnor :: Context -> AST -> AST -> IO AST
- mkBvneg :: Context -> AST -> IO AST
- mkBvadd :: Context -> AST -> AST -> IO AST
- mkBvsub :: Context -> AST -> AST -> IO AST
- mkBvmul :: Context -> AST -> AST -> IO AST
- mkBvudiv :: Context -> AST -> AST -> IO AST
- mkBvsdiv :: Context -> AST -> AST -> IO AST
- mkBvurem :: Context -> AST -> AST -> IO AST
- mkBvsrem :: Context -> AST -> AST -> IO AST
- mkBvsmod :: Context -> AST -> AST -> IO AST
- mkBvult :: Context -> AST -> AST -> IO AST
- mkBvslt :: Context -> AST -> AST -> IO AST
- mkBvule :: Context -> AST -> AST -> IO AST
- mkBvsle :: Context -> AST -> AST -> IO AST
- mkBvuge :: Context -> AST -> AST -> IO AST
- mkBvsge :: Context -> AST -> AST -> IO AST
- mkBvugt :: Context -> AST -> AST -> IO AST
- mkBvsgt :: Context -> AST -> AST -> IO AST
- mkConcat :: Context -> AST -> AST -> IO AST
- mkExtract :: Context -> Int -> Int -> AST -> IO AST
- mkSignExt :: Context -> Int -> AST -> IO AST
- mkZeroExt :: Context -> Int -> AST -> IO AST
- mkRepeat :: Context -> Int -> AST -> IO AST
- mkBvshl :: Context -> AST -> AST -> IO AST
- mkBvlshr :: Context -> AST -> AST -> IO AST
- mkBvashr :: Context -> AST -> AST -> IO AST
- mkRotateLeft :: Context -> Int -> AST -> IO AST
- mkRotateRight :: Context -> Int -> AST -> IO AST
- mkExtRotateLeft :: Context -> AST -> AST -> IO AST
- mkExtRotateRight :: Context -> AST -> AST -> IO AST
- mkInt2bv :: Context -> Int -> AST -> IO AST
- mkBv2int :: Context -> AST -> Bool -> IO AST
- mkBvnegNoOverflow :: Context -> AST -> IO AST
- mkBvaddNoOverflow :: Context -> AST -> AST -> Bool -> IO AST
- mkBvaddNoUnderflow :: Context -> AST -> AST -> IO AST
- mkBvsubNoOverflow :: Context -> AST -> AST -> IO AST
- mkBvsubNoUnderflow :: Context -> AST -> AST -> IO AST
- mkBvmulNoOverflow :: Context -> AST -> AST -> Bool -> IO AST
- mkBvmulNoUnderflow :: Context -> AST -> AST -> IO AST
- mkBvsdivNoOverflow :: Context -> AST -> AST -> IO AST
- mkSelect :: Context -> AST -> AST -> IO AST
- mkStore :: Context -> AST -> AST -> AST -> IO AST
- mkConstArray :: Context -> Sort -> AST -> IO AST
- mkMap :: Context -> FuncDecl -> [AST] -> IO AST
- mkArrayDefault :: Context -> AST -> IO AST
- mkNumeral :: Context -> String -> Sort -> IO AST
- mkInt :: Integral a => Context -> a -> IO AST
- mkReal :: Real r => Context -> r -> IO AST
- mkPattern :: Context -> [AST] -> IO Pattern
- mkBound :: Context -> Int -> Sort -> IO AST
- mkForall :: Context -> [Pattern] -> [Symbol] -> [Sort] -> AST -> IO AST
- mkExists :: Context -> [Pattern] -> [Symbol] -> [Sort] -> AST -> IO AST
- mkForallConst :: Context -> [Pattern] -> [App] -> AST -> IO AST
- mkExistsConst :: Context -> [Pattern] -> [App] -> AST -> IO AST
- getBvSortSize :: Context -> Sort -> IO Int
- getSort :: Context -> AST -> IO Sort
- getBool :: Context -> AST -> IO (Maybe Bool)
- getInt :: Context -> AST -> IO Integer
- getReal :: Context -> AST -> IO Rational
- toApp :: Context -> AST -> IO App
- data FuncModel = FuncModel {
- interpMap :: [([AST], AST)]
- interpElse :: AST
- eval :: Context -> Model -> AST -> IO (Maybe AST)
- evalT :: Traversable t => Context -> Model -> t AST -> IO (Maybe (t AST))
- evalFunc :: Context -> Model -> FuncDecl -> IO (Maybe FuncModel)
- evalArray :: Context -> Model -> AST -> IO (Maybe FuncModel)
- getFuncInterp :: Context -> Model -> FuncDecl -> IO (Maybe FuncInterp)
- isAsArray :: Context -> AST -> IO Bool
- getAsArrayFuncDecl :: Context -> AST -> IO FuncDecl
- funcInterpGetNumEntries :: Context -> FuncInterp -> IO Int
- funcInterpGetEntry :: Context -> FuncInterp -> Int -> IO FuncEntry
- funcInterpGetElse :: Context -> FuncInterp -> IO AST
- funcInterpGetArity :: Context -> FuncInterp -> IO Int
- funcEntryGetValue :: Context -> FuncEntry -> IO AST
- funcEntryGetNumArgs :: Context -> FuncEntry -> IO Int
- funcEntryGetArg :: Context -> FuncEntry -> Int -> IO AST
- modelToString :: Context -> Model -> IO String
- showModel :: Context -> Model -> IO String
- assertCnstr :: Context -> AST -> IO ()
- check :: Context -> IO Result
- checkAndGetModel :: Context -> IO (Result, Maybe Model)
- getModel :: Context -> IO (Result, Maybe Model)
- delModel :: Context -> Model -> IO ()
- push :: Context -> IO ()
- pop :: Context -> Int -> IO ()
- mkParams :: Context -> IO Params
- paramsSetBool :: Context -> Params -> Symbol -> Bool -> IO ()
- paramsSetUInt :: Context -> Params -> Symbol -> Int -> IO ()
- paramsSetDouble :: Context -> Params -> Symbol -> Double -> IO ()
- paramsSetSymbol :: Context -> Params -> Symbol -> Symbol -> IO ()
- paramsToString :: Context -> Params -> IO String
- data Logic
- mkSolver :: Context -> IO Solver
- mkSimpleSolver :: Context -> IO Solver
- mkSolverForLogic :: Context -> Logic -> IO Solver
- solverSetParams :: Context -> Solver -> Params -> IO ()
- solverPush :: Context -> Solver -> IO ()
- solverPop :: Context -> Solver -> Int -> IO ()
- solverReset :: Context -> Solver -> IO ()
- solverGetNumScopes :: Context -> Solver -> IO Int
- solverAssertCnstr :: Context -> Solver -> AST -> IO ()
- solverAssertAndTrack :: Context -> Solver -> AST -> AST -> IO ()
- solverCheck :: Context -> Solver -> IO Result
- solverGetModel :: Context -> Solver -> IO Model
- solverCheckAndGetModel :: Context -> Solver -> IO (Result, Maybe Model)
- solverGetReasonUnknown :: Context -> Solver -> IO String
- solverToString :: Context -> Solver -> IO String
- data ASTPrintMode
- setASTPrintMode :: Context -> ASTPrintMode -> IO ()
- astToString :: Context -> AST -> IO String
- patternToString :: Context -> Pattern -> IO String
- sortToString :: Context -> Sort -> IO String
- funcDeclToString :: Context -> FuncDecl -> IO String
- benchmarkToSMTLibString :: Context -> String -> String -> String -> String -> [AST] -> AST -> IO String
- data Version = Version {}
- getVersion :: IO Version
- data Z3Error = Z3Error {
- errCode :: Z3ErrorCode
- errMsg :: String
- data Z3ErrorCode
Types
A Z3 symbol.
Used to name types, constants and functions.
A Z3 AST node.
This is the data-structure used in Z3 to represent terms, formulas and types.
A kind of AST representing function symbols.
A kind of AST representing constant and function declarations.
A kind of AST representing pattern and multi-patterns to guide quantifier instantiation.
Representation of the value of a Z3_func_interp
at a particular point.
A Z3 parameter set.
Starting at Z3 4.0, parameter sets are used to configure many components such as: simplifiers, tactics, solvers, etc.
A Z3 solver engine.
A(n) (incremental) solver, possibly specialized by a particular tactic or logic.
Satisfiability result
Result of a satisfiability check.
This corresponds to the z3_lbool type in the C API.
Configuration
withConfig :: (Config -> IO a) -> IO a Source
Run a computation using a temporally created configuration.
Note that the configuration object can be thrown away once
it has been used to create the Z3 Context
.
Context
delContext :: Context -> IO () Source
Delete the given logical context.
withContext :: Config -> (Context -> IO a) -> IO a Source
Run a computation using a temporally created context.
contextToString :: Context -> IO String Source
Convert the given logical context into a string.
showContext :: Context -> IO String Source
Deprecated: Use contextToString instead.
Alias for contextToString
.
Symbols
mkIntSymbol :: Integral int => Context -> int -> IO Symbol Source
Create a Z3 symbol using an integer.
mkIntSymbol c i
requires 0 <= i < 2^30
Sorts
mkUninterpretedSort :: Context -> Symbol -> IO Sort Source
Create a free (uninterpreted) type using the given name (symbol).
Two free types are considered the same iff the have the same name.
mkBoolSort :: Context -> IO Sort Source
Create the boolean type.
This type is used to create propositional variables and predicates.
mkIntSort :: Context -> IO Sort Source
Create an integer type.
This is the type of arbitrary precision integers.
A machine integer can be represented using bit-vectors, see mkBvSort
.
mkRealSort :: Context -> IO Sort Source
Create a real type.
This type is not a floating point number. Z3 does not have support for floating point numbers yet.
mkBvSort :: Context -> Int -> IO Sort Source
Create a bit-vector type of the given size.
This type can also be seen as a machine integer.
mkBvSort c sz
requires sz >= 0
mkArraySort :: Context -> Sort -> Sort -> IO Sort Source
Create an array type
We usually represent the array type as: [domain -> range]. Arrays are usually used to model the heap/memory in software verification.
:: Context | Context |
-> Symbol | Name of the sort |
-> [(Symbol, Sort)] | Name and sort of each field |
-> IO (Sort, FuncDecl, [FuncDecl]) | Resulting sort, and function declarations for the constructor and projections. |
Create a tuple type
A tuple with n fields has a constructor and n projections. This function will also declare the constructor and projection functions.
Constants and Applications
:: Context | Logical context. |
-> Symbol | Name of the function (or constant). |
-> [Sort] | Function domain (empty for constants). |
-> Sort | Return sort of the function. |
-> IO FuncDecl |
Declare a constant or function.
mkConst :: Context -> Symbol -> Sort -> IO AST Source
Declare and create a constant.
This is a shorthand for:
do xd <- mkFunDecl c x [] s; mkApp c xd []
mkIte :: Context -> AST -> AST -> AST -> IO AST Source
Create an AST node representing an if-then-else: ite(t1, t2, t3).
mkAnd :: Context -> [AST] -> IO AST Source
Create an AST node representing args[0] and ... and args[num_args-1].
mkOr :: Context -> [AST] -> IO AST Source
Create an AST node representing args[0] or ... or args[num_args-1].
mkDistinct :: Context -> [AST] -> IO AST Source
The distinct construct is used for declaring the arguments pairwise distinct.
That is, and [ args!!i /= args!!j | i <- [0..length(args)-1], j <- [i+1..length(args)-1] ]
mkAdd :: Context -> [AST] -> IO AST Source
Create an AST node representing args[0] + ... + args[num_args-1].
mkMul :: Context -> [AST] -> IO AST Source
Create an AST node representing args[0] * ... * args[num_args-1].
mkSub :: Context -> [AST] -> IO AST Source
Create an AST node representing args[0] - ... - args[num_args - 1].
Bit-vectors
mkBvredand :: Context -> AST -> IO AST Source
Take conjunction of bits in vector, return vector of length 1.
mkBvredor :: Context -> AST -> IO AST Source
Take disjunction of bits in vector, return vector of length 1.
mkBvsrem :: Context -> AST -> AST -> IO AST Source
Two's complement signed remainder (sign follows dividend).
mkBvsmod :: Context -> AST -> AST -> IO AST Source
Two's complement signed remainder (sign follows divisor).
mkExtract :: Context -> Int -> Int -> AST -> IO AST Source
Extract the bits high down to low from a bitvector of size m to yield a new bitvector of size n, where n = high - low + 1.
mkSignExt :: Context -> Int -> AST -> IO AST Source
Sign-extend of the given bit-vector to the (signed) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
mkZeroExt :: Context -> Int -> AST -> IO AST Source
Extend the given bit-vector with zeros to the (unsigned) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
mkInt2bv :: Context -> Int -> AST -> IO AST Source
Create an n bit bit-vector from the integer argument t1.
mkBv2int :: Context -> AST -> Bool -> IO AST Source
Create an integer from the bit-vector argument t1.
If is_signed is false, then the bit-vector t1 is treated as unsigned. So the result is non-negative and in the range [0..2^N-1], where N are the number of bits in t1. If is_signed is true, t1 is treated as a signed bit-vector.
mkBvnegNoOverflow :: Context -> AST -> IO AST Source
Check that bit-wise negation does not overflow when t1 is interpreted as a signed bit-vector.
mkBvaddNoOverflow :: Context -> AST -> AST -> Bool -> IO AST Source
Create a predicate that checks that the bit-wise addition of t1 and t2 does not overflow.
mkBvaddNoUnderflow :: Context -> AST -> AST -> IO AST Source
Create a predicate that checks that the bit-wise signed addition of t1 and t2 does not underflow.
mkBvsubNoOverflow :: Context -> AST -> AST -> IO AST Source
Create a predicate that checks that the bit-wise signed subtraction of t1 and t2 does not overflow.
mkBvsubNoUnderflow :: Context -> AST -> AST -> IO AST Source
Create a predicate that checks that the bit-wise subtraction of t1 and t2 does not underflow.
mkBvmulNoOverflow :: Context -> AST -> AST -> Bool -> IO AST Source
Create a predicate that checks that the bit-wise multiplication of t1 and t2 does not overflow.
mkBvmulNoUnderflow :: Context -> AST -> AST -> IO AST Source
Create a predicate that checks that the bit-wise signed multiplication of t1 and t2 does not underflow.
mkBvsdivNoOverflow :: Context -> AST -> AST -> IO AST Source
Create a predicate that checks that the bit-wise signed division of t1 and t2 does not overflow.
Arrays
Array read. The argument a is the array and i is the index of the array that gets read.
Array update.
The result of this function is an array that is equal to the input array (with respect to select) on all indices except for i, where it maps to v.
The semantics of this function is given by the theory of arrays described in the SMT-LIB standard. See http://smtlib.org for more details.
Create the constant array.
The resulting term is an array, such that a select on an arbitrary index produces the value v.
Map a function f on the the argument arrays.
The n nodes args must be of array sorts [domain -> range_i]. The function declaration f must have type range_1 .. range_n -> range. The sort of the result is [domain -> range].
Access the array default value.
Produces the default range value, for arrays that can be represented as finite maps with a default range value.
Numerals
Quantifiers
Create a pattern for quantifier instantiation.
Z3 uses pattern matching to instantiate quantifiers. If a pattern is not provided for a quantifier, then Z3 will automatically compute a set of patterns for it. However, for optimal performance, the user should provide the patterns.
Patterns comprise a list of terms. The list should be non-empty. If the list comprises of more than one term, it is a called a multi-pattern.
In general, one can pass in a list of (multi-)patterns in the quantifier constructor.
Create a bound variable.
Bound variables are indexed by de-Bruijn indices.
:: Context | |
-> [Pattern] | Instantiation patterns (see |
-> [Symbol] | Bound (quantified) variables xs. |
-> [Sort] | Sorts of the bound variables. |
-> AST | Body of the quantifier. |
-> IO AST |
Create a forall formula.
The bound variables are de-Bruijn indices created using mkBound
.
Z3 applies the convention that the last element in xs refers to the variable with index 0, the second to last element of xs refers to the variable with index 1, etc.
mkExists :: Context -> [Pattern] -> [Symbol] -> [Sort] -> AST -> IO AST Source
Create an exists formula.
Similar to mkForall
.
:: Context | |
-> [Pattern] | Instantiation patterns (see |
-> [App] | Constants to be abstracted into bound variables. |
-> AST | Quantifier body. |
-> IO AST |
Create a universal quantifier using a list of constants that will form the set of bound variables.
:: Context | |
-> [Pattern] | Instantiation patterns (see |
-> [App] | Constants to be abstracted into bound variables. |
-> AST | Quantifier body. |
-> IO AST |
Create a existential quantifier using a list of constants that will form the set of bound variables.
Accessors
getBool :: Context -> AST -> IO (Maybe Bool) Source
Return Z3_L_TRUE if a is true, Z3_L_FALSE if it is false, and Z3_L_UNDEF otherwise.
Models
The interpretation of a function.
Evaluate an AST node in the given model.
The evaluation may fail for the following reasons:
- t contains a quantifier.
- the model m is partial.
- t is type incorrect.
evalT :: Traversable t => Context -> Model -> t AST -> IO (Maybe (t AST)) Source
Evaluate a collection of AST nodes in the given model.
evalFunc :: Context -> Model -> FuncDecl -> IO (Maybe FuncModel) Source
Evaluate a function declaration to a list of argument/value pairs.
evalArray :: Context -> Model -> AST -> IO (Maybe FuncModel) Source
Evaluate an array as a function, if possible.
getFuncInterp :: Context -> Model -> FuncDecl -> IO (Maybe FuncInterp) Source
Return the interpretation of the function f in the model m. Return NULL, if the model does not assign an interpretation for f. That should be interpreted as: the f does not matter.
isAsArray :: Context -> AST -> IO Bool Source
The (_ as-array f) AST node is a construct for assigning interpretations for arrays in Z3. It is the array such that forall indices i we have that (select (_ as-array f) i) is equal to (f i). This procedure returns Z3_TRUE if the a is an as-array AST node.
getAsArrayFuncDecl :: Context -> AST -> IO FuncDecl Source
Return the function declaration f associated with a (_ as_array f) node.
funcInterpGetNumEntries :: Context -> FuncInterp -> IO Int Source
Return the number of entries in the given function interpretation.
funcInterpGetEntry :: Context -> FuncInterp -> Int -> IO FuncEntry Source
Return a _point_ of the given function intepretation. It represents the value of f in a particular point.
funcInterpGetElse :: Context -> FuncInterp -> IO AST Source
Return the 'else' value of the given function interpretation.
funcInterpGetArity :: Context -> FuncInterp -> IO Int Source
Return the arity (number of arguments) of the given function interpretation.
funcEntryGetNumArgs :: Context -> FuncEntry -> IO Int Source
Return the number of arguments in a Z3_func_entry object.
funcEntryGetArg :: Context -> FuncEntry -> Int -> IO AST Source
Return an argument of a Z3_func_entry object.
showModel :: Context -> Model -> IO String Source
Deprecated: Use modelToString instead.
Alias for modelToString
.
Constraints
assertCnstr :: Context -> AST -> IO () Source
Assert a constraing into the logical context.
getModel :: Context -> IO (Result, Maybe Model) Source
Deprecated: Use checkAndGetModel instead.
Check whether the given logical context is consistent or not.
Parameters
mkParams :: Context -> IO Params Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
paramsSetBool :: Context -> Params -> Symbol -> Bool -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
paramsSetUInt :: Context -> Params -> Symbol -> Int -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
paramsSetDouble :: Context -> Params -> Symbol -> Double -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
paramsSetSymbol :: Context -> Params -> Symbol -> Symbol -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
paramsToString :: Context -> Params -> IO String Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
Solvers
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
Solvers available in Z3.
These are described at http://smtlib.cs.uiowa.edu/logics.html
WARNING: Support for solvers is fragile, you may experience segmentation faults!
AUFLIA | Closed formulas over the theory of linear integer arithmetic and arrays extended with free sort and function symbols but restricted to arrays with integer indices and values. |
AUFLIRA | Closed linear formulas with free sort and function symbols over one- and two-dimentional arrays of integer index and real value. |
AUFNIRA | Closed formulas with free function and predicate symbols over a theory of arrays of arrays of integer index and real value. |
LRA | Closed linear formulas in linear real arithmetic. |
QF_ABV | Closed quantifier-free formulas over the theory of bitvectors and bitvector arrays. |
QF_AUFBV | Closed quantifier-free formulas over the theory of bitvectors and bitvector arrays extended with free sort and function symbols. |
QF_AUFLIA | Closed quantifier-free linear formulas over the theory of integer arrays extended with free sort and function symbols. |
QF_AX | Closed quantifier-free formulas over the theory of arrays with extensionality. |
QF_BV | Closed quantifier-free formulas over the theory of fixed-size bitvectors. |
QF_IDL | Difference Logic over the integers. In essence, Boolean combinations of inequations of the form x - y < b where x and y are integer variables and b is an integer constant. |
QF_LIA | Unquantified linear integer arithmetic. In essence, Boolean combinations of inequations between linear polynomials over integer variables. |
QF_LRA | Unquantified linear real arithmetic. In essence, Boolean combinations of inequations between linear polynomials over real variables. |
QF_NIA | Quantifier-free integer arithmetic. |
QF_NRA | Quantifier-free real arithmetic. |
QF_RDL | Difference Logic over the reals. In essence, Boolean combinations of inequations of the form x - y < b where x and y are real variables and b is a rational constant. |
QF_UF | Unquantified formulas built over a signature of uninterpreted (i.e., free) sort and function symbols. |
QF_UFBV | Unquantified formulas over bitvectors with uninterpreted sort function and symbols. |
QF_UFIDL | Difference Logic over the integers (in essence) but with uninterpreted sort and function symbols. |
QF_UFLIA | Unquantified linear integer arithmetic with uninterpreted sort and function symbols. |
QF_UFLRA | Unquantified linear real arithmetic with uninterpreted sort and function symbols. |
QF_UFNRA | Unquantified non-linear real arithmetic with uninterpreted sort and function symbols. |
UFLRA | Linear real arithmetic with uninterpreted sort and function symbols. |
UFNIA | Non-linear integer arithmetic with uninterpreted sort and function symbols. |
mkSolver :: Context -> IO Solver Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
mkSimpleSolver :: Context -> IO Solver Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
mkSolverForLogic :: Context -> Logic -> IO Solver Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverSetParams :: Context -> Solver -> Params -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverPush :: Context -> Solver -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverPop :: Context -> Solver -> Int -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverReset :: Context -> Solver -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverGetNumScopes :: Context -> Solver -> IO Int Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
Number of backtracking points.
solverAssertCnstr :: Context -> Solver -> AST -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverAssertAndTrack :: Context -> Solver -> AST -> AST -> IO () Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverCheck :: Context -> Solver -> IO Result Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
Check whether the assertions in a given solver are consistent or not.
solverCheckAndGetModel :: Context -> Solver -> IO (Result, Maybe Model) Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
solverGetReasonUnknown :: Context -> Solver -> IO String Source
Warning: New Z3 API support is still incomplete and fragile: you may experience segmentation faults!
String Conversion
data ASTPrintMode Source
Pretty-printing mode for converting ASTs to strings. The mode can be one of the following:
- Z3_PRINT_SMTLIB_FULL: Print AST nodes in SMTLIB verbose format.
- Z3_PRINT_LOW_LEVEL: Print AST nodes using a low-level format.
- Z3_PRINT_SMTLIB_COMPLIANT: Print AST nodes in SMTLIB 1.x compliant format.
- Z3_PRINT_SMTLIB2_COMPLIANT: Print AST nodes in SMTLIB 2.x compliant format.
setASTPrintMode :: Context -> ASTPrintMode -> IO () Source
Set the pretty-printing mode for converting ASTs to strings.
benchmarkToSMTLibString Source
:: Context | |
-> String | name |
-> String | logic |
-> String | status |
-> String | attributes |
-> [AST] | assumptions |
-> AST | formula |
-> IO String |
Convert the given benchmark into SMT-LIB formatted string.
The output format can be configured via setASTPrintMode
.
Miscellaneous
getVersion :: IO Version Source
Return Z3 version number information.
Error Handling
Z3 exceptions.
Z3Error | |
|