{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# OPTIONS_GHC -Wall -Werror #-}
module Data.SBV.Client.BaseIO where
import Data.SBV.Core.Data (Kind, Outputtable, Penalty,
SymVal, SBool, SBV, SChar, SDouble, SFloat, SWord, SInt,
SFPHalf, SFPBFloat, SFPSingle, SFPDouble, SFPQuad, SFloatingPoint,
SInt8, SInt16, SInt32, SInt64, SInteger, SList,
SReal, SString, SV, SWord8, SWord16, SWord32,
SWord64, SEither, SRational, SMaybe, SSet, SArray, constrain, (.==))
import Data.SBV.Core.Kind (BVIsNonZero, ValidFloat)
import Data.SBV.Core.Model (Metric(..), SymTuple)
import Data.SBV.Core.Symbolic (Objective, OptimizeStyle, Result, VarContext, Symbolic, SBVRunMode, SMTConfig,
SVal, symbolicEnv, rPartitionVars, State(..))
import Data.SBV.Control.Types (SMTOption)
import Data.SBV.Provers.Prover (Provable, Satisfiable, SExecutable, ThmResult)
import Data.SBV.SMT.SMT (AllSatResult, SafeResult, SatResult, OptimizeResult)
import GHC.TypeLits (KnownNat)
import Data.IORef(readIORef, writeIORef)
import qualified Data.SBV.Core.Data as Trans
import qualified Data.SBV.Core.Model as Trans
import qualified Data.SBV.Core.Symbolic as Trans
import qualified Data.SBV.Provers.Prover as Trans
import Control.Monad.Trans (liftIO)
prove :: Provable a => a -> IO ThmResult
prove :: forall a. Provable a => a -> IO ThmResult
prove = a -> IO ThmResult
forall (m :: * -> *) a. ProvableM m a => a -> m ThmResult
Trans.prove
proveWith :: Provable a => SMTConfig -> a -> IO ThmResult
proveWith :: forall a. Provable a => SMTConfig -> a -> IO ThmResult
proveWith = SMTConfig -> a -> IO ThmResult
forall (m :: * -> *) a.
ProvableM m a =>
SMTConfig -> a -> m ThmResult
Trans.proveWith
dprove :: Provable a => a -> IO ThmResult
dprove :: forall a. Provable a => a -> IO ThmResult
dprove = a -> IO ThmResult
forall (m :: * -> *) a. ProvableM m a => a -> m ThmResult
Trans.dprove
dproveWith :: Provable a => SMTConfig -> a -> IO ThmResult
dproveWith :: forall a. Provable a => SMTConfig -> a -> IO ThmResult
dproveWith = SMTConfig -> a -> IO ThmResult
forall (m :: * -> *) a.
ProvableM m a =>
SMTConfig -> a -> m ThmResult
Trans.dproveWith
sat :: Satisfiable a => a -> IO SatResult
sat :: forall a. Satisfiable a => a -> IO SatResult
sat = a -> IO SatResult
forall (m :: * -> *) a. SatisfiableM m a => a -> m SatResult
Trans.sat
satWith :: Satisfiable a => SMTConfig -> a -> IO SatResult
satWith :: forall a. Satisfiable a => SMTConfig -> a -> IO SatResult
satWith = SMTConfig -> a -> IO SatResult
forall (m :: * -> *) a.
SatisfiableM m a =>
SMTConfig -> a -> m SatResult
Trans.satWith
dsat :: Satisfiable a => a -> IO SatResult
dsat :: forall a. Satisfiable a => a -> IO SatResult
dsat = a -> IO SatResult
forall (m :: * -> *) a. SatisfiableM m a => a -> m SatResult
Trans.dsat
dsatWith :: Satisfiable a => SMTConfig -> a -> IO SatResult
dsatWith :: forall a. Satisfiable a => SMTConfig -> a -> IO SatResult
dsatWith = SMTConfig -> a -> IO SatResult
forall (m :: * -> *) a.
SatisfiableM m a =>
SMTConfig -> a -> m SatResult
Trans.dsatWith
allSat :: Satisfiable a => a -> IO AllSatResult
allSat :: forall a. Satisfiable a => a -> IO AllSatResult
allSat = a -> IO AllSatResult
forall (m :: * -> *) a. SatisfiableM m a => a -> m AllSatResult
Trans.allSat
allSatWith :: Satisfiable a => SMTConfig -> a -> IO AllSatResult
allSatWith :: forall a. Satisfiable a => SMTConfig -> a -> IO AllSatResult
allSatWith = SMTConfig -> a -> IO AllSatResult
forall (m :: * -> *) a.
SatisfiableM m a =>
SMTConfig -> a -> m AllSatResult
Trans.allSatWith
optimize :: Satisfiable a => OptimizeStyle -> a -> IO OptimizeResult
optimize :: forall a. Satisfiable a => OptimizeStyle -> a -> IO OptimizeResult
optimize = OptimizeStyle -> a -> IO OptimizeResult
forall (m :: * -> *) a.
SatisfiableM m a =>
OptimizeStyle -> a -> m OptimizeResult
Trans.optimize
optimizeWith :: Satisfiable a => SMTConfig -> OptimizeStyle -> a -> IO OptimizeResult
optimizeWith :: forall a.
Satisfiable a =>
SMTConfig -> OptimizeStyle -> a -> IO OptimizeResult
optimizeWith = SMTConfig -> OptimizeStyle -> a -> IO OptimizeResult
forall (m :: * -> *) a.
SatisfiableM m a =>
SMTConfig -> OptimizeStyle -> a -> m OptimizeResult
Trans.optimizeWith
isVacuousProof :: Provable a => a -> IO Bool
isVacuousProof :: forall a. Provable a => a -> IO Bool
isVacuousProof = a -> IO Bool
forall (m :: * -> *) a. ProvableM m a => a -> m Bool
Trans.isVacuousProof
isVacuousProofWith :: Provable a => SMTConfig -> a -> IO Bool
isVacuousProofWith :: forall a. Provable a => SMTConfig -> a -> IO Bool
isVacuousProofWith = SMTConfig -> a -> IO Bool
forall (m :: * -> *) a. ProvableM m a => SMTConfig -> a -> m Bool
Trans.isVacuousProofWith
isTheorem :: Provable a => a -> IO Bool
isTheorem :: forall a. Provable a => a -> IO Bool
isTheorem = a -> IO Bool
forall (m :: * -> *) a. ProvableM m a => a -> m Bool
Trans.isTheorem
isTheoremWith :: Provable a => SMTConfig -> a -> IO Bool
isTheoremWith :: forall a. Provable a => SMTConfig -> a -> IO Bool
isTheoremWith = SMTConfig -> a -> IO Bool
forall (m :: * -> *) a. ProvableM m a => SMTConfig -> a -> m Bool
Trans.isTheoremWith
isSatisfiable :: Satisfiable a => a -> IO Bool
isSatisfiable :: forall a. Satisfiable a => a -> IO Bool
isSatisfiable = a -> IO Bool
forall (m :: * -> *) a. SatisfiableM m a => a -> m Bool
Trans.isSatisfiable
isSatisfiableWith :: Satisfiable a => SMTConfig -> a -> IO Bool
isSatisfiableWith :: forall a. Satisfiable a => SMTConfig -> a -> IO Bool
isSatisfiableWith = SMTConfig -> a -> IO Bool
forall (m :: * -> *) a.
SatisfiableM m a =>
SMTConfig -> a -> m Bool
Trans.isSatisfiableWith
runSMT :: Symbolic a -> IO a
runSMT :: forall a. Symbolic a -> IO a
runSMT = SymbolicT IO a -> IO a
forall (m :: * -> *) a. MonadIO m => SymbolicT m a -> m a
Trans.runSMT
runSMTWith :: SMTConfig -> Symbolic a -> IO a
runSMTWith :: forall a. SMTConfig -> Symbolic a -> IO a
runSMTWith = SMTConfig -> SymbolicT IO a -> IO a
forall (m :: * -> *) a.
MonadIO m =>
SMTConfig -> SymbolicT m a -> m a
Trans.runSMTWith
sName :: SExecutable IO a => a -> Symbolic ()
sName :: forall a. SExecutable IO a => a -> Symbolic ()
sName = a -> Symbolic ()
forall (m :: * -> *) a. SExecutable m a => a -> SymbolicT m ()
Trans.sName
safe :: SExecutable IO a => a -> IO [SafeResult]
safe :: forall a. SExecutable IO a => a -> IO [SafeResult]
safe = a -> IO [SafeResult]
forall (m :: * -> *) a. SExecutable m a => a -> m [SafeResult]
Trans.safe
safeWith :: SExecutable IO a => SMTConfig -> a -> IO [SafeResult]
safeWith :: forall a. SExecutable IO a => SMTConfig -> a -> IO [SafeResult]
safeWith = SMTConfig -> a -> IO [SafeResult]
forall (m :: * -> *) a.
SExecutable m a =>
SMTConfig -> a -> m [SafeResult]
Trans.safeWith
mkSymSBV :: VarContext -> Kind -> Maybe String -> Symbolic (SBV a)
mkSymSBV :: forall a. VarContext -> Kind -> Maybe String -> Symbolic (SBV a)
mkSymSBV = VarContext -> Kind -> Maybe String -> SymbolicT IO (SBV a)
forall a (m :: * -> *).
MonadSymbolic m =>
VarContext -> Kind -> Maybe String -> m (SBV a)
Trans.mkSymSBV
sbvToSymSV :: SBV a -> Symbolic SV
sbvToSymSV :: forall a. SBV a -> Symbolic SV
sbvToSymSV = SBV a -> Symbolic SV
forall (m :: * -> *) a. MonadSymbolic m => SBV a -> m SV
Trans.sbvToSymSV
output :: Outputtable a => a -> Symbolic a
output :: forall a. Outputtable a => a -> Symbolic a
output = a -> SymbolicT IO a
forall a (m :: * -> *).
(Outputtable a, MonadSymbolic m) =>
a -> m a
forall (m :: * -> *). MonadSymbolic m => a -> m a
Trans.output
allSatPartition :: SymVal a => String -> SBV a -> Symbolic ()
allSatPartition :: forall a. SymVal a => String -> SBV a -> Symbolic ()
allSatPartition String
nm SBV a
term = do
State{IORef [String]
rPartitionVars :: State -> IORef [String]
rPartitionVars :: IORef [String]
rPartitionVars} <- SymbolicT IO State
forall (m :: * -> *). MonadSymbolic m => m State
symbolicEnv
String
fresh <- IO String -> SymbolicT IO String
forall a. IO a -> SymbolicT IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> SymbolicT IO String)
-> IO String -> SymbolicT IO String
forall a b. (a -> b) -> a -> b
$ do [String]
olds <- IORef [String] -> IO [String]
forall a. IORef a -> IO a
readIORef IORef [String]
rPartitionVars
let new :: String
new = case (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [String]
olds) (String
nm String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String
nm String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i | Int
i <- [(Int
1 :: Int) ..]]) of
String
h:[String]
_ -> String
h
[] -> String -> String
forall a. HasCallStack => String -> a
error (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
"Impossible: Can't get a fresh variable from infinite list in partition." String -> String -> String
forall a. [a] -> [a] -> [a]
++ (String, SBV a) -> String
forall a. Show a => a -> String
show (String
nm, SBV a
term)
IORef [String] -> [String] -> IO ()
forall a. IORef a -> a -> IO ()
writeIORef IORef [String]
rPartitionVars ([String]
olds [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
new])
String -> IO String
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
new
SBV a
v <- String -> Symbolic (SBV a)
forall a. SymVal a => String -> Symbolic (SBV a)
free String
fresh
SBool -> Symbolic ()
forall a. QuantifiedBool a => a -> Symbolic ()
forall (m :: * -> *) a.
(SolverContext m, QuantifiedBool a) =>
a -> m ()
constrain (SBool -> Symbolic ()) -> SBool -> Symbolic ()
forall a b. (a -> b) -> a -> b
$ SBV a
v SBV a -> SBV a -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV a
term
free :: SymVal a => String -> Symbolic (SBV a)
free :: forall a. SymVal a => String -> Symbolic (SBV a)
free = String -> SymbolicT IO (SBV a)
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
String -> m (SBV a)
forall (m :: * -> *). MonadSymbolic m => String -> m (SBV a)
Trans.free
free_ :: SymVal a => Symbolic (SBV a)
free_ :: forall a. SymVal a => Symbolic (SBV a)
free_ = SymbolicT IO (SBV a)
forall a (m :: * -> *). (SymVal a, MonadSymbolic m) => m (SBV a)
forall (m :: * -> *). MonadSymbolic m => m (SBV a)
Trans.free_
mkFreeVars :: SymVal a => Int -> Symbolic [SBV a]
mkFreeVars :: forall a. SymVal a => Int -> Symbolic [SBV a]
mkFreeVars = Int -> SymbolicT IO [SBV a]
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
Int -> m [SBV a]
forall (m :: * -> *). MonadSymbolic m => Int -> m [SBV a]
Trans.mkFreeVars
symbolic :: SymVal a => String -> Symbolic (SBV a)
symbolic :: forall a. SymVal a => String -> Symbolic (SBV a)
symbolic = String -> SymbolicT IO (SBV a)
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
String -> m (SBV a)
forall (m :: * -> *). MonadSymbolic m => String -> m (SBV a)
Trans.symbolic
symbolics :: SymVal a => [String] -> Symbolic [SBV a]
symbolics :: forall a. SymVal a => [String] -> Symbolic [SBV a]
symbolics = [String] -> SymbolicT IO [SBV a]
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
[String] -> m [SBV a]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SBV a]
Trans.symbolics
mkSymVal :: SymVal a => VarContext -> Maybe String -> Symbolic (SBV a)
mkSymVal :: forall a.
SymVal a =>
VarContext -> Maybe String -> Symbolic (SBV a)
mkSymVal = VarContext -> Maybe String -> SymbolicT IO (SBV a)
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
VarContext -> Maybe String -> m (SBV a)
forall (m :: * -> *).
MonadSymbolic m =>
VarContext -> Maybe String -> m (SBV a)
Trans.mkSymVal
genMkSymVar :: Kind -> VarContext -> Maybe String -> Symbolic (SBV a)
genMkSymVar :: forall a. Kind -> VarContext -> Maybe String -> Symbolic (SBV a)
genMkSymVar = Kind -> VarContext -> Maybe String -> SymbolicT IO (SBV a)
forall (m :: * -> *) a.
MonadSymbolic m =>
Kind -> VarContext -> Maybe String -> m (SBV a)
Trans.genMkSymVar
sBool :: String -> Symbolic SBool
sBool :: String -> Symbolic SBool
sBool = String -> Symbolic SBool
forall (m :: * -> *). MonadSymbolic m => String -> m SBool
Trans.sBool
sBool_ :: Symbolic SBool
sBool_ :: Symbolic SBool
sBool_ = Symbolic SBool
forall (m :: * -> *). MonadSymbolic m => m SBool
Trans.sBool_
sBools :: [String] -> Symbolic [SBool]
sBools :: [String] -> Symbolic [SBool]
sBools = [String] -> Symbolic [SBool]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SBool]
Trans.sBools
sWord8 :: String -> Symbolic SWord8
sWord8 :: String -> Symbolic SWord8
sWord8 = String -> Symbolic SWord8
forall (m :: * -> *). MonadSymbolic m => String -> m SWord8
Trans.sWord8
sWord8_ :: Symbolic SWord8
sWord8_ :: Symbolic SWord8
sWord8_ = Symbolic SWord8
forall (m :: * -> *). MonadSymbolic m => m SWord8
Trans.sWord8_
sWord8s :: [String] -> Symbolic [SWord8]
sWord8s :: [String] -> Symbolic [SWord8]
sWord8s = [String] -> Symbolic [SWord8]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SWord8]
Trans.sWord8s
sWord16 :: String -> Symbolic SWord16
sWord16 :: String -> Symbolic SWord16
sWord16 = String -> Symbolic SWord16
forall (m :: * -> *). MonadSymbolic m => String -> m SWord16
Trans.sWord16
sWord16_ :: Symbolic SWord16
sWord16_ :: Symbolic SWord16
sWord16_ = Symbolic SWord16
forall (m :: * -> *). MonadSymbolic m => m SWord16
Trans.sWord16_
sWord16s :: [String] -> Symbolic [SWord16]
sWord16s :: [String] -> Symbolic [SWord16]
sWord16s = [String] -> Symbolic [SWord16]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SWord16]
Trans.sWord16s
sWord32 :: String -> Symbolic SWord32
sWord32 :: String -> Symbolic SWord32
sWord32 = String -> Symbolic SWord32
forall (m :: * -> *). MonadSymbolic m => String -> m SWord32
Trans.sWord32
sWord32_ :: Symbolic SWord32
sWord32_ :: Symbolic SWord32
sWord32_ = Symbolic SWord32
forall (m :: * -> *). MonadSymbolic m => m SWord32
Trans.sWord32_
sWord32s :: [String] -> Symbolic [SWord32]
sWord32s :: [String] -> Symbolic [SWord32]
sWord32s = [String] -> Symbolic [SWord32]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SWord32]
Trans.sWord32s
sWord64 :: String -> Symbolic SWord64
sWord64 :: String -> Symbolic SWord64
sWord64 = String -> Symbolic SWord64
forall (m :: * -> *). MonadSymbolic m => String -> m SWord64
Trans.sWord64
sWord64_ :: Symbolic SWord64
sWord64_ :: Symbolic SWord64
sWord64_ = Symbolic SWord64
forall (m :: * -> *). MonadSymbolic m => m SWord64
Trans.sWord64_
sWord64s :: [String] -> Symbolic [SWord64]
sWord64s :: [String] -> Symbolic [SWord64]
sWord64s = [String] -> Symbolic [SWord64]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SWord64]
Trans.sWord64s
sWord :: (KnownNat n, BVIsNonZero n) => String -> Symbolic (SWord n)
sWord :: forall (n :: Nat).
(KnownNat n, BVIsNonZero n) =>
String -> Symbolic (SWord n)
sWord = String -> SymbolicT IO (SWord n)
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
String -> m (SWord n)
Trans.sWord
sWord_ :: (KnownNat n, BVIsNonZero n) => Symbolic (SWord n)
sWord_ :: forall (n :: Nat).
(KnownNat n, BVIsNonZero n) =>
Symbolic (SWord n)
sWord_ = SymbolicT IO (SWord n)
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
m (SWord n)
Trans.sWord_
sWords :: (KnownNat n, BVIsNonZero n) => [String] -> Symbolic [SWord n]
sWords :: forall (n :: Nat).
(KnownNat n, BVIsNonZero n) =>
[String] -> Symbolic [SWord n]
sWords = [String] -> SymbolicT IO [SWord n]
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
[String] -> m [SWord n]
Trans.sWords
sInt8 :: String -> Symbolic SInt8
sInt8 :: String -> Symbolic SInt8
sInt8 = String -> Symbolic SInt8
forall (m :: * -> *). MonadSymbolic m => String -> m SInt8
Trans.sInt8
sInt8_ :: Symbolic SInt8
sInt8_ :: Symbolic SInt8
sInt8_ = Symbolic SInt8
forall (m :: * -> *). MonadSymbolic m => m SInt8
Trans.sInt8_
sInt8s :: [String] -> Symbolic [SInt8]
sInt8s :: [String] -> Symbolic [SInt8]
sInt8s = [String] -> Symbolic [SInt8]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SInt8]
Trans.sInt8s
sInt16 :: String -> Symbolic SInt16
sInt16 :: String -> Symbolic SInt16
sInt16 = String -> Symbolic SInt16
forall (m :: * -> *). MonadSymbolic m => String -> m SInt16
Trans.sInt16
sInt16_ :: Symbolic SInt16
sInt16_ :: Symbolic SInt16
sInt16_ = Symbolic SInt16
forall (m :: * -> *). MonadSymbolic m => m SInt16
Trans.sInt16_
sInt16s :: [String] -> Symbolic [SInt16]
sInt16s :: [String] -> Symbolic [SInt16]
sInt16s = [String] -> Symbolic [SInt16]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SInt16]
Trans.sInt16s
sInt32 :: String -> Symbolic SInt32
sInt32 :: String -> Symbolic SInt32
sInt32 = String -> Symbolic SInt32
forall (m :: * -> *). MonadSymbolic m => String -> m SInt32
Trans.sInt32
sInt32_ :: Symbolic SInt32
sInt32_ :: Symbolic SInt32
sInt32_ = Symbolic SInt32
forall (m :: * -> *). MonadSymbolic m => m SInt32
Trans.sInt32_
sInt32s :: [String] -> Symbolic [SInt32]
sInt32s :: [String] -> Symbolic [SInt32]
sInt32s = [String] -> Symbolic [SInt32]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SInt32]
Trans.sInt32s
sInt64 :: String -> Symbolic SInt64
sInt64 :: String -> Symbolic SInt64
sInt64 = String -> Symbolic SInt64
forall (m :: * -> *). MonadSymbolic m => String -> m SInt64
Trans.sInt64
sInt64_ :: Symbolic SInt64
sInt64_ :: Symbolic SInt64
sInt64_ = Symbolic SInt64
forall (m :: * -> *). MonadSymbolic m => m SInt64
Trans.sInt64_
sInt64s :: [String] -> Symbolic [SInt64]
sInt64s :: [String] -> Symbolic [SInt64]
sInt64s = [String] -> Symbolic [SInt64]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SInt64]
Trans.sInt64s
sInt :: (KnownNat n, BVIsNonZero n) => String -> Symbolic (SInt n)
sInt :: forall (n :: Nat).
(KnownNat n, BVIsNonZero n) =>
String -> Symbolic (SInt n)
sInt = String -> SymbolicT IO (SInt n)
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
String -> m (SInt n)
Trans.sInt
sInt_ :: (KnownNat n, BVIsNonZero n) => Symbolic (SInt n)
sInt_ :: forall (n :: Nat). (KnownNat n, BVIsNonZero n) => Symbolic (SInt n)
sInt_ = SymbolicT IO (SInt n)
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
m (SInt n)
Trans.sInt_
sInts :: (KnownNat n, BVIsNonZero n) => [String] -> Symbolic [SInt n]
sInts :: forall (n :: Nat).
(KnownNat n, BVIsNonZero n) =>
[String] -> Symbolic [SInt n]
sInts = [String] -> SymbolicT IO [SInt n]
forall (n :: Nat) (m :: * -> *).
(KnownNat n, BVIsNonZero n, MonadSymbolic m) =>
[String] -> m [SInt n]
Trans.sInts
sInteger :: String -> Symbolic SInteger
sInteger :: String -> Symbolic SInteger
sInteger = String -> Symbolic SInteger
forall (m :: * -> *). MonadSymbolic m => String -> m SInteger
Trans.sInteger
sInteger_ :: Symbolic SInteger
sInteger_ :: Symbolic SInteger
sInteger_ = Symbolic SInteger
forall (m :: * -> *). MonadSymbolic m => m SInteger
Trans.sInteger_
sIntegers :: [String] -> Symbolic [SInteger]
sIntegers :: [String] -> Symbolic [SInteger]
sIntegers = [String] -> Symbolic [SInteger]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SInteger]
Trans.sIntegers
sReal :: String -> Symbolic SReal
sReal :: String -> Symbolic SReal
sReal = String -> Symbolic SReal
forall (m :: * -> *). MonadSymbolic m => String -> m SReal
Trans.sReal
sReal_ :: Symbolic SReal
sReal_ :: Symbolic SReal
sReal_ = Symbolic SReal
forall (m :: * -> *). MonadSymbolic m => m SReal
Trans.sReal_
sReals :: [String] -> Symbolic [SReal]
sReals :: [String] -> Symbolic [SReal]
sReals = [String] -> Symbolic [SReal]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SReal]
Trans.sReals
sFloat :: String -> Symbolic SFloat
sFloat :: String -> Symbolic SFloat
sFloat = String -> Symbolic SFloat
forall (m :: * -> *). MonadSymbolic m => String -> m SFloat
Trans.sFloat
sFloat_ :: Symbolic SFloat
sFloat_ :: Symbolic SFloat
sFloat_ = Symbolic SFloat
forall (m :: * -> *). MonadSymbolic m => m SFloat
Trans.sFloat_
sFloats :: [String] -> Symbolic [SFloat]
sFloats :: [String] -> Symbolic [SFloat]
sFloats = [String] -> Symbolic [SFloat]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SFloat]
Trans.sFloats
sDouble :: String -> Symbolic SDouble
sDouble :: String -> Symbolic SDouble
sDouble = String -> Symbolic SDouble
forall (m :: * -> *). MonadSymbolic m => String -> m SDouble
Trans.sDouble
sDouble_ :: Symbolic SDouble
sDouble_ :: Symbolic SDouble
sDouble_ = Symbolic SDouble
forall (m :: * -> *). MonadSymbolic m => m SDouble
Trans.sDouble_
sDoubles :: [String] -> Symbolic [SDouble]
sDoubles :: [String] -> Symbolic [SDouble]
sDoubles = [String] -> Symbolic [SDouble]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SDouble]
Trans.sDoubles
sFloatingPoint :: ValidFloat eb sb => String -> Symbolic (SFloatingPoint eb sb)
sFloatingPoint :: forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
String -> Symbolic (SFloatingPoint eb sb)
sFloatingPoint = String -> Symbolic (SFloatingPoint eb sb)
forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
String -> Symbolic (SFloatingPoint eb sb)
Trans.sFloatingPoint
sFloatingPoint_ :: ValidFloat eb sb => Symbolic (SFloatingPoint eb sb)
sFloatingPoint_ :: forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
Symbolic (SFloatingPoint eb sb)
sFloatingPoint_ = Symbolic (SFloatingPoint eb sb)
forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
Symbolic (SFloatingPoint eb sb)
Trans.sFloatingPoint_
sFloatingPoints :: ValidFloat eb sb => [String] -> Symbolic [SFloatingPoint eb sb]
sFloatingPoints :: forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
[String] -> Symbolic [SFloatingPoint eb sb]
sFloatingPoints = [String] -> Symbolic [SFloatingPoint eb sb]
forall (eb :: Nat) (sb :: Nat).
ValidFloat eb sb =>
[String] -> Symbolic [SFloatingPoint eb sb]
Trans.sFloatingPoints
sFPHalf :: String -> Symbolic SFPHalf
sFPHalf :: String -> Symbolic SFPHalf
sFPHalf = String -> Symbolic SFPHalf
Trans.sFPHalf
sFPHalf_ :: Symbolic SFPHalf
sFPHalf_ :: Symbolic SFPHalf
sFPHalf_ = Symbolic SFPHalf
Trans.sFPHalf_
sFPHalfs :: [String] -> Symbolic [SFPHalf]
sFPHalfs :: [String] -> Symbolic [SFPHalf]
sFPHalfs = [String] -> Symbolic [SFPHalf]
Trans.sFPHalfs
sFPBFloat :: String -> Symbolic SFPBFloat
sFPBFloat :: String -> Symbolic SFPBFloat
sFPBFloat = String -> Symbolic SFPBFloat
Trans.sFPBFloat
sFPBFloat_ :: Symbolic SFPBFloat
sFPBFloat_ :: Symbolic SFPBFloat
sFPBFloat_ = Symbolic SFPBFloat
Trans.sFPBFloat_
sFPBFloats :: [String] -> Symbolic [SFPBFloat]
sFPBFloats :: [String] -> Symbolic [SFPBFloat]
sFPBFloats = [String] -> Symbolic [SFPBFloat]
Trans.sFPBFloats
sFPSingle :: String -> Symbolic SFPSingle
sFPSingle :: String -> Symbolic SFPSingle
sFPSingle = String -> Symbolic SFPSingle
Trans.sFPSingle
sFPSingle_ :: Symbolic SFPSingle
sFPSingle_ :: Symbolic SFPSingle
sFPSingle_ = Symbolic SFPSingle
Trans.sFPSingle_
sFPSingles :: [String] -> Symbolic [SFPSingle]
sFPSingles :: [String] -> Symbolic [SFPSingle]
sFPSingles = [String] -> Symbolic [SFPSingle]
Trans.sFPSingles
sFPDouble :: String -> Symbolic SFPDouble
sFPDouble :: String -> Symbolic SFPDouble
sFPDouble = String -> Symbolic SFPDouble
Trans.sFPDouble
sFPDouble_ :: Symbolic SFPDouble
sFPDouble_ :: Symbolic SFPDouble
sFPDouble_ = Symbolic SFPDouble
Trans.sFPDouble_
sFPDoubles :: [String] -> Symbolic [SFPDouble]
sFPDoubles :: [String] -> Symbolic [SFPDouble]
sFPDoubles = [String] -> Symbolic [SFPDouble]
Trans.sFPDoubles
sFPQuad :: String -> Symbolic SFPQuad
sFPQuad :: String -> Symbolic SFPQuad
sFPQuad = String -> Symbolic SFPQuad
Trans.sFPQuad
sFPQuad_ :: Symbolic SFPQuad
sFPQuad_ :: Symbolic SFPQuad
sFPQuad_ = Symbolic SFPQuad
Trans.sFPQuad_
sFPQuads :: [String] -> Symbolic [SFPQuad]
sFPQuads :: [String] -> Symbolic [SFPQuad]
sFPQuads = [String] -> Symbolic [SFPQuad]
Trans.sFPQuads
sChar :: String -> Symbolic SChar
sChar :: String -> Symbolic SChar
sChar = String -> Symbolic SChar
forall (m :: * -> *). MonadSymbolic m => String -> m SChar
Trans.sChar
sChar_ :: Symbolic SChar
sChar_ :: Symbolic SChar
sChar_ = Symbolic SChar
forall (m :: * -> *). MonadSymbolic m => m SChar
Trans.sChar_
sChars :: [String] -> Symbolic [SChar]
sChars :: [String] -> Symbolic [SChar]
sChars = [String] -> Symbolic [SChar]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SChar]
Trans.sChars
sString :: String -> Symbolic SString
sString :: String -> Symbolic SString
sString = String -> Symbolic SString
forall (m :: * -> *). MonadSymbolic m => String -> m SString
Trans.sString
sString_ :: Symbolic SString
sString_ :: Symbolic SString
sString_ = Symbolic SString
forall (m :: * -> *). MonadSymbolic m => m SString
Trans.sString_
sStrings :: [String] -> Symbolic [SString]
sStrings :: [String] -> Symbolic [SString]
sStrings = [String] -> Symbolic [SString]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SString]
Trans.sStrings
sList :: SymVal a => String -> Symbolic (SList a)
sList :: forall a. SymVal a => String -> Symbolic (SList a)
sList = String -> SymbolicT IO (SList a)
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
String -> m (SList a)
Trans.sList
sList_ :: SymVal a => Symbolic (SList a)
sList_ :: forall a. SymVal a => Symbolic (SList a)
sList_ = SymbolicT IO (SList a)
forall a (m :: * -> *). (SymVal a, MonadSymbolic m) => m (SList a)
Trans.sList_
sLists :: SymVal a => [String] -> Symbolic [SList a]
sLists :: forall a. SymVal a => [String] -> Symbolic [SList a]
sLists = [String] -> SymbolicT IO [SList a]
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
[String] -> m [SList a]
Trans.sLists
sTuple :: (SymTuple tup, SymVal tup) => String -> Symbolic (SBV tup)
sTuple :: forall tup.
(SymTuple tup, SymVal tup) =>
String -> Symbolic (SBV tup)
sTuple = String -> SymbolicT IO (SBV tup)
forall tup (m :: * -> *).
(SymTuple tup, SymVal tup, MonadSymbolic m) =>
String -> m (SBV tup)
Trans.sTuple
sTuple_ :: (SymTuple tup, SymVal tup) => Symbolic (SBV tup)
sTuple_ :: forall tup. (SymTuple tup, SymVal tup) => Symbolic (SBV tup)
sTuple_ = SymbolicT IO (SBV tup)
forall tup (m :: * -> *).
(SymTuple tup, SymVal tup, MonadSymbolic m) =>
m (SBV tup)
Trans.sTuple_
sTuples :: (SymTuple tup, SymVal tup) => [String] -> Symbolic [SBV tup]
sTuples :: forall tup.
(SymTuple tup, SymVal tup) =>
[String] -> Symbolic [SBV tup]
sTuples = [String] -> SymbolicT IO [SBV tup]
forall tup (m :: * -> *).
(SymTuple tup, SymVal tup, MonadSymbolic m) =>
[String] -> m [SBV tup]
Trans.sTuples
sEither :: (SymVal a, SymVal b) => String -> Symbolic (SEither a b)
sEither :: forall a b.
(SymVal a, SymVal b) =>
String -> Symbolic (SEither a b)
sEither = String -> SymbolicT IO (SEither a b)
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
String -> m (SEither a b)
Trans.sEither
sEither_ :: (SymVal a, SymVal b) => Symbolic (SEither a b)
sEither_ :: forall a b. (SymVal a, SymVal b) => Symbolic (SEither a b)
sEither_ = SymbolicT IO (SEither a b)
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
m (SEither a b)
Trans.sEither_
sEithers :: (SymVal a, SymVal b) => [String] -> Symbolic [SEither a b]
sEithers :: forall a b.
(SymVal a, SymVal b) =>
[String] -> Symbolic [SEither a b]
sEithers = [String] -> SymbolicT IO [SEither a b]
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
[String] -> m [SEither a b]
Trans.sEithers
sRational :: String -> Symbolic SRational
sRational :: String -> Symbolic SRational
sRational = String -> Symbolic SRational
forall (m :: * -> *). MonadSymbolic m => String -> m SRational
Trans.sRational
sRational_ :: Symbolic SRational
sRational_ :: Symbolic SRational
sRational_ = Symbolic SRational
forall (m :: * -> *). MonadSymbolic m => m SRational
Trans.sRational_
sRationals :: [String] -> Symbolic [SRational]
sRationals :: [String] -> Symbolic [SRational]
sRationals = [String] -> Symbolic [SRational]
forall (m :: * -> *). MonadSymbolic m => [String] -> m [SRational]
Trans.sRationals
sMaybe :: SymVal a => String -> Symbolic (SMaybe a)
sMaybe :: forall a. SymVal a => String -> Symbolic (SMaybe a)
sMaybe = String -> SymbolicT IO (SMaybe a)
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
String -> m (SMaybe a)
Trans.sMaybe
sMaybe_ :: SymVal a => Symbolic (SMaybe a)
sMaybe_ :: forall a. SymVal a => Symbolic (SMaybe a)
sMaybe_ = SymbolicT IO (SMaybe a)
forall a (m :: * -> *). (SymVal a, MonadSymbolic m) => m (SMaybe a)
Trans.sMaybe_
sMaybes :: SymVal a => [String] -> Symbolic [SMaybe a]
sMaybes :: forall a. SymVal a => [String] -> Symbolic [SMaybe a]
sMaybes = [String] -> SymbolicT IO [SMaybe a]
forall a (m :: * -> *).
(SymVal a, MonadSymbolic m) =>
[String] -> m [SMaybe a]
Trans.sMaybes
sSet :: (Ord a, SymVal a) => String -> Symbolic (SSet a)
sSet :: forall a. (Ord a, SymVal a) => String -> Symbolic (SSet a)
sSet = String -> SymbolicT IO (SSet a)
forall a (m :: * -> *).
(Ord a, SymVal a, MonadSymbolic m) =>
String -> m (SSet a)
Trans.sSet
sSet_ :: (Ord a, SymVal a) => Symbolic (SSet a)
sSet_ :: forall a. (Ord a, SymVal a) => Symbolic (SSet a)
sSet_ = SymbolicT IO (SSet a)
forall a (m :: * -> *).
(Ord a, SymVal a, MonadSymbolic m) =>
m (SSet a)
Trans.sSet_
sSets :: (Ord a, SymVal a) => [String] -> Symbolic [SSet a]
sSets :: forall a. (Ord a, SymVal a) => [String] -> Symbolic [SSet a]
sSets = [String] -> SymbolicT IO [SSet a]
forall a (m :: * -> *).
(Ord a, SymVal a, MonadSymbolic m) =>
[String] -> m [SSet a]
Trans.sSets
sArray :: (SymVal a, SymVal b) => String -> Symbolic (SArray a b)
sArray :: forall a b. (SymVal a, SymVal b) => String -> Symbolic (SArray a b)
sArray = String -> SymbolicT IO (SArray a b)
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
String -> m (SArray a b)
Trans.sArray
sArray_ :: (SymVal a, SymVal b) => Symbolic (SArray a b)
sArray_ :: forall a b. (SymVal a, SymVal b) => Symbolic (SArray a b)
sArray_ = SymbolicT IO (SArray a b)
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
m (SArray a b)
Trans.sArray_
sArrays :: (SymVal a, SymVal b) => [String] -> Symbolic [SArray a b]
sArrays :: forall a b.
(SymVal a, SymVal b) =>
[String] -> Symbolic [SArray a b]
sArrays = [String] -> SymbolicT IO [SArray a b]
forall a b (m :: * -> *).
(SymVal a, SymVal b, MonadSymbolic m) =>
[String] -> m [SArray a b]
Trans.sArrays
solve :: [SBool] -> Symbolic SBool
solve :: [SBool] -> Symbolic SBool
solve = [SBool] -> Symbolic SBool
forall (m :: * -> *). MonadSymbolic m => [SBool] -> m SBool
Trans.solve
assertWithPenalty :: String -> SBool -> Penalty -> Symbolic ()
assertWithPenalty :: String -> SBool -> Penalty -> Symbolic ()
assertWithPenalty = String -> SBool -> Penalty -> Symbolic ()
forall (m :: * -> *).
MonadSymbolic m =>
String -> SBool -> Penalty -> m ()
Trans.assertWithPenalty
minimize :: Metric a => String -> SBV a -> Symbolic ()
minimize :: forall a. Metric a => String -> SBV a -> Symbolic ()
minimize = String -> SBV a -> Symbolic ()
forall a (m :: * -> *).
(Metric a, MonadSymbolic m, SolverContext m) =>
String -> SBV a -> m ()
Trans.minimize
maximize :: Metric a => String -> SBV a -> Symbolic ()
maximize :: forall a. Metric a => String -> SBV a -> Symbolic ()
maximize = String -> SBV a -> Symbolic ()
forall a (m :: * -> *).
(Metric a, MonadSymbolic m, SolverContext m) =>
String -> SBV a -> m ()
Trans.maximize
svToSymSV :: SVal -> Symbolic SV
svToSymSV :: SVal -> Symbolic SV
svToSymSV = SVal -> Symbolic SV
forall (m :: * -> *). MonadSymbolic m => SVal -> m SV
Trans.svToSymSV
runSymbolic :: SMTConfig -> SBVRunMode -> Symbolic a -> IO (a, Result)
runSymbolic :: forall a. SMTConfig -> SBVRunMode -> Symbolic a -> IO (a, Result)
runSymbolic = SMTConfig -> SBVRunMode -> SymbolicT IO a -> IO (a, Result)
forall (m :: * -> *) a.
MonadIO m =>
SMTConfig -> SBVRunMode -> SymbolicT m a -> m (a, Result)
Trans.runSymbolic
addNewSMTOption :: SMTOption -> Symbolic ()
addNewSMTOption :: SMTOption -> Symbolic ()
addNewSMTOption = SMTOption -> Symbolic ()
forall (m :: * -> *). MonadSymbolic m => SMTOption -> m ()
Trans.addNewSMTOption
imposeConstraint :: Bool -> [(String, String)] -> SVal -> Symbolic ()
imposeConstraint :: Bool -> [(String, String)] -> SVal -> Symbolic ()
imposeConstraint = Bool -> [(String, String)] -> SVal -> Symbolic ()
forall (m :: * -> *).
MonadSymbolic m =>
Bool -> [(String, String)] -> SVal -> m ()
Trans.imposeConstraint
addSValOptGoal :: Objective SVal -> Symbolic ()
addSValOptGoal :: Objective SVal -> Symbolic ()
addSValOptGoal = Objective SVal -> Symbolic ()
forall (m :: * -> *). MonadSymbolic m => Objective SVal -> m ()
Trans.addSValOptGoal
outputSVal :: SVal -> Symbolic ()
outputSVal :: SVal -> Symbolic ()
outputSVal = SVal -> Symbolic ()
forall (m :: * -> *). MonadSymbolic m => SVal -> m ()
Trans.outputSVal
sObserve :: SymVal a => String -> SBV a -> Symbolic ()
sObserve :: forall a. SymVal a => String -> SBV a -> Symbolic ()
sObserve String
m SBV a
x = String -> SVal -> Symbolic ()
forall (m :: * -> *). MonadSymbolic m => String -> SVal -> m ()
Trans.sObserve String
m (SBV a -> SVal
forall a. SBV a -> SVal
Trans.unSBV SBV a
x)