7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaDescription : Interface for the Leo-II Prover.
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaCopyright : (c) Eugen Kuksa University of Magdeburg 2017
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaLicense : GPLv2 or higher, see LICENSE.txt
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaMaintainer : Eugen Kuksa <kuksa@iks.cs.ovgu.de>
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaStability : provisional
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaPortability : non-portable (imports Logic)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksamodule TPTP.Prover.Leo2 (leo2) where
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Interfaces.GenericATPState hiding (proverState)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Logic.Prover hiding (proofLines)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaleo2 :: Prover Sign Sentence Morphism Sublogic ProofTree
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaleo2 = mkProver binary_name prover_name sublogics runTheProver
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksabinary_name :: String
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksabinary_name = "leo"
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaprover_name :: String
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaprover_name = "Leo-II"
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksasublogics :: Sublogic
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksasublogics = THF
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksarunTheProver :: ProverState
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa {- ^ logical part containing the input Sign and axioms and possibly
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa goals that have been proved earlier as additional axioms -}
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -> GenericConfig ProofTree -- ^ configuration to use
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -> Bool -- ^ True means save TPTP file
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -> String -- ^ name of the theory in the DevGraph
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -> Named Sentence -- ^ goal to prove
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -> IO (ATPRetval, GenericConfig ProofTree)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -- ^ (retval, configuration with proof status and complete output)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksarunTheProver proverState cfg saveTPTPFile theoryName namedGoal = do
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let proverTimeLimitS = show $ getTimeLimit cfg
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa hardTimeLimitS = show $ hardTimeLimit cfg
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa allOptions = [ "--proofoutput", "3"
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa , "--timeout", proverTimeLimitS
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa problemFileName <-
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa prepareProverInput proverState cfg saveTPTPFile theoryName namedGoal prover_name
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -- Leo-II runs for five minutes if a timeout of 30 seconds is set. Use the
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa -- timeout executable to quit it by force it after a grace period.
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa timeoutBin <- gnuTimeout
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa (exitCode, out, wallTimeUsed) <-
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa executeTheProver timeoutBin (hardTimeLimitS : binary_name :
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa allOptions ++ [problemFileName])
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let timedOut = exitCode == ExitFailure 124
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let szsStatusLine = if timedOut then "Timeout" else findSZS out
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let resultedTimeUsed = wallTimeUsed
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let proofLines = filterProofLines out
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa axiomsUsed <- if szsProved szsStatusLine || szsDisproved szsStatusLine
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa then case axiomsFromProofObject proofLines of
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa (axiomNames, []) -> return axiomNames
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa (_, errs) -> do
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa putStrLn $ unlines errs
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa return $ getAxioms proverState
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa else return $ getAxioms proverState
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa let (atpRetval, resultedProofStatus) =
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa atpRetValAndProofStatus cfg namedGoal resultedTimeUsed axiomsUsed