Safe Haskell | None |
---|---|
Language | Haskell98 |
- data SMTRequest response where
- SMTSetLogic :: String -> SMTRequest ()
- SMTGetInfo :: SMTInfo i -> SMTRequest i
- SMTSetOption :: SMTOption -> SMTRequest ()
- SMTAssert :: SMTExpr Bool -> Maybe InterpolationGroup -> Maybe ClauseId -> SMTRequest ()
- SMTCheckSat :: Maybe Tactic -> CheckSatLimits -> SMTRequest CheckSatResult
- SMTDeclaredDataTypes :: SMTRequest DataTypeInfo
- SMTDeclareDataTypes :: TypeCollection -> SMTRequest ()
- SMTDeclareSort :: String -> Integer -> SMTRequest ()
- SMTPush :: SMTRequest ()
- SMTPop :: SMTRequest ()
- SMTDefineFun :: (Args arg, SMTType res) => Maybe String -> Proxy arg -> ArgAnnotation arg -> SMTExpr res -> SMTRequest Integer
- SMTDeclareFun :: FunInfo -> SMTRequest Integer
- SMTGetValue :: SMTValue t => SMTExpr t -> SMTRequest t
- SMTGetModel :: SMTRequest SMTModel
- SMTGetProof :: SMTRequest (SMTExpr Bool)
- SMTGetUnsatCore :: SMTRequest [ClauseId]
- SMTSimplify :: SMTType t => SMTExpr t -> SMTRequest (SMTExpr t)
- SMTGetInterpolant :: [InterpolationGroup] -> SMTRequest (SMTExpr Bool)
- SMTInterpolate :: [SMTExpr Bool] -> SMTRequest [SMTExpr Bool]
- SMTComment :: String -> SMTRequest ()
- SMTExit :: SMTRequest ()
- SMTApply :: Tactic -> SMTRequest [SMTExpr Bool]
- SMTNameExpr :: SMTType t => String -> SMTExpr t -> SMTRequest Integer
- SMTNewInterpolationGroup :: SMTRequest InterpolationGroup
- SMTNewClauseId :: SMTRequest ClauseId
- data SMTModel = SMTModel {}
- data CheckSatLimits = CheckSatLimits {}
- data CheckSatResult
- class Monad m => SMTBackend a m where
- smtHandle :: Typeable response => a -> SMTRequest response -> m (response, a)
- smtGetNames :: a -> m (Integer -> String)
- smtNextName :: a -> m (Maybe String -> String)
- class (Ord t, Typeable t, Ord (SMTAnnotation t), Typeable (SMTAnnotation t), Show (SMTAnnotation t)) => SMTType t where
- type SMTAnnotation t
- getSort :: t -> SMTAnnotation t -> Sort
- asDataType :: t -> SMTAnnotation t -> Maybe (String, TypeCollection)
- asValueType :: t -> SMTAnnotation t -> (forall v. SMTValue v => v -> SMTAnnotation v -> r) -> Maybe r
- getProxyArgs :: t -> SMTAnnotation t -> [ProxyArg]
- additionalConstraints :: t -> SMTAnnotation t -> Maybe (SMTExpr t -> [SMTExpr Bool])
- annotationFromSort :: t -> Sort -> SMTAnnotation t
- defaultExpr :: SMTAnnotation t -> SMTExpr t
- data ArgumentSort' a
- = ArgumentSort Integer
- | NormalSort (Sort' a)
- type ArgumentSort = Fix ArgumentSort'
- data Unmangling a
- = PrimitiveUnmangling (Value -> SMTAnnotation a -> Maybe a)
- | ComplexUnmangling (forall m s. Monad m => (forall b. SMTValue b => s -> SMTExpr b -> SMTAnnotation b -> m (b, s)) -> s -> SMTExpr a -> SMTAnnotation a -> m (Maybe a, s))
- data Mangling a
- = PrimitiveMangling (a -> SMTAnnotation a -> Value)
- | ComplexMangling (a -> SMTAnnotation a -> SMTExpr a)
- class (SMTType t, Show t) => SMTValue t where
- unmangle :: Unmangling t
- mangle :: Mangling t
- class (SMTValue t, Num t, SMTAnnotation t ~ ()) => SMTArith t
- class SMTType t => SMTOrd t where
- data SMTArray i v = SMTArray
- data FunInfo = forall arg r . (Args arg, SMTType r) => FunInfo {
- funInfoProxy :: Proxy (arg, r)
- funInfoArgAnn :: ArgAnnotation arg
- funInfoResAnn :: SMTAnnotation r
- funInfoName :: Maybe String
- data AnyBackend m = forall b . SMTBackend b m => AnyBackend b
- data SMT' m a = SMT {
- runSMT :: forall b. SMTBackend b m => b -> m (a, b)
- type SMT = SMT' IO
- smtBackend :: Monad m => (forall b. SMTBackend b m => b -> m (res, b)) -> SMT' m res
- data Untyped = forall t . SMTType t => Untyped t
- data UntypedValue = forall t . SMTValue t => UntypedValue t
- data SMTExpr t where
- Var :: SMTType t => Integer -> SMTAnnotation t -> SMTExpr t
- QVar :: SMTType t => Integer -> Integer -> SMTAnnotation t -> SMTExpr t
- FunArg :: SMTType t => Integer -> SMTAnnotation t -> SMTExpr t
- Const :: SMTValue t => t -> SMTAnnotation t -> SMTExpr t
- AsArray :: (Args arg, SMTType res) => SMTFunction arg res -> ArgAnnotation arg -> SMTExpr (SMTArray arg res)
- Forall :: Integer -> [ProxyArg] -> SMTExpr Bool -> SMTExpr Bool
- Exists :: Integer -> [ProxyArg] -> SMTExpr Bool -> SMTExpr Bool
- Let :: Integer -> [SMTExpr Untyped] -> SMTExpr b -> SMTExpr b
- App :: (Args arg, SMTType res) => SMTFunction arg res -> arg -> SMTExpr res
- Named :: SMTExpr a -> Integer -> SMTExpr a
- InternalObj :: (SMTType t, Typeable a, Ord a, Show a) => a -> SMTAnnotation t -> SMTExpr t
- UntypedExpr :: SMTType t => SMTExpr t -> SMTExpr Untyped
- UntypedExprValue :: SMTValue t => SMTExpr t -> SMTExpr UntypedValue
- data Sort' a
- type Sort = Fix Sort'
- data Value
- data SMTFunction arg res where
- SMTEq :: SMTType a => SMTFunction [SMTExpr a] Bool
- SMTMap :: (Liftable arg, SMTType res, Args i) => SMTFunction arg res -> SMTFunction (Lifted arg i) (SMTArray i res)
- SMTFun :: (Args arg, SMTType res) => Integer -> SMTAnnotation res -> SMTFunction arg res
- SMTBuiltIn :: (Liftable arg, SMTType res) => String -> SMTAnnotation res -> SMTFunction arg res
- SMTOrd :: SMTArith a => SMTOrdOp -> SMTFunction (SMTExpr a, SMTExpr a) Bool
- SMTArith :: SMTArith a => SMTArithOp -> SMTFunction [SMTExpr a] a
- SMTMinus :: SMTArith a => SMTFunction (SMTExpr a, SMTExpr a) a
- SMTIntArith :: SMTIntArithOp -> SMTFunction (SMTExpr Integer, SMTExpr Integer) Integer
- SMTDivide :: SMTFunction (SMTExpr Rational, SMTExpr Rational) Rational
- SMTNeg :: (SMTType a, Num a) => SMTFunction (SMTExpr a) a
- SMTAbs :: (SMTType a, Num a) => SMTFunction (SMTExpr a) a
- SMTNot :: SMTFunction (SMTExpr Bool) Bool
- SMTLogic :: SMTLogicOp -> SMTFunction [SMTExpr Bool] Bool
- SMTDistinct :: SMTType a => SMTFunction [SMTExpr a] Bool
- SMTToReal :: SMTFunction (SMTExpr Integer) Rational
- SMTToInt :: SMTFunction (SMTExpr Rational) Integer
- SMTITE :: SMTType a => SMTFunction (SMTExpr Bool, SMTExpr a, SMTExpr a) a
- SMTBVComp :: IsBitVector a => SMTBVCompOp -> SMTFunction (SMTExpr (BitVector a), SMTExpr (BitVector a)) Bool
- SMTBVBin :: IsBitVector a => SMTBVBinOp -> SMTFunction (SMTExpr (BitVector a), SMTExpr (BitVector a)) (BitVector a)
- SMTBVUn :: IsBitVector a => SMTBVUnOp -> SMTFunction (SMTExpr (BitVector a)) (BitVector a)
- SMTSelect :: (Liftable i, SMTType v) => SMTFunction (SMTExpr (SMTArray i v), i) v
- SMTStore :: (Liftable i, SMTType v) => SMTFunction (SMTExpr (SMTArray i v), i, SMTExpr v) (SMTArray i v)
- SMTConstArray :: (Args i, SMTType v) => ArgAnnotation i -> SMTFunction (SMTExpr v) (SMTArray i v)
- SMTConcat :: Concatable a b => SMTFunction (SMTExpr (BitVector a), SMTExpr (BitVector b)) (BitVector (ConcatResult a b))
- SMTExtract :: (TypeableNat start, TypeableNat len, Extractable from len') => Proxy start -> Proxy len -> SMTFunction (SMTExpr (BitVector from)) (BitVector len')
- SMTConstructor :: (Args arg, SMTType dt) => Constructor arg dt -> SMTFunction arg dt
- SMTConTest :: (Args arg, SMTType dt) => Constructor arg dt -> SMTFunction (SMTExpr dt) Bool
- SMTFieldSel :: (SMTType a, SMTType f) => Field a f -> SMTFunction (SMTExpr a) f
- SMTDivisible :: Integer -> SMTFunction (SMTExpr Integer) Bool
- class SMTValue (BitVector a) => IsBitVector a where
- getBVSize :: Proxy a -> SMTAnnotation (BitVector a) -> Integer
- class (IsBitVector a, IsBitVector b, IsBitVector (ConcatResult a b)) => Concatable a b where
- type ConcatResult a b
- concatAnnotation :: a -> b -> SMTAnnotation (BitVector a) -> SMTAnnotation (BitVector b) -> SMTAnnotation (BitVector (ConcatResult a b))
- class (IsBitVector a, IsBitVector b) => Extractable a b where
- extractAnn :: a -> b -> Integer -> SMTAnnotation (BitVector a) -> SMTAnnotation (BitVector b)
- getExtractLen :: a -> b -> SMTAnnotation (BitVector b) -> Integer
- data Constructor arg res = Constructor [ProxyArg] DataType Constr
- data Field a f = Field [ProxyArg] DataType Constr DataField
- newtype InterpolationGroup = InterpolationGroup Integer
- newtype ClauseId = ClauseId Integer
- data SMTOption
- data SMTInfo i where
- class (Ord a, Typeable a, Show a, Ord (ArgAnnotation a), Typeable (ArgAnnotation a), Show (ArgAnnotation a)) => Args a where
- type ArgAnnotation a
- foldExprs :: Monad m => (forall t. SMTType t => s -> SMTExpr t -> SMTAnnotation t -> m (s, SMTExpr t)) -> s -> a -> ArgAnnotation a -> m (s, a)
- foldsExprs :: Monad m => (forall t. SMTType t => s -> [(SMTExpr t, b)] -> SMTAnnotation t -> m (s, [SMTExpr t], SMTExpr t)) -> s -> [(a, b)] -> ArgAnnotation a -> m (s, [a], a)
- extractArgAnnotation :: a -> ArgAnnotation a
- toArgs :: ArgAnnotation a -> [SMTExpr Untyped] -> Maybe (a, [SMTExpr Untyped])
- fromArgs :: a -> [SMTExpr Untyped]
- getTypes :: a -> ArgAnnotation a -> [ProxyArg]
- getArgAnnotation :: a -> [Sort] -> (ArgAnnotation a, [Sort])
- getSorts :: Args a => a -> ArgAnnotation a -> [Sort]
- foldExprsId :: Args a => (forall t. SMTType t => s -> SMTExpr t -> SMTAnnotation t -> (s, SMTExpr t)) -> s -> a -> ArgAnnotation a -> (s, a)
- foldsExprsId :: Args a => (forall t. SMTType t => s -> [(SMTExpr t, b)] -> SMTAnnotation t -> (s, [SMTExpr t], SMTExpr t)) -> s -> [(a, b)] -> ArgAnnotation a -> (s, [a], a)
- class Args a => Liftable a where
- type Lifted a i
- getLiftedArgumentAnn :: a -> i -> ArgAnnotation a -> ArgAnnotation i -> ArgAnnotation (Lifted a i)
- inferLiftedAnnotation :: a -> i -> ArgAnnotation (Lifted a i) -> (ArgAnnotation i, ArgAnnotation a)
- getConstraint :: Args i => p (a, i) -> Dict (Liftable (Lifted a i))
- argSorts :: Args a => a -> ArgAnnotation a -> [Sort]
- unpackArgs :: Args a => (forall t. SMTType t => SMTExpr t -> SMTAnnotation t -> s -> (c, s)) -> a -> ArgAnnotation a -> s -> ([c], s)
- class Args a => LiftArgs a where
- type Unpacked a
- liftArgs :: Unpacked a -> ArgAnnotation a -> a
- unliftArgs :: Monad m => a -> (forall t. SMTValue t => SMTExpr t -> m t) -> m (Unpacked a)
- firstJust :: [Maybe a] -> Maybe a
- getUndef :: SMTExpr t -> t
- getFunUndef :: SMTFunction arg res -> (arg, res)
- getArrayUndef :: Args i => SMTExpr (SMTArray i v) -> (i, Unpacked i, v)
- withSMTBackendExitCleanly :: SMTBackend b IO => b -> SMT a -> IO a
- withSMTBackend :: SMTBackend a m => a -> SMT' m b -> m b
- withSMTBackend' :: SMTBackend a m => a -> Bool -> SMT' m b -> m b
- funInfoSort :: FunInfo -> Sort
- funInfoArgSorts :: FunInfo -> [Sort]
- argsSignature :: Args a => a -> ArgAnnotation a -> [Sort]
- argumentSortToSort :: Monad m => (Integer -> m Sort) -> ArgumentSort -> m Sort
- sortToArgumentSort :: Sort -> ArgumentSort
- declareType :: (Monad m, SMTType t) => t -> SMTAnnotation t -> SMT' m ()
- data DataTypeInfo = DataTypeInfo {
- structures :: [TypeCollection]
- datatypes :: Map String (DataType, TypeCollection)
- constructors :: Map String (Constr, DataType, TypeCollection)
- fields :: Map String (DataField, Constr, DataType, TypeCollection)
- data TypeCollection = TypeCollection {}
- data ProxyArg = forall t . SMTType t => ProxyArg t (SMTAnnotation t)
- data ProxyArgValue = forall t . SMTValue t => ProxyArgValue t (SMTAnnotation t)
- withProxyArg :: ProxyArg -> (forall t. SMTType t => t -> SMTAnnotation t -> a) -> a
- withProxyArgValue :: ProxyArgValue -> (forall t. SMTValue t => t -> SMTAnnotation t -> a) -> a
- data AnyValue = forall t . SMTType t => AnyValue [ProxyArg] t (SMTAnnotation t)
- withAnyValue :: AnyValue -> (forall t. SMTType t => [ProxyArg] -> t -> SMTAnnotation t -> a) -> a
- castAnyValue :: SMTType t => AnyValue -> Maybe (t, SMTAnnotation t)
- data DataType = DataType {
- dataTypeName :: String
- dataTypeConstructors :: [Constr]
- dataTypeGetUndefined :: forall r. [ProxyArg] -> (forall t. SMTType t => t -> SMTAnnotation t -> r) -> r
- data Constr = Constr {
- conName :: String
- conFields :: [DataField]
- construct :: forall r. [Maybe ProxyArg] -> [AnyValue] -> (forall t. SMTType t => [ProxyArg] -> t -> SMTAnnotation t -> r) -> r
- conUndefinedArgs :: forall r. [ProxyArg] -> (forall arg. Args arg => arg -> ArgAnnotation arg -> r) -> r
- conTest :: forall t. SMTType t => [ProxyArg] -> t -> Bool
- data DataField = DataField {
- fieldName :: String
- fieldSort :: ArgumentSort
- fieldGet :: forall r t. SMTType t => [ProxyArg] -> t -> (forall f. SMTType f => f -> SMTAnnotation f -> r) -> r
- emptyDataTypeInfo :: DataTypeInfo
- containsTypeCollection :: TypeCollection -> DataTypeInfo -> Bool
- addDataTypeStructure :: TypeCollection -> DataTypeInfo -> DataTypeInfo
- getNewTypeCollections :: SMTType t => Proxy t -> SMTAnnotation t -> DataTypeInfo -> ([TypeCollection], DataTypeInfo)
- asNamedSort :: Sort -> Maybe (String, [Sort])
- escapeName :: Either (String, Integer) Integer -> String
- escapeName' :: String -> String
- unescapeName :: String -> Maybe (Either (String, Integer) Integer)
- unescapeName' :: String -> Maybe (String, Integer)
- data SMTState = SMTState {}
- emptySMTState :: SMTState
- smtStateAddFun :: FunInfo -> SMTState -> (Integer, String, SMTState)
- data Z = Z
- data S a = S
- class Typeable a => TypeableNat a where
- reflectNat :: Proxy a -> Integer -> Integer
- type family Add n1 n2
- data BVUntyped = BVUntyped
- data BVTyped n = BVTyped
- reifyNat :: (Num a, Ord a) => a -> (forall n. TypeableNat n => Proxy n -> r) -> r
- reifySum :: (Num a, Ord a) => a -> a -> (forall n1 n2. (TypeableNat n1, TypeableNat n2, TypeableNat (Add n1 n2)) => Proxy n1 -> Proxy n2 -> Proxy (Add n1 n2) -> r) -> r
- reifyExtract :: (Num a, Ord a) => a -> a -> a -> (forall n1 n2 n3 n4. (TypeableNat n1, TypeableNat n2, TypeableNat n3, TypeableNat n4, Add n4 n2 ~ S n3) => Proxy n1 -> Proxy n2 -> Proxy n3 -> Proxy n4 -> r) -> r
- data BitVector b = BitVector Integer
- type N0 = Z
- type N1 = S N0
- type N2 = S N1
- type N3 = S N2
- type N4 = S N3
- type N5 = S N4
- type N6 = S N5
- type N7 = S N6
- type N8 = S N7
- type N9 = S N8
- type N10 = S N9
- type N11 = S N10
- type N12 = S N11
- type N13 = S N12
- type N14 = S N13
- type N15 = S N14
- type N16 = S N15
- type N17 = S N16
- type N18 = S N17
- type N19 = S N18
- type N20 = S N19
- type N21 = S N20
- type N22 = S N21
- type N23 = S N22
- type N24 = S N23
- type N25 = S N24
- type N26 = S N25
- type N27 = S N26
- type N28 = S N27
- type N29 = S N28
- type N30 = S N29
- type N31 = S N30
- type N32 = S N31
- type N33 = S N32
- type N34 = S N33
- type N35 = S N34
- type N36 = S N35
- type N37 = S N36
- type N38 = S N37
- type N39 = S N38
- type N40 = S N39
- type N41 = S N40
- type N42 = S N41
- type N43 = S N42
- type N44 = S N43
- type N45 = S N44
- type N46 = S N45
- type N47 = S N46
- type N48 = S N47
- type N49 = S N48
- type N50 = S N49
- type N51 = S N50
- type N52 = S N51
- type N53 = S N52
- type N54 = S N53
- type N55 = S N54
- type N56 = S N55
- type N57 = S N56
- type N58 = S N57
- type N59 = S N58
- type N60 = S N59
- type N61 = S N60
- type N62 = S N61
- type N63 = S N62
- type N64 = S N63
- type BV8 = BitVector (BVTyped N8)
- type BV16 = BitVector (BVTyped N16)
- type BV32 = BitVector (BVTyped N32)
- type BV64 = BitVector (BVTyped N64)
- newtype Bound = Bound Integer
- showExpr :: Int -> SMTExpr t -> ShowS
- noLimits :: CheckSatLimits
- newtype Quantified = Quantified Integer
- quantificationLevel :: SMTExpr t -> Integer
- inferSorts :: ArgumentSort -> Sort -> Map Integer Sort -> Map Integer Sort
- valueSort :: DataTypeInfo -> Value -> Sort
Documentation
data SMTRequest response where Source
data CheckSatLimits Source
Describe limits on the ressources that an SMT-solver can use
data CheckSatResult Source
The result of a check-sat query
class Monad m => SMTBackend a m where Source
smtHandle :: Typeable response => a -> SMTRequest response -> m (response, a) Source
smtGetNames :: a -> m (Integer -> String) Source
smtNextName :: a -> m (Maybe String -> String) Source
MonadIO m => SMTBackend SMTPipe m Source | |
Monad m => SMTBackend (AnyBackend m) m Source |
class (Ord t, Typeable t, Ord (SMTAnnotation t), Typeable (SMTAnnotation t), Show (SMTAnnotation t)) => SMTType t where Source
Haskell types which can be represented in SMT
type SMTAnnotation t Source
getSort :: t -> SMTAnnotation t -> Sort Source
asDataType :: t -> SMTAnnotation t -> Maybe (String, TypeCollection) Source
asValueType :: t -> SMTAnnotation t -> (forall v. SMTValue v => v -> SMTAnnotation v -> r) -> Maybe r Source
getProxyArgs :: t -> SMTAnnotation t -> [ProxyArg] Source
additionalConstraints :: t -> SMTAnnotation t -> Maybe (SMTExpr t -> [SMTExpr Bool]) Source
annotationFromSort :: t -> Sort -> SMTAnnotation t Source
defaultExpr :: SMTAnnotation t -> SMTExpr t Source
data ArgumentSort' a Source
type ArgumentSort = Fix ArgumentSort' Source
data Unmangling a Source
PrimitiveUnmangling (Value -> SMTAnnotation a -> Maybe a) | |
ComplexUnmangling (forall m s. Monad m => (forall b. SMTValue b => s -> SMTExpr b -> SMTAnnotation b -> m (b, s)) -> s -> SMTExpr a -> SMTAnnotation a -> m (Maybe a, s)) |
PrimitiveMangling (a -> SMTAnnotation a -> Value) | |
ComplexMangling (a -> SMTAnnotation a -> SMTExpr a) |
class (SMTType t, Show t) => SMTValue t where Source
Haskell values which can be represented as SMT constants
class (SMTValue t, Num t, SMTAnnotation t ~ ()) => SMTArith t Source
A type class for all types which support arithmetic operations in SMT
An array which maps indices of type i to elements of type v.
Eq (SMTArray i v) Source | |
Ord (SMTArray i v) Source | |
type SMTAnnotation (SMTArray idx val) = (ArgAnnotation idx, SMTAnnotation val) Source |
forall arg r . (Args arg, SMTType r) => FunInfo | |
|
data AnyBackend m Source
forall b . SMTBackend b m => AnyBackend b |
Monad m => SMTBackend (AnyBackend m) m Source |
The SMT monad used for communating with the SMT solver
SMT | |
|
smtBackend :: Monad m => (forall b. SMTBackend b m => b -> m (res, b)) -> SMT' m res Source
data UntypedValue Source
forall t . SMTValue t => UntypedValue t |
An abstract SMT expression
Var :: SMTType t => Integer -> SMTAnnotation t -> SMTExpr t | |
QVar :: SMTType t => Integer -> Integer -> SMTAnnotation t -> SMTExpr t | |
FunArg :: SMTType t => Integer -> SMTAnnotation t -> SMTExpr t | |
Const :: SMTValue t => t -> SMTAnnotation t -> SMTExpr t | |
AsArray :: (Args arg, SMTType res) => SMTFunction arg res -> ArgAnnotation arg -> SMTExpr (SMTArray arg res) | |
Forall :: Integer -> [ProxyArg] -> SMTExpr Bool -> SMTExpr Bool | |
Exists :: Integer -> [ProxyArg] -> SMTExpr Bool -> SMTExpr Bool | |
Let :: Integer -> [SMTExpr Untyped] -> SMTExpr b -> SMTExpr b | |
App :: (Args arg, SMTType res) => SMTFunction arg res -> arg -> SMTExpr res | |
Named :: SMTExpr a -> Integer -> SMTExpr a | |
InternalObj :: (SMTType t, Typeable a, Ord a, Show a) => a -> SMTAnnotation t -> SMTExpr t | |
UntypedExpr :: SMTType t => SMTExpr t -> SMTExpr Untyped | |
UntypedExprValue :: SMTValue t => SMTExpr t -> SMTExpr UntypedValue |
data SMTFunction arg res where Source
Show (SMTFunction arg res) Source |
class SMTValue (BitVector a) => IsBitVector a where Source
class (IsBitVector a, IsBitVector b, IsBitVector (ConcatResult a b)) => Concatable a b where Source
type ConcatResult a b Source
concatAnnotation :: a -> b -> SMTAnnotation (BitVector a) -> SMTAnnotation (BitVector b) -> SMTAnnotation (BitVector (ConcatResult a b)) Source
class (IsBitVector a, IsBitVector b) => Extractable a b where Source
extractAnn :: a -> b -> Integer -> SMTAnnotation (BitVector a) -> SMTAnnotation (BitVector b) Source
getExtractLen :: a -> b -> SMTAnnotation (BitVector b) -> Integer Source
data Constructor arg res Source
Represents a constructor of a datatype a Can be obtained by using the template haskell extension module
Show (Constructor arg res) Source |
Represents a field of the datatype a of the type f
newtype InterpolationGroup Source
Identifies a clause in an unsatisfiable core
Options controling the behaviour of the SMT solver
PrintSuccess Bool | Whether or not to print "success" after each operation |
ProduceModels Bool | Produce a satisfying assignment after each successful checkSat |
ProduceProofs Bool | Produce a proof of unsatisfiability after each failed checkSat |
ProduceUnsatCores Bool | Enable the querying of unsatisfiable cores after a failed checkSat |
ProduceInterpolants Bool | Enable the generation of craig interpolants |
class (Ord a, Typeable a, Show a, Ord (ArgAnnotation a), Typeable (ArgAnnotation a), Show (ArgAnnotation a)) => Args a where Source
Instances of this class may be used as arguments for constructed functions and quantifiers.
type ArgAnnotation a Source
foldExprs :: Monad m => (forall t. SMTType t => s -> SMTExpr t -> SMTAnnotation t -> m (s, SMTExpr t)) -> s -> a -> ArgAnnotation a -> m (s, a) Source
foldsExprs :: Monad m => (forall t. SMTType t => s -> [(SMTExpr t, b)] -> SMTAnnotation t -> m (s, [SMTExpr t], SMTExpr t)) -> s -> [(a, b)] -> ArgAnnotation a -> m (s, [a], a) Source
extractArgAnnotation :: a -> ArgAnnotation a Source
toArgs :: ArgAnnotation a -> [SMTExpr Untyped] -> Maybe (a, [SMTExpr Untyped]) Source
fromArgs :: a -> [SMTExpr Untyped] Source
getTypes :: a -> ArgAnnotation a -> [ProxyArg] Source
getArgAnnotation :: a -> [Sort] -> (ArgAnnotation a, [Sort]) Source
getSorts :: Args a => a -> ArgAnnotation a -> [Sort] Source
foldExprsId :: Args a => (forall t. SMTType t => s -> SMTExpr t -> SMTAnnotation t -> (s, SMTExpr t)) -> s -> a -> ArgAnnotation a -> (s, a) Source
foldsExprsId :: Args a => (forall t. SMTType t => s -> [(SMTExpr t, b)] -> SMTAnnotation t -> (s, [SMTExpr t], SMTExpr t)) -> s -> [(a, b)] -> ArgAnnotation a -> (s, [a], a) Source
class Args a => Liftable a where Source
getLiftedArgumentAnn :: a -> i -> ArgAnnotation a -> ArgAnnotation i -> ArgAnnotation (Lifted a i) Source
inferLiftedAnnotation :: a -> i -> ArgAnnotation (Lifted a i) -> (ArgAnnotation i, ArgAnnotation a) Source
getConstraint :: Args i => p (a, i) -> Dict (Liftable (Lifted a i)) Source
argSorts :: Args a => a -> ArgAnnotation a -> [Sort] Source
unpackArgs :: Args a => (forall t. SMTType t => SMTExpr t -> SMTAnnotation t -> s -> (c, s)) -> a -> ArgAnnotation a -> s -> ([c], s) Source
class Args a => LiftArgs a where Source
An extension of the Args
class: Instances of this class can be represented as native haskell data types.
liftArgs :: Unpacked a -> ArgAnnotation a -> a Source
Converts a haskell value into its SMT representation.
unliftArgs :: Monad m => a -> (forall t. SMTValue t => SMTExpr t -> m t) -> m (Unpacked a) Source
Converts a SMT representation back into a haskell value.
getFunUndef :: SMTFunction arg res -> (arg, res) Source
withSMTBackendExitCleanly :: SMTBackend b IO => b -> SMT a -> IO a Source
withSMTBackend :: SMTBackend a m => a -> SMT' m b -> m b Source
withSMTBackend' :: SMTBackend a m => a -> Bool -> SMT' m b -> m b Source
funInfoSort :: FunInfo -> Sort Source
funInfoArgSorts :: FunInfo -> [Sort] Source
argsSignature :: Args a => a -> ArgAnnotation a -> [Sort] Source
argumentSortToSort :: Monad m => (Integer -> m Sort) -> ArgumentSort -> m Sort Source
declareType :: (Monad m, SMTType t) => t -> SMTAnnotation t -> SMT' m () Source
data DataTypeInfo Source
DataTypeInfo | |
|
forall t . SMTType t => ProxyArg t (SMTAnnotation t) |
data ProxyArgValue Source
forall t . SMTValue t => ProxyArgValue t (SMTAnnotation t) |
withProxyArg :: ProxyArg -> (forall t. SMTType t => t -> SMTAnnotation t -> a) -> a Source
withProxyArgValue :: ProxyArgValue -> (forall t. SMTValue t => t -> SMTAnnotation t -> a) -> a Source
withAnyValue :: AnyValue -> (forall t. SMTType t => [ProxyArg] -> t -> SMTAnnotation t -> a) -> a Source
castAnyValue :: SMTType t => AnyValue -> Maybe (t, SMTAnnotation t) Source
DataType | |
|
Constr | |
|
DataField | |
|
getNewTypeCollections :: SMTType t => Proxy t -> SMTAnnotation t -> DataTypeInfo -> ([TypeCollection], DataTypeInfo) Source
Get all the type collections which are not yet declared from a type.
escapeName' :: String -> String Source
TypeableNat n => TypeableNat (S n) Source | |
type Add (S n1) n2 = S (Add n1 n2) Source |
class Typeable a => TypeableNat a where Source
reflectNat :: Proxy a -> Integer -> Integer Source
TypeableNat Z Source | |
TypeableNat n => TypeableNat (S n) Source |
Eq (BVTyped n) Source | |
Ord (BVTyped n) Source | |
Show (BVTyped n) Source | |
type ConcatResult BVUntyped (BVTyped n2) = BVUntyped Source | |
type SMTAnnotation (BitVector (BVTyped n)) = () Source | |
type ConcatResult (BVTyped n1) BVUntyped = BVUntyped Source | |
type ConcatResult (BVTyped n1) (BVTyped n2) = BVTyped (Add n1 n2) Source |
reifySum :: (Num a, Ord a) => a -> a -> (forall n1 n2. (TypeableNat n1, TypeableNat n2, TypeableNat (Add n1 n2)) => Proxy n1 -> Proxy n2 -> Proxy (Add n1 n2) -> r) -> r Source
reifyExtract :: (Num a, Ord a) => a -> a -> a -> (forall n1 n2 n3 n4. (TypeableNat n1, TypeableNat n2, TypeableNat n3, TypeableNat n4, Add n4 n2 ~ S n3) => Proxy n1 -> Proxy n2 -> Proxy n3 -> Proxy n4 -> r) -> r Source
newtype Quantified Source
quantificationLevel :: SMTExpr t -> Integer Source
inferSorts :: ArgumentSort -> Sort -> Map Integer Sort -> Map Integer Sort Source
valueSort :: DataTypeInfo -> Value -> Sort Source