Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 25 additions & 14 deletions kore/app/exec/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ import Kore.IndexedModule.IndexedModule
import qualified Kore.IndexedModule.MetadataToolsBuilder as MetadataTools
( build
)
import Kore.Internal.MultiAnd
( MultiAnd
)
import qualified Kore.Internal.MultiAnd as MultiAnd
import qualified Kore.Internal.OrPattern as OrPattern
import Kore.Internal.Pattern
( Conditional (..)
Expand Down Expand Up @@ -137,8 +141,10 @@ import Kore.Parser
, parseKorePattern
)
import Kore.Reachability
( ProofStuck (..)
( ProveClaimsResult (..)
, SomeClaim
, StuckClaim (..)
, getConfiguration
)
import qualified Kore.Reachability.Claim as Claim
import Kore.Rewriting.RewritingVariable
Expand All @@ -161,6 +167,9 @@ import Kore.Syntax.Definition
, Sentence (..)
)
import qualified Kore.Syntax.Definition as Definition.DoNotUse
import Kore.TopBottom
( isTop
)
import Kore.Unparser
( unparse
)
Expand Down Expand Up @@ -648,18 +657,20 @@ koreProve execOptions proveOptions = do
specModule
maybeAlreadyProvenModule

(exitCode, final) <- case proveResult of
Left ProofStuck { stuckPatterns, provenClaims } -> do
maybe
(return ())
(lift . saveProven specModule provenClaims)
saveProofs
let ProveClaimsResult { stuckClaims, provenClaims } = proveResult
let (exitCode, final)
| noStuckClaims = success
| otherwise =
stuckPatterns
& OrPattern.toTermLike
& failure
& return
Right () -> return success

& OrPattern.toTermLike
& failure
where
noStuckClaims = isTop stuckClaims
stuckPatterns =
OrPattern.fromPatterns (MultiAnd.map getStuckConfig stuckClaims)
getStuckConfig =
getRewritingPattern . getConfiguration . getStuckClaim
lift $ Foldable.for_ saveProofs $ saveProven specModule provenClaims
lift $ renderResult execOptions (unparse final)
return exitCode
where
Expand All @@ -685,10 +696,10 @@ koreProve execOptions proveOptions = do

saveProven
:: VerifiedModule StepperAttributes
-> [SomeClaim]
-> MultiAnd SomeClaim
-> FilePath
-> IO ()
saveProven specModule provenClaims outputFile =
saveProven specModule (Foldable.toList -> provenClaims) outputFile =
withFile outputFile WriteMode
(`hPutDoc` unparse provenDefinition)
where
Expand Down
8 changes: 2 additions & 6 deletions kore/src/Kore/Exec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,6 @@ import Control.Monad
import Control.Monad.Catch
( MonadMask
)
import Control.Monad.Trans.Except
( runExceptT
)
import Data.Coerce
( coerce
)
Expand Down Expand Up @@ -106,7 +103,7 @@ import Kore.Reachability
( AllClaims (AllClaims)
, AlreadyProven (AlreadyProven)
, Axioms (Axioms)
, ProofStuck (..)
, ProveClaimsResult (..)
, Rule (ReachabilityRewriteRule)
, SomeClaim (..)
, ToProve (ToProve)
Expand Down Expand Up @@ -383,7 +380,7 @@ prove
-- ^ The spec module
-> Maybe (VerifiedModule StepperAttributes)
-- ^ The module containing the claims that were proven in a previous run.
-> smt (Either ProofStuck ())
-> smt ProveClaimsResult
prove
searchOrder
breadthLimit
Expand All @@ -410,7 +407,6 @@ prove
(extractUntrustedClaims' claims)
)
)
& runExceptT
where
extractUntrustedClaims' :: [SomeClaim] -> [SomeClaim]
extractUntrustedClaims' = filter (not . isTrusted)
Expand Down
4 changes: 4 additions & 0 deletions kore/src/Kore/Reachability.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ License : NCSA

module Kore.Reachability
( AllPathClaim (..)
, mkAllPathClaim
, allPathRuleToTerm
, OnePathClaim (..)
, mkOnePathClaim
, onePathRuleToTerm
, SomeClaim (..)
, mkSomeClaimAllPath
, mkSomeClaimOnePath
, makeTrusted
, lensClaimPattern
, getConfiguration
Expand Down
18 changes: 17 additions & 1 deletion kore/src/Kore/Reachability/AllPathClaim.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ License : NCSA

module Kore.Reachability.AllPathClaim
( AllPathClaim (..)
, mkAllPathClaim
, allPathRuleToTerm
, Rule (..)
) where
Expand All @@ -29,10 +30,17 @@ import Kore.Debug
import Kore.Internal.Alias
( Alias (aliasConstructor)
)
import Kore.Internal.OrPattern
( OrPattern
)
import Kore.Internal.Pattern
( Pattern
)
import qualified Kore.Internal.Pattern as Pattern
import qualified Kore.Internal.Predicate as Predicate
import Kore.Internal.TermLike
( Id (getId)
( ElementVariable
, Id (getId)
, TermLike
, VariableName
, weakAlwaysFinally
Expand Down Expand Up @@ -71,6 +79,14 @@ newtype AllPathClaim =
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
deriving anyclass (Debug, Diff)

mkAllPathClaim
:: Pattern RewritingVariableName
-> OrPattern RewritingVariableName
-> [ElementVariable RewritingVariableName]
-> AllPathClaim
mkAllPathClaim left right existentials =
AllPathClaim (mkClaimPattern left right existentials)

instance Unparse AllPathClaim where
unparse claimPattern' =
unparse $ allPathRuleToTerm claimPattern'
Expand Down
18 changes: 17 additions & 1 deletion kore/src/Kore/Reachability/OnePathClaim.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ License : NCSA
module Kore.Reachability.OnePathClaim
( OnePathClaim (..)
, onePathRuleToTerm
, mkOnePathClaim
, Rule (..)
) where

Expand All @@ -26,10 +27,17 @@ import Kore.Debug
import Kore.Internal.Alias
( Alias (aliasConstructor)
)
import Kore.Internal.OrPattern
( OrPattern
)
import Kore.Internal.Pattern
( Pattern
)
import qualified Kore.Internal.Pattern as Pattern
import qualified Kore.Internal.Predicate as Predicate
import Kore.Internal.TermLike
( Id (getId)
( ElementVariable
, Id (getId)
, TermLike
, VariableName
, weakExistsFinally
Expand Down Expand Up @@ -76,6 +84,14 @@ onePathRuleToTerm :: OnePathClaim -> TermLike VariableName
onePathRuleToTerm (OnePathClaim claimPattern') =
claimPatternToTerm TermLike.WEF claimPattern'

mkOnePathClaim
:: Pattern RewritingVariableName
-> OrPattern RewritingVariableName
-> [ElementVariable RewritingVariableName]
-> OnePathClaim
mkOnePathClaim left right existentials =
OnePathClaim (mkClaimPattern left right existentials)

instance Unparse OnePathClaim where
unparse claimPattern' =
unparse $ onePathRuleToTerm claimPattern'
Expand Down
Loading