what4-1.6: Solver-agnostic symbolic values support for issuing queries
Copyright(c) Galois Inc 2015-2020
LicenseBSD3
MaintainerRob Dockins <rdockins@galois.com>
Stabilityprovisional
Safe HaskellSafe-Inferred
LanguageHaskell2010

What4.Solver.Z3

Description

Z3-specific tweaks to the basic SMTLib2 solver interface.

Synopsis

Documentation

data Z3 Source #

Constructors

Z3 

Instances

Instances details
Show Z3 Source # 
Instance details

Defined in What4.Solver.Z3

Methods

showsPrec :: Int -> Z3 -> ShowS #

show :: Z3 -> String #

showList :: [Z3] -> ShowS #

SMTLib2GenericSolver Z3 Source # 
Instance details

Defined in What4.Solver.Z3

SMTLib2Tweaks Z3 Source # 
Instance details

Defined in What4.Solver.Z3

OnlineSolver (Writer Z3) Source # 
Instance details

Defined in What4.Solver.Z3

Methods

startSolverProcess :: forall scope (st :: Type -> Type) fs. ProblemFeatures -> Maybe Handle -> ExprBuilder scope st fs -> IO (SolverProcess scope (Writer Z3)) Source #

shutdownSolverProcess :: SolverProcess scope (Writer Z3) -> IO (ExitCode, Text) Source #

z3Timeout :: ConfigOption BaseIntegerType Source #

Per-check timeout, in milliseconds (zero is none)

withZ3 Source #

Arguments

:: ExprBuilder t st fs 
-> FilePath

Path to Z3 executable

-> LogData 
-> (Session t Z3 -> IO a)

Action to run

-> IO a 

Run Z3 in a session. Z3 will be configured to produce models, but otherwise left with the default configuration.

writeZ3SMT2File :: ExprBuilder t st fs -> Handle -> [BoolExpr t] -> IO () Source #

runZ3Horn :: forall sym t st fs. sym ~ ExprBuilder t st fs => sym -> Bool -> LogData -> [SomeSymFn sym] -> [BoolExpr t] -> IO (SatResult (MapF (SymFnWrapper sym) (SymFnWrapper sym)) ()) Source #

Check the satisfiability of a set of constrained Horn clauses (CHCs).

CHCs are represented as pure SMT-LIB2 implications. For more information, see the Z3 guide.

There are two ways to solve the CHCs: either by directly solving the problem as is, or by transforming the problem into a set of linear integer arithmetic (LIA) CHCs and solving that instead. The latter is done by replacing all bitvector (BV) operations with LIA operations, and replacing all BV variables with LIA variables. This transformation is not sound, but in practice it is a useful heuristic. Then the result is transformed back into a BV result, and checked for satisfiability. The satisfiability check is necessary because the transformation is not sound, so LIA solution may not be a solution to the BV CHCs.

writeZ3HornSMT2File :: sym ~ ExprBuilder t st fs => sym -> Bool -> Handle -> [SomeSymFn sym] -> [BoolExpr t] -> IO () Source #