{-# OPTIONS_GHC -Wall -Werror #-}
module Data.SBV.Control.Types (
       CheckSatResult(..)
     , Logic(..)
     , SMTOption(..), isStartModeOption, isOnlyOnceOption, setSMTOption
     , SMTInfoFlag(..)
     , SMTErrorBehavior(..)
     , SMTReasonUnknown(..)
     , SMTInfoResponse(..)
     ) where
import Control.DeepSeq (NFData(..))
data CheckSatResult = Sat                   
                    | DSat (Maybe String)   
                    | Unsat                 
                    | Unk                   
                    deriving (CheckSatResult -> CheckSatResult -> Bool
(CheckSatResult -> CheckSatResult -> Bool)
-> (CheckSatResult -> CheckSatResult -> Bool) -> Eq CheckSatResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CheckSatResult -> CheckSatResult -> Bool
$c/= :: CheckSatResult -> CheckSatResult -> Bool
== :: CheckSatResult -> CheckSatResult -> Bool
$c== :: CheckSatResult -> CheckSatResult -> Bool
Eq, Int -> CheckSatResult -> ShowS
[CheckSatResult] -> ShowS
CheckSatResult -> String
(Int -> CheckSatResult -> ShowS)
-> (CheckSatResult -> String)
-> ([CheckSatResult] -> ShowS)
-> Show CheckSatResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CheckSatResult] -> ShowS
$cshowList :: [CheckSatResult] -> ShowS
show :: CheckSatResult -> String
$cshow :: CheckSatResult -> String
showsPrec :: Int -> CheckSatResult -> ShowS
$cshowsPrec :: Int -> CheckSatResult -> ShowS
Show)
data SMTInfoFlag = AllStatistics
                 | AssertionStackLevels
                 | Authors
                 | ErrorBehavior
                 | Name
                 | ReasonUnknown
                 | Version
                 | InfoKeyword String
data SMTErrorBehavior = ErrorImmediateExit
                      | ErrorContinuedExecution
                      deriving Int -> SMTErrorBehavior -> ShowS
[SMTErrorBehavior] -> ShowS
SMTErrorBehavior -> String
(Int -> SMTErrorBehavior -> ShowS)
-> (SMTErrorBehavior -> String)
-> ([SMTErrorBehavior] -> ShowS)
-> Show SMTErrorBehavior
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SMTErrorBehavior] -> ShowS
$cshowList :: [SMTErrorBehavior] -> ShowS
show :: SMTErrorBehavior -> String
$cshow :: SMTErrorBehavior -> String
showsPrec :: Int -> SMTErrorBehavior -> ShowS
$cshowsPrec :: Int -> SMTErrorBehavior -> ShowS
Show
data SMTReasonUnknown = UnknownMemOut
                      | UnknownIncomplete
                      | UnknownTimeOut
                      | UnknownOther      String
instance NFData SMTReasonUnknown where rnf :: SMTReasonUnknown -> ()
rnf SMTReasonUnknown
a = SMTReasonUnknown -> () -> ()
seq SMTReasonUnknown
a ()
instance Show SMTReasonUnknown where
  show :: SMTReasonUnknown -> String
show SMTReasonUnknown
UnknownMemOut     = String
"memout"
  show SMTReasonUnknown
UnknownIncomplete = String
"incomplete"
  show SMTReasonUnknown
UnknownTimeOut    = String
"timeout"
  show (UnknownOther String
s)  = String
s
data SMTInfoResponse = Resp_Unsupported
                     | Resp_AllStatistics        [(String, String)]
                     | Resp_AssertionStackLevels Integer
                     | Resp_Authors              [String]
                     | Resp_Error                SMTErrorBehavior
                     | Resp_Name                 String
                     | Resp_ReasonUnknown        SMTReasonUnknown
                     | Resp_Version              String
                     | Resp_InfoKeyword          String [String]
                     deriving Int -> SMTInfoResponse -> ShowS
[SMTInfoResponse] -> ShowS
SMTInfoResponse -> String
(Int -> SMTInfoResponse -> ShowS)
-> (SMTInfoResponse -> String)
-> ([SMTInfoResponse] -> ShowS)
-> Show SMTInfoResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SMTInfoResponse] -> ShowS
$cshowList :: [SMTInfoResponse] -> ShowS
show :: SMTInfoResponse -> String
$cshow :: SMTInfoResponse -> String
showsPrec :: Int -> SMTInfoResponse -> ShowS
$cshowsPrec :: Int -> SMTInfoResponse -> ShowS
Show
instance Show SMTInfoFlag where
  show :: SMTInfoFlag -> String
show SMTInfoFlag
AllStatistics        = String
":all-statistics"
  show SMTInfoFlag
AssertionStackLevels = String
":assertion-stack-levels"
  show SMTInfoFlag
Authors              = String
":authors"
  show SMTInfoFlag
ErrorBehavior        = String
":error-behavior"
  show SMTInfoFlag
Name                 = String
":name"
  show SMTInfoFlag
ReasonUnknown        = String
":reason-unknown"
  show SMTInfoFlag
Version              = String
":version"
  show (InfoKeyword String
s)      = String
s
data SMTOption = DiagnosticOutputChannel   FilePath
               | ProduceAssertions         Bool
               | ProduceAssignments        Bool
               | ProduceProofs             Bool
               | ProduceInterpolants       Bool
               | ProduceUnsatAssumptions   Bool
               | ProduceUnsatCores         Bool
               | RandomSeed                Integer
               | ReproducibleResourceLimit Integer
               | SMTVerbosity              Integer
               | OptionKeyword             String  [String]
               | SetLogic                  Logic
               | SetInfo                   String  [String]
               deriving Int -> SMTOption -> ShowS
[SMTOption] -> ShowS
SMTOption -> String
(Int -> SMTOption -> ShowS)
-> (SMTOption -> String)
-> ([SMTOption] -> ShowS)
-> Show SMTOption
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SMTOption] -> ShowS
$cshowList :: [SMTOption] -> ShowS
show :: SMTOption -> String
$cshow :: SMTOption -> String
showsPrec :: Int -> SMTOption -> ShowS
$cshowsPrec :: Int -> SMTOption -> ShowS
Show
isStartModeOption :: SMTOption -> Bool
isStartModeOption :: SMTOption -> Bool
isStartModeOption DiagnosticOutputChannel{}   = Bool
False
isStartModeOption ProduceAssertions{}         = Bool
True
isStartModeOption ProduceAssignments{}        = Bool
True
isStartModeOption ProduceProofs{}             = Bool
True
isStartModeOption ProduceInterpolants{}       = Bool
True
isStartModeOption ProduceUnsatAssumptions{}   = Bool
True
isStartModeOption ProduceUnsatCores{}         = Bool
True
isStartModeOption RandomSeed{}                = Bool
True
isStartModeOption ReproducibleResourceLimit{} = Bool
False
isStartModeOption SMTVerbosity{}              = Bool
False
isStartModeOption OptionKeyword{}             = Bool
True  
isStartModeOption SetLogic{}                  = Bool
True
isStartModeOption SetInfo{}                   = Bool
False
isOnlyOnceOption :: SMTOption -> Bool
isOnlyOnceOption :: SMTOption -> Bool
isOnlyOnceOption DiagnosticOutputChannel{}   = Bool
True
isOnlyOnceOption ProduceAssertions{}         = Bool
True
isOnlyOnceOption ProduceAssignments{}        = Bool
True
isOnlyOnceOption ProduceProofs{}             = Bool
True
isOnlyOnceOption ProduceInterpolants{}       = Bool
True
isOnlyOnceOption ProduceUnsatAssumptions{}   = Bool
True
isOnlyOnceOption ProduceUnsatCores{}         = Bool
True
isOnlyOnceOption RandomSeed{}                = Bool
False
isOnlyOnceOption ReproducibleResourceLimit{} = Bool
False
isOnlyOnceOption SMTVerbosity{}              = Bool
False
isOnlyOnceOption OptionKeyword{}             = Bool
False 
isOnlyOnceOption SetLogic{}                  = Bool
True
isOnlyOnceOption SetInfo{}                   = Bool
False
smtBool :: Bool -> String
smtBool :: Bool -> String
smtBool Bool
True  = String
"true"
smtBool Bool
False = String
"false"
setSMTOption :: SMTOption -> String
setSMTOption :: SMTOption -> String
setSMTOption = SMTOption -> String
cvt
  where cvt :: SMTOption -> String
cvt (DiagnosticOutputChannel   String
f) = [String] -> String
opt   [String
":diagnostic-output-channel",   ShowS
forall a. Show a => a -> String
show String
f]
        cvt (ProduceAssertions         Bool
b) = [String] -> String
opt   [String
":produce-assertions",          Bool -> String
smtBool Bool
b]
        cvt (ProduceAssignments        Bool
b) = [String] -> String
opt   [String
":produce-assignments",         Bool -> String
smtBool Bool
b]
        cvt (ProduceProofs             Bool
b) = [String] -> String
opt   [String
":produce-proofs",              Bool -> String
smtBool Bool
b]
        cvt (ProduceInterpolants       Bool
b) = [String] -> String
opt   [String
":produce-interpolants",        Bool -> String
smtBool Bool
b]
        cvt (ProduceUnsatAssumptions   Bool
b) = [String] -> String
opt   [String
":produce-unsat-assumptions",   Bool -> String
smtBool Bool
b]
        cvt (ProduceUnsatCores         Bool
b) = [String] -> String
opt   [String
":produce-unsat-cores",         Bool -> String
smtBool Bool
b]
        cvt (RandomSeed                Integer
i) = [String] -> String
opt   [String
":random-seed",                 Integer -> String
forall a. Show a => a -> String
show Integer
i]
        cvt (ReproducibleResourceLimit Integer
i) = [String] -> String
opt   [String
":reproducible-resource-limit", Integer -> String
forall a. Show a => a -> String
show Integer
i]
        cvt (SMTVerbosity              Integer
i) = [String] -> String
opt   [String
":verbosity",                   Integer -> String
forall a. Show a => a -> String
show Integer
i]
        cvt (OptionKeyword          String
k [String]
as) = [String] -> String
opt   (String
k String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String]
as)
        cvt (SetLogic                  Logic
l) = Logic -> String
logic Logic
l
        cvt (SetInfo                String
k [String]
as) = [String] -> String
info  (String
k String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String]
as)
        opt :: [String] -> String
opt   [String]
xs = String
"(set-option " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords [String]
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
        info :: [String] -> String
info  [String]
xs = String
"(set-info "   String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords [String]
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
        logic :: Logic -> String
logic Logic
Logic_NONE = String
"; NB. not setting the logic per user request of Logic_NONE"
        logic Logic
l          = String
"(set-logic " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Logic -> String
forall a. Show a => a -> String
show Logic
l String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
data Logic
  = AUFLIA             
  | AUFLIRA            
  | AUFNIRA            
  | LRA                
  | QF_ABV             
  | QF_AUFBV           
  | QF_AUFLIA          
  | QF_AX              
  | QF_BV              
  | QF_IDL             
  | QF_LIA             
  | QF_LRA             
  | QF_NIA             
  | QF_NRA             
  | QF_RDL             
  | QF_UF              
  | QF_UFBV            
  | QF_UFIDL           
  | QF_UFLIA           
  | QF_UFLRA           
  | QF_UFNRA           
  | QF_UFNIRA          
  | UFLRA              
  | UFNIA              
  | QF_FPBV            
  | QF_FP              
  | QF_FD              
  | QF_S               
  | Logic_ALL          
  | Logic_NONE         
  | CustomLogic String 
instance Show Logic where
  show :: Logic -> String
show Logic
AUFLIA          = String
"AUFLIA"
  show Logic
AUFLIRA         = String
"AUFLIRA"
  show Logic
AUFNIRA         = String
"AUFNIRA"
  show Logic
LRA             = String
"LRA"
  show Logic
QF_ABV          = String
"QF_ABV"
  show Logic
QF_AUFBV        = String
"QF_AUFBV"
  show Logic
QF_AUFLIA       = String
"QF_AUFLIA"
  show Logic
QF_AX           = String
"QF_AX"
  show Logic
QF_BV           = String
"QF_BV"
  show Logic
QF_IDL          = String
"QF_IDL"
  show Logic
QF_LIA          = String
"QF_LIA"
  show Logic
QF_LRA          = String
"QF_LRA"
  show Logic
QF_NIA          = String
"QF_NIA"
  show Logic
QF_NRA          = String
"QF_NRA"
  show Logic
QF_RDL          = String
"QF_RDL"
  show Logic
QF_UF           = String
"QF_UF"
  show Logic
QF_UFBV         = String
"QF_UFBV"
  show Logic
QF_UFIDL        = String
"QF_UFIDL"
  show Logic
QF_UFLIA        = String
"QF_UFLIA"
  show Logic
QF_UFLRA        = String
"QF_UFLRA"
  show Logic
QF_UFNRA        = String
"QF_UFNRA"
  show Logic
QF_UFNIRA       = String
"QF_UFNIRA"
  show Logic
UFLRA           = String
"UFLRA"
  show Logic
UFNIA           = String
"UFNIA"
  show Logic
QF_FPBV         = String
"QF_FPBV"
  show Logic
QF_FP           = String
"QF_FP"
  show Logic
QF_FD           = String
"QF_FD"
  show Logic
QF_S            = String
"QF_S"
  show Logic
Logic_ALL       = String
"ALL"
  show Logic
Logic_NONE      = String
"Logic_NONE"
  show (CustomLogic String
l) = String
l
{-# ANN type SMTInfoResponse ("HLint: ignore Use camelCase" :: String) #-}
{-# ANN type Logic           ("HLint: ignore Use camelCase" :: String) #-}