Skip to content

Commit c889686

Browse files
Prove claims in fixed order (#2199)
* Prove claims in fixed order * Remove test draft * Unit test * Adressed comments * Hlint Co-authored-by: rv-jenkins <admin@runtimeverification.com>
1 parent 1e3a3a1 commit c889686

File tree

5 files changed

+122
-3
lines changed

5 files changed

+122
-3
lines changed

kore/app/share/GlobalMain.hs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,14 @@ import Prelude.Kore
3131
import Control.Exception
3232
( evaluate
3333
)
34+
import Control.Lens
35+
( (%~)
36+
)
37+
import qualified Control.Lens as Lens
3438
import qualified Control.Monad as Monad
39+
import Data.Functor
40+
( (<&>)
41+
)
3542
import Data.List
3643
( intercalate
3744
)
@@ -106,7 +113,8 @@ import System.Clock
106113
import qualified System.Environment as Env
107114

108115
import Kore.ASTVerifier.DefinitionVerifier
109-
( verifyAndIndexDefinitionWithBase
116+
( sortModuleClaims
117+
, verifyAndIndexDefinitionWithBase
110118
)
111119
import Kore.ASTVerifier.PatternVerifier as PatternVerifier
112120
import qualified Kore.Attribute.Symbol as Attribute
@@ -518,8 +526,14 @@ type LoadedDefinition = (Map ModuleName LoadedModule, Map Text AstLocation)
518526

519527
loadDefinitions :: [FilePath] -> Main LoadedDefinition
520528
loadDefinitions filePaths =
521-
Monad.foldM verifyDefinitionWithBase mempty
522-
=<< traverse parseDefinition filePaths
529+
loadedDefinitions <&> sortClaims
530+
where
531+
loadedDefinitions =
532+
Monad.foldM verifyDefinitionWithBase mempty
533+
=<< traverse parseDefinition filePaths
534+
535+
sortClaims :: LoadedDefinition -> LoadedDefinition
536+
sortClaims = Lens._1 . Lens.traversed %~ sortModuleClaims
523537

524538
loadModule :: ModuleName -> LoadedDefinition -> Main LoadedModule
525539
loadModule moduleName = lookupMainModule moduleName . fst

kore/src/Kore/ASTVerifier/DefinitionVerifier.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,24 @@ module Kore.ASTVerifier.DefinitionVerifier
1111
( verifyDefinition
1212
, verifyAndIndexDefinition
1313
, verifyAndIndexDefinitionWithBase
14+
, sortModuleClaims
1415
) where
1516

1617
import Prelude.Kore
1718

19+
import Control.Lens
20+
( (%~)
21+
)
1822
import Control.Monad
1923
( foldM
2024
)
2125
import qualified Data.Foldable as Foldable
26+
import Data.Generics.Product
27+
( field
28+
)
29+
import Data.List
30+
( sortOn
31+
)
2232
import Data.Map.Strict
2333
( Map
2434
)
@@ -138,3 +148,11 @@ verifyAndIndexDefinitionWithBase
138148
return (index, names)
139149
where
140150
modulesByName = Map.fromList . map (\m -> (moduleName m, m))
151+
152+
sortModuleClaims
153+
:: VerifiedModule declAtts
154+
-> VerifiedModule declAtts
155+
sortModuleClaims verifiedModule =
156+
verifiedModule
157+
& field @"indexedModuleClaims"
158+
%~ sortOn (Attribute.sourceLocation . fst)

kore/test/Test/Kore.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ module Test.Kore
2828
, couple
2929
, symbolOrAliasGen
3030
, addVariable
31+
, sentenceAxiomGen
32+
, korePatternUnifiedGen
3133
-- * Re-exports
3234
, ParsedPattern
3335
, asParsedPattern

kore/test/Test/Kore/Builtin.hs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module Test.Kore.Builtin
22
( test_internalize
3+
, test_sortModuleClaims
34
) where
45

56
import Prelude.Kore hiding
@@ -9,14 +10,36 @@ import Prelude.Kore hiding
910
import Test.Tasty
1011
import Test.Tasty.HUnit
1112

13+
import Control.Lens
14+
( ix
15+
, (%~)
16+
, (.~)
17+
)
18+
import qualified Control.Lens as Lens
19+
import Data.Generics.Product
20+
( field
21+
)
1222
import qualified Data.Set
1323

24+
import Kore.ASTVerifier.DefinitionVerifier
25+
( sortModuleClaims
26+
)
27+
import Kore.Attribute.Axiom
28+
( SourceLocation
29+
)
1430
import qualified Kore.Attribute.Symbol as Attribute
1531
import qualified Kore.Builtin as Kore
32+
import Kore.IndexedModule.IndexedModule
33+
( IndexedModule (..)
34+
, VerifiedModule
35+
)
1636
import Kore.IndexedModule.MetadataTools
1737
( SmtMetadataTools
1838
)
1939
import Kore.Internal.TermLike
40+
import Test.Kore.Step.SMT.Builders
41+
( indexModule
42+
)
2043

2144
import qualified Test.Kore.Builtin.Builtin as Builtin
2245
import qualified Test.Kore.Builtin.Definition as Builtin
@@ -151,3 +174,25 @@ notInternalizes name origin =
151174

152175
metadata :: SmtMetadataTools Attribute.Symbol
153176
metadata = Builtin.testMetadataTools
177+
178+
test_sortModuleClaims :: TestTree
179+
test_sortModuleClaims =
180+
testCase "sort claims" $ do
181+
let verifiedModule =
182+
indexModule Builtin.testModuleWithTwoClaims
183+
& ixSetLocation 0 (from $ FileLocation "file" 5 3)
184+
& ixSetLocation 1 (from $ FileLocation "file" 1 1)
185+
withSortedClaims = sortModuleClaims verifiedModule
186+
assertEqual ""
187+
(indexedModuleClaims withSortedClaims)
188+
(indexedModuleClaims verifiedModule & reverse)
189+
where
190+
ixSetLocation
191+
:: Int
192+
-> SourceLocation
193+
-> VerifiedModule declAtts
194+
-> VerifiedModule declAtts
195+
ixSetLocation index sourceLocation verifiedModule =
196+
verifiedModule
197+
& field @"indexedModuleClaims"
198+
%~ (ix index . Lens._1 . field @"sourceLocation" .~ sourceLocation)

kore/test/Test/Kore/Builtin/Definition.hs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ import Kore.Internal.TermLike hiding
5555
( Symbol
5656
, bytesSort
5757
)
58+
import Kore.Syntax
59+
( Const (..)
60+
)
5861
import Kore.Syntax.Definition as Syntax
62+
import qualified Kore.Syntax.PatternF as PatternF
5963

6064
import Test.Kore
6165
import qualified Test.Kore.Step.MockSymbols as Mock
@@ -1747,6 +1751,42 @@ testModule =
17471751
]
17481752
}
17491753

1754+
testModuleWithTwoClaims :: ParsedModule
1755+
testModuleWithTwoClaims =
1756+
Module
1757+
{ moduleName = testModuleName
1758+
, moduleAttributes = Attributes []
1759+
, moduleSentences =
1760+
[ SentenceClaimSentence . SentenceClaim $
1761+
(SentenceAxiom
1762+
{ sentenceAxiomParameters = [SortVariable (testId "sv1")]
1763+
, sentenceAxiomPattern =
1764+
Builtin.externalize (mkStringLiteral "a")
1765+
, sentenceAxiomAttributes =
1766+
Attributes
1767+
[ asParsedPattern
1768+
$ PatternF.StringLiteralF
1769+
$ Const (StringLiteral "b")
1770+
]
1771+
}
1772+
:: ParsedSentenceAxiom)
1773+
, SentenceClaimSentence . SentenceClaim $
1774+
(SentenceAxiom
1775+
{ sentenceAxiomParameters = [SortVariable (testId "sv2")]
1776+
, sentenceAxiomPattern =
1777+
Builtin.externalize (mkStringLiteral "c")
1778+
, sentenceAxiomAttributes =
1779+
Attributes
1780+
[ asParsedPattern
1781+
$ PatternF.StringLiteralF
1782+
$ Const (StringLiteral "b")
1783+
]
1784+
}
1785+
:: ParsedSentenceAxiom)
1786+
]
1787+
}
1788+
1789+
17501790
-- -------------------------------------------------------------
17511791
-- * Definition
17521792

0 commit comments

Comments
 (0)