{-|
Strongly-typed utilities to aid in automatic verification (e.g. of programs)
using an SMT solver.
This is mainly just a wrapper around "Data.SBV" that allows for inspection and
manipulation of symbolic values, especially variable substitution.
-}
module Language.Verification
(
-- * The verification monad
Verifier
, runVerifier
, runVerifierWith
, VerifierError(..)
-- * The query monad
, Query
, query
-- * Verifiable variables
, VerifiableVar(..)
-- * Verifier actions
, evalProp
, evalProp'
, evalPropSimple
-- * Miscellaneous combinators
, subVar
-- * Expressions
, module Expression
-- * SBV re-exports
, SMTConfig(..)
, defaultSMTCfg
) where
import Data.SBV (SMTConfig (..), defaultSMTCfg)
import Language.Expression as Expression
import Language.Verification.Core