Skip to content

Commit 07e9318

Browse files
authored
Save proofs even when successful (#2197)
* proveClaims: Return a ProveClaimsResult * Kore.Reachability.Prove: Remove ProofStuck * proveClaims: Clean up result * kore-exec: Save proofs even when successful * test/save-proofs: Save successful proofs * mkClaimPattern: renamed from claimPattern * Kore.Reachability: Export mkAllPathClaim and mkOnePathClaim * proveClaims: Return entire stuck claims Return the entire stuck claims, instead of the left-hand sides only.
1 parent 089670b commit 07e9318

File tree

17 files changed

+790
-1900
lines changed

17 files changed

+790
-1900
lines changed

kore/app/exec/Main.hs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ import Kore.IndexedModule.IndexedModule
9494
import qualified Kore.IndexedModule.MetadataToolsBuilder as MetadataTools
9595
( build
9696
)
97+
import Kore.Internal.MultiAnd
98+
( MultiAnd
99+
)
100+
import qualified Kore.Internal.MultiAnd as MultiAnd
97101
import qualified Kore.Internal.OrPattern as OrPattern
98102
import Kore.Internal.Pattern
99103
( Conditional (..)
@@ -137,8 +141,10 @@ import Kore.Parser
137141
, parseKorePattern
138142
)
139143
import Kore.Reachability
140-
( ProofStuck (..)
144+
( ProveClaimsResult (..)
141145
, SomeClaim
146+
, StuckClaim (..)
147+
, getConfiguration
142148
)
143149
import qualified Kore.Reachability.Claim as Claim
144150
import Kore.Rewriting.RewritingVariable
@@ -161,6 +167,9 @@ import Kore.Syntax.Definition
161167
, Sentence (..)
162168
)
163169
import qualified Kore.Syntax.Definition as Definition.DoNotUse
170+
import Kore.TopBottom
171+
( isTop
172+
)
164173
import Kore.Unparser
165174
( unparse
166175
)
@@ -648,18 +657,20 @@ koreProve execOptions proveOptions = do
648657
specModule
649658
maybeAlreadyProvenModule
650659

651-
(exitCode, final) <- case proveResult of
652-
Left ProofStuck { stuckPatterns, provenClaims } -> do
653-
maybe
654-
(return ())
655-
(lift . saveProven specModule provenClaims)
656-
saveProofs
660+
let ProveClaimsResult { stuckClaims, provenClaims } = proveResult
661+
let (exitCode, final)
662+
| noStuckClaims = success
663+
| otherwise =
657664
stuckPatterns
658-
& OrPattern.toTermLike
659-
& failure
660-
& return
661-
Right () -> return success
662-
665+
& OrPattern.toTermLike
666+
& failure
667+
where
668+
noStuckClaims = isTop stuckClaims
669+
stuckPatterns =
670+
OrPattern.fromPatterns (MultiAnd.map getStuckConfig stuckClaims)
671+
getStuckConfig =
672+
getRewritingPattern . getConfiguration . getStuckClaim
673+
lift $ Foldable.for_ saveProofs $ saveProven specModule provenClaims
663674
lift $ renderResult execOptions (unparse final)
664675
return exitCode
665676
where
@@ -685,10 +696,10 @@ koreProve execOptions proveOptions = do
685696

686697
saveProven
687698
:: VerifiedModule StepperAttributes
688-
-> [SomeClaim]
699+
-> MultiAnd SomeClaim
689700
-> FilePath
690701
-> IO ()
691-
saveProven specModule provenClaims outputFile =
702+
saveProven specModule (Foldable.toList -> provenClaims) outputFile =
692703
withFile outputFile WriteMode
693704
(`hPutDoc` unparse provenDefinition)
694705
where

kore/src/Kore/Exec.hs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ import Control.Monad
3838
import Control.Monad.Catch
3939
( MonadMask
4040
)
41-
import Control.Monad.Trans.Except
42-
( runExceptT
43-
)
4441
import Data.Coerce
4542
( coerce
4643
)
@@ -106,7 +103,7 @@ import Kore.Reachability
106103
( AllClaims (AllClaims)
107104
, AlreadyProven (AlreadyProven)
108105
, Axioms (Axioms)
109-
, ProofStuck (..)
106+
, ProveClaimsResult (..)
110107
, Rule (ReachabilityRewriteRule)
111108
, SomeClaim (..)
112109
, ToProve (ToProve)
@@ -383,7 +380,7 @@ prove
383380
-- ^ The spec module
384381
-> Maybe (VerifiedModule StepperAttributes)
385382
-- ^ The module containing the claims that were proven in a previous run.
386-
-> smt (Either ProofStuck ())
383+
-> smt ProveClaimsResult
387384
prove
388385
searchOrder
389386
breadthLimit
@@ -410,7 +407,6 @@ prove
410407
(extractUntrustedClaims' claims)
411408
)
412409
)
413-
& runExceptT
414410
where
415411
extractUntrustedClaims' :: [SomeClaim] -> [SomeClaim]
416412
extractUntrustedClaims' = filter (not . isTrusted)

kore/src/Kore/Reachability.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ License : NCSA
66

77
module Kore.Reachability
88
( AllPathClaim (..)
9+
, mkAllPathClaim
910
, allPathRuleToTerm
1011
, OnePathClaim (..)
12+
, mkOnePathClaim
1113
, onePathRuleToTerm
1214
, SomeClaim (..)
15+
, mkSomeClaimAllPath
16+
, mkSomeClaimOnePath
1317
, makeTrusted
1418
, lensClaimPattern
1519
, getConfiguration

kore/src/Kore/Reachability/AllPathClaim.hs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ License : NCSA
66

77
module Kore.Reachability.AllPathClaim
88
( AllPathClaim (..)
9+
, mkAllPathClaim
910
, allPathRuleToTerm
1011
, Rule (..)
1112
) where
@@ -29,10 +30,17 @@ import Kore.Debug
2930
import Kore.Internal.Alias
3031
( Alias (aliasConstructor)
3132
)
33+
import Kore.Internal.OrPattern
34+
( OrPattern
35+
)
36+
import Kore.Internal.Pattern
37+
( Pattern
38+
)
3239
import qualified Kore.Internal.Pattern as Pattern
3340
import qualified Kore.Internal.Predicate as Predicate
3441
import Kore.Internal.TermLike
35-
( Id (getId)
42+
( ElementVariable
43+
, Id (getId)
3644
, TermLike
3745
, VariableName
3846
, weakAlwaysFinally
@@ -71,6 +79,14 @@ newtype AllPathClaim =
7179
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
7280
deriving anyclass (Debug, Diff)
7381

82+
mkAllPathClaim
83+
:: Pattern RewritingVariableName
84+
-> OrPattern RewritingVariableName
85+
-> [ElementVariable RewritingVariableName]
86+
-> AllPathClaim
87+
mkAllPathClaim left right existentials =
88+
AllPathClaim (mkClaimPattern left right existentials)
89+
7490
instance Unparse AllPathClaim where
7591
unparse claimPattern' =
7692
unparse $ allPathRuleToTerm claimPattern'

kore/src/Kore/Reachability/OnePathClaim.hs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ License : NCSA
77
module Kore.Reachability.OnePathClaim
88
( OnePathClaim (..)
99
, onePathRuleToTerm
10+
, mkOnePathClaim
1011
, Rule (..)
1112
) where
1213

@@ -26,10 +27,17 @@ import Kore.Debug
2627
import Kore.Internal.Alias
2728
( Alias (aliasConstructor)
2829
)
30+
import Kore.Internal.OrPattern
31+
( OrPattern
32+
)
33+
import Kore.Internal.Pattern
34+
( Pattern
35+
)
2936
import qualified Kore.Internal.Pattern as Pattern
3037
import qualified Kore.Internal.Predicate as Predicate
3138
import Kore.Internal.TermLike
32-
( Id (getId)
39+
( ElementVariable
40+
, Id (getId)
3341
, TermLike
3442
, VariableName
3543
, weakExistsFinally
@@ -76,6 +84,14 @@ onePathRuleToTerm :: OnePathClaim -> TermLike VariableName
7684
onePathRuleToTerm (OnePathClaim claimPattern') =
7785
claimPatternToTerm TermLike.WEF claimPattern'
7886

87+
mkOnePathClaim
88+
:: Pattern RewritingVariableName
89+
-> OrPattern RewritingVariableName
90+
-> [ElementVariable RewritingVariableName]
91+
-> OnePathClaim
92+
mkOnePathClaim left right existentials =
93+
OnePathClaim (mkClaimPattern left right existentials)
94+
7995
instance Unparse OnePathClaim where
8096
unparse claimPattern' =
8197
unparse $ onePathRuleToTerm claimPattern'

0 commit comments

Comments
 (0)