7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa{- |
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaModule : ./TPTP/Prover/Leo2.hs
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 Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaMaintainer : Eugen Kuksa <kuksa@iks.cs.ovgu.de>
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaStability : provisional
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen KuksaPortability : non-portable (imports Logic)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa-}
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksamodule TPTP.Prover.Leo2 (leo2) where
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Prover.Common
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Prover.ProofParser
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Prover.ProverState
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Morphism
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Sign
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport TPTP.Sublogic
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Common.AS_Annotation
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Common.ProofTree
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Common.SZSOntology
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Interfaces.GenericATPState hiding (proverState)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport Logic.Prover hiding (proofLines)
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaimport System.Exit
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaleo2 :: Prover Sign Sentence Morphism Sublogic ProofTree
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaleo2 = mkProver binary_name prover_name sublogics runTheProver
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksabinary_name :: String
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksabinary_name = "leo"
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaprover_name :: String
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksaprover_name = "Leo-II"
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksasublogics :: Sublogic
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksasublogics = THF
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
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 ]
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa problemFileName <-
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa prepareProverInput proverState cfg saveTPTPFile theoryName namedGoal prover_name
7bb0a9e92bc7a6f868eaa0b9c3212c0af4f96b7fEugen Kuksa
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
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
szsStatusLine prover_name
return (atpRetval, cfg { proofStatus = resultedProofStatus
, resultOutput = out
, timeUsed = resultedTimeUsed })