module TPTP.Prover.Vampire (vampire) where
import TPTP.Prover.Common
import TPTP.Prover.Vampire.ProofParser
import TPTP.Prover.ProofParser hiding (filterProofLines)
import TPTP.Prover.ProverState
import TPTP.Morphism
import TPTP.Sign
import TPTP.Sublogic
import Common.AS_Annotation
import Common.ProofTree
import Common.SZSOntology
import Interfaces.GenericATPState hiding (proverState)
import Logic.Prover hiding (proofLines)
vampire :: Prover Sign Sentence Morphism Sublogic ProofTree
vampire :: Prover Sign Sentence Morphism Sublogic ProofTree
vampire = String
-> String
-> Sublogic
-> RunTheProverType
-> Prover Sign Sentence Morphism Sublogic ProofTree
mkProver String
binary_name String
prover_name Sublogic
sublogics RunTheProverType
runTheProver
binary_name :: String
binary_name :: String
binary_name = "vampire"
prover_name :: String
prover_name :: String
prover_name = "Vampire-TPTP"
sublogics :: Sublogic
sublogics :: Sublogic
sublogics = Sublogic
FOF
runTheProver :: ProverState
-> GenericConfig ProofTree
-> Bool
-> String
-> Named Sentence
-> IO (ATPRetval, GenericConfig ProofTree)
runTheProver :: RunTheProverType
runTheProver proverState :: ProverState
proverState cfg :: GenericConfig ProofTree
cfg saveTPTPFile :: Bool
saveTPTPFile theoryName :: String
theoryName namedGoal :: Named Sentence
namedGoal = do
let proverTimeLimitS :: String
proverTimeLimitS = Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ GenericConfig ProofTree -> Int
getTimeLimit GenericConfig ProofTree
cfg
allOptions :: [String]
allOptions = [ "--input_syntax", "tptp"
, "--proof", "tptp"
, "--output_axiom_names", "on"
, "--time_limit", String
proverTimeLimitS
, "--memory_limit", "4096"
, "--mode", "vampire"
]
String
problemFileName <-
ProverState
-> GenericConfig ProofTree
-> Bool
-> String
-> Named Sentence
-> String
-> IO String
prepareProverInput ProverState
proverState GenericConfig ProofTree
cfg Bool
saveTPTPFile String
theoryName Named Sentence
namedGoal String
prover_name
(_, out :: [String]
out, _) <-
String -> [String] -> IO (ExitCode, [String], TimeOfDay)
executeTheProver String
binary_name ([String]
allOptions [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
problemFileName])
let szsStatusLine :: String
szsStatusLine = [String] -> String
parseStatus [String]
out
let resultedTimeUsed :: TimeOfDay
resultedTimeUsed = [String] -> TimeOfDay
parseTimeUsed [String]
out
let proofLines :: [String]
proofLines = [String] -> [String]
filterProofLines [String]
out
[String]
axiomsUsed <- if String -> Bool
szsProved String
szsStatusLine Bool -> Bool -> Bool
|| String -> Bool
szsDisproved String
szsStatusLine
then case [String] -> ([String], [String])
axiomsFromProofObject [String]
proofLines of
(axiomNames :: [String]
axiomNames, []) -> [String] -> IO [String]
forall (m :: * -> *) a. Monad m => a -> m a
return [String]
axiomNames
(_, errs :: [String]
errs) -> do
String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ [String] -> String
unlines [String]
errs
[String] -> IO [String]
forall (m :: * -> *) a. Monad m => a -> m a
return ([String] -> IO [String]) -> [String] -> IO [String]
forall a b. (a -> b) -> a -> b
$ ProverState -> [String]
getAxioms ProverState
proverState
else [String] -> IO [String]
forall (m :: * -> *) a. Monad m => a -> m a
return ([String] -> IO [String]) -> [String] -> IO [String]
forall a b. (a -> b) -> a -> b
$ ProverState -> [String]
getAxioms ProverState
proverState
let (atpRetval :: ATPRetval
atpRetval, resultedProofStatus :: ProofStatus ProofTree
resultedProofStatus) =
GenericConfig ProofTree
-> Named Sentence
-> TimeOfDay
-> [String]
-> String
-> String
-> (ATPRetval, ProofStatus ProofTree)
atpRetValAndProofStatus GenericConfig ProofTree
cfg Named Sentence
namedGoal TimeOfDay
resultedTimeUsed [String]
axiomsUsed
String
szsStatusLine String
prover_name
(ATPRetval, GenericConfig ProofTree)
-> IO (ATPRetval, GenericConfig ProofTree)
forall (m :: * -> *) a. Monad m => a -> m a
return (ATPRetval
atpRetval, GenericConfig ProofTree
cfg { proofStatus :: ProofStatus ProofTree
proofStatus = ProofStatus ProofTree
resultedProofStatus
, resultOutput :: [String]
resultOutput = [String]
out
, timeUsed :: TimeOfDay
timeUsed = TimeOfDay
resultedTimeUsed })