module Hsmtlib.Solvers.Cmd.OnlineCmd where
import Hsmtlib.Solver
import Hsmtlib.Solvers.Cmd.ProcCom.Process
import SMTLib2
import Text.PrettyPrint
import Hsmtlib.Solvers.Cmd.Parser.CmdResult
import Control.Applicative(liftA)
onlineFun :: Process -> Command -> IO String
onlineFun proc cmd = send proc (render (pp cmd) ++ "\n")
onlineGenResponse :: Process -> Command -> IO GenResult
onlineGenResponse proc cmd = liftA genResponse (onlineFun proc cmd)
onlineCheckSatResponse :: Process -> Command -> IO SatResult
onlineCheckSatResponse proc cmd = liftA checkSatResponse (onlineFun proc cmd)
onlineGetValueResponse :: Process -> Command -> IO GValResult
onlineGetValueResponse proc cmd = liftA getValueResponse (onlineFun proc cmd)
onlineSetLogic :: Process -> Name -> IO GenResult
onlineSetLogic proc name = onlineGenResponse proc (CmdSetLogic name)
onlineSetOption :: Process -> Option -> IO GenResult
onlineSetOption proc option = onlineGenResponse proc (CmdSetOption option)
onlineSetInfo :: Process -> Attr -> IO GenResult
onlineSetInfo proc attr = onlineGenResponse proc (CmdSetInfo attr)
onlineDeclareType :: Process -> Name -> Integer -> IO GenResult
onlineDeclareType proc name number =
onlineGenResponse proc (CmdDeclareType name number)
onlineDefineType :: Process -> Name -> [Name] -> Type -> IO GenResult
onlineDefineType proc name names t =
onlineGenResponse proc (CmdDefineType name names t)
onlineDeclareFun :: Process -> Name -> [Type] -> Type -> IO GenResult
onlineDeclareFun proc name lt t =
onlineGenResponse proc (CmdDeclareFun name lt t)
onlineDefineFun :: Process -> Name -> [Binder] -> Type -> Expr -> IO GenResult
onlineDefineFun proc name binders t expression =
onlineGenResponse proc (CmdDefineFun name binders t expression)
onlinePush :: Process -> Integer -> IO GenResult
onlinePush proc number = onlineGenResponse proc (CmdPush number)
onlinePop :: Process -> Integer -> IO GenResult
onlinePop proc number = onlineGenResponse proc (CmdPop number)
onlineAssert :: Process -> Expr -> IO GenResult
onlineAssert proc expression = onlineGenResponse proc (CmdAssert expression)
onlineCheckSat :: Process -> IO SatResult
onlineCheckSat proc = onlineCheckSatResponse proc CmdCheckSat
onlineGetAssertions :: Process -> IO String
onlineGetAssertions proc = onlineFun proc CmdGetAssertions
onlineGetValue :: Process -> [Expr] -> IO GValResult
onlineGetValue proc exprs = onlineGetValueResponse proc (CmdGetValue exprs)
onlineGetProof :: Process -> IO String
onlineGetProof proc = onlineFun proc CmdGetProof
onlineGetUnsatCore :: Process -> IO String
onlineGetUnsatCore proc = onlineFun proc CmdGetUnsatCore
onlineGetInfo :: Process -> InfoFlag -> IO String
onlineGetInfo proc info = onlineFun proc ( CmdGetInfo info )
onlineGetOption :: Process -> Name -> IO String
onlineGetOption proc name = onlineFun proc ( CmdGetOption name )
onlineExit :: Process -> IO String
onlineExit proc = onlineFun proc CmdExit