Skip to content

Commit 3c37aab

Browse files
breakerzirconiagithub-actions
andauthored
Add liftSimplifier and perform a little restructuring of the codebase (#3171)
* Add liftSimplifier & put MonadSimplify and Simplifier together * Fix the definitions in the test suite and hide runSimplifier * Moved certain functions outside MonadSimplify, killed TestSimplifierT * Rename 'Data' to 'API', 'runSimplifier' to 'testRunSimplifier' * Materialize Nix expressions Co-authored-by: github-actions <github-actions@github.com>
1 parent e39ec77 commit 3c37aab

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+358
-384
lines changed

kore/kore.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,12 +457,12 @@ library
457457
Kore.Simplify.And
458458
Kore.Simplify.AndPredicates
459459
Kore.Simplify.AndTerms
460+
Kore.Simplify.API
460461
Kore.Simplify.Application
461462
Kore.Simplify.Bottom
462463
Kore.Simplify.Ceil
463464
Kore.Simplify.CeilSimplifier
464465
Kore.Simplify.Condition
465-
Kore.Simplify.Data
466466
Kore.Simplify.DomainValue
467467
Kore.Simplify.Equals
468468
Kore.Simplify.Exists

kore/src/Kore/Exec.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ import Kore.Rewrite.Transition (
174174
runTransitionT,
175175
scatter,
176176
)
177-
import Kore.Simplify.Data (
177+
import Kore.Simplify.API (
178178
Simplifier,
179179
evalSimplifier,
180180
evalSimplifierProofs,
181181
)
182-
import Kore.Simplify.Data qualified as Simplifier
182+
import Kore.Simplify.API qualified as Simplifier
183183
import Kore.Simplify.Pattern qualified as Pattern
184184
import Kore.Simplify.Simplify (
185185
SimplifierXSwitch,

kore/src/Kore/JsonRpc.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import Kore.Rewrite (ExecutionMode (All), Natural)
3939
-- import Kore.Rewrite.RewritingVariable as RewritingVariable
4040
import Kore.Simplify.Simplify (SimplifierXSwitch)
4141

42-
-- import Kore.Simplify.Data (
42+
-- import Kore.Simplify.API (
4343
-- evalSimplifier,
4444
-- )
4545
import Kore.Syntax.Json (KoreJson)

kore/src/Kore/Reachability/Claim.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ import Kore.Rewrite.Strategy (
137137
)
138138
import Kore.Rewrite.Strategy qualified as Strategy
139139
import Kore.Rewrite.Transition qualified as Transition
140-
import Kore.Simplify.Data (
140+
import Kore.Simplify.API (
141141
MonadSimplify,
142142
)
143143
import Kore.Simplify.Exists qualified as Exists

kore/src/Kore/Repl.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ import Kore.Repl.Interpreter
6565
import Kore.Repl.Parser
6666
import Kore.Repl.State
6767
import Kore.Rewrite.Strategy qualified as Strategy
68-
import Kore.Simplify.Data (
68+
import Kore.Simplify.API (
6969
Simplifier,
7070
)
7171
import Kore.Syntax.Module (

kore/src/Kore/Repl/Data.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ import Kore.Rewrite.RewritingVariable (
9494
RewritingVariableName,
9595
)
9696
import Kore.Rewrite.Strategy qualified as Strategy
97-
import Kore.Simplify.Data (
97+
import Kore.Simplify.API (
9898
Simplifier,
9999
)
100100
import Kore.Simplify.Not qualified as Not

kore/src/Kore/Repl/Interpreter.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ import Kore.Rewrite.RewritingVariable (
181181
)
182182
import Kore.Rewrite.RulePattern qualified as RulePattern
183183
import Kore.Rewrite.Strategy qualified as Strategy
184-
import Kore.Simplify.Data (
184+
import Kore.Simplify.API (
185185
Simplifier,
186186
)
187187
import Kore.Syntax.Application

kore/src/Kore/Repl/State.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ import Kore.Rewrite.RewritingVariable (
145145
RewritingVariableName,
146146
)
147147
import Kore.Rewrite.Strategy qualified as Strategy
148-
import Kore.Simplify.Data (
148+
import Kore.Simplify.API (
149149
Simplifier,
150150
)
151151
import Kore.Syntax.Definition (
Lines changed: 26 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
{-# LANGUAGE UndecidableInstances #-}
22

33
{- |
4-
Module : Kore.Simplify.Data
4+
Module : Kore.Simplify.API
55
Description : Data structures used for term simplification.
66
Copyright : (c) Runtime Verification, 2018-2021
77
License : BSD-3-Clause
88
Maintainer : virgil.serbanuta@runtimeverification.com
99
Stability : experimental
1010
Portability : portable
1111
-}
12-
module Kore.Simplify.Data (
13-
Simplifier,
14-
TermSimplifier,
15-
Env (..),
16-
runSimplifier,
17-
runSimplifierBranch,
12+
module Kore.Simplify.API (
1813
evalSimplifier,
1914
evalSimplifierProofs,
2015

2116
-- * Re-exports
17+
Env (..),
18+
Simplifier,
19+
runSimplifier,
20+
runSimplifierBranch,
21+
TermSimplifier,
2222
MonadSimplify (..),
23+
askMetadataTools,
24+
simplifyPattern,
25+
simplifyTerm,
26+
askSimplifierAxioms,
27+
askInjSimplifier,
28+
askOverloadSimplifier,
29+
getCache,
30+
putCache,
31+
askSimplifierXSwitch,
2332
InternalVariable,
2433
MonadProf,
2534
) where
2635

27-
import Control.Monad.Catch (
28-
MonadCatch,
29-
MonadMask,
30-
MonadThrow,
31-
)
3236
import Control.Monad.Reader
33-
import Control.Monad.State.Strict
3437
import Data.Map.Strict (
3538
Map,
3639
)
@@ -82,40 +85,13 @@ import Kore.Simplify.TermLike qualified as TermLike
8285
import Kore.Syntax.Variable (
8386
VariableName,
8487
)
85-
import Logic
8688
import Prelude.Kore
8789
import Pretty qualified
8890
import Prof
8991
import SMT (
9092
SMT,
9193
)
9294

93-
-- * Simplifier
94-
95-
data Env = Env
96-
{ metadataTools :: !(SmtMetadataTools Attribute.Symbol)
97-
, simplifierCondition :: !(ConditionSimplifier Simplifier)
98-
, simplifierAxioms :: !BuiltinAndAxiomSimplifierMap
99-
, memo :: !(Memo.Self Simplifier)
100-
, injSimplifier :: !InjSimplifier
101-
, overloadSimplifier :: !OverloadSimplifier
102-
, simplifierXSwitch :: !SimplifierXSwitch
103-
}
104-
105-
{- | @Simplifier@ represents a simplification action.
106-
107-
A @Simplifier@ can send constraints to the SMT solver through 'MonadSMT'.
108-
109-
A @Simplifier@ can write to the log through 'HasLog'.
110-
-}
111-
newtype Simplifier a
112-
= Simplifier (StateT SimplifierCache (ReaderT Env SMT) a)
113-
deriving newtype (Functor, Applicative, Monad)
114-
deriving newtype (MonadSMT, MonadLog, MonadProf)
115-
deriving newtype (MonadIO, MonadCatch, MonadThrow, MonadMask)
116-
deriving newtype (MonadReader Env)
117-
deriving newtype (MonadState SimplifierCache)
118-
11995
traceProfSimplify ::
12096
MonadProf prof =>
12197
Pattern RewritingVariableName ->
@@ -131,66 +107,6 @@ traceProfSimplify (Pattern.toTermLike -> termLike) =
131107
. Pretty.pretty
132108
<$> matchAxiomIdentifier termLike
133109

134-
instance MonadSimplify Simplifier where
135-
askMetadataTools = asks metadataTools
136-
{-# INLINE askMetadataTools #-}
137-
138-
simplifyPattern sideCondition patt =
139-
traceProfSimplify patt (Pattern.makeEvaluate sideCondition patt)
140-
{-# INLINE simplifyPattern #-}
141-
142-
simplifyTerm = TermLike.simplify
143-
{-# INLINE simplifyTerm #-}
144-
145-
simplifyCondition topCondition conditional = do
146-
ConditionSimplifier simplify <- asks simplifierCondition
147-
simplify topCondition conditional
148-
{-# INLINE simplifyCondition #-}
149-
150-
askSimplifierAxioms = asks simplifierAxioms
151-
{-# INLINE askSimplifierAxioms #-}
152-
153-
localSimplifierAxioms locally =
154-
local $ \env@Env{simplifierAxioms} ->
155-
env{simplifierAxioms = locally simplifierAxioms}
156-
{-# INLINE localSimplifierAxioms #-}
157-
158-
askMemo = asks memo
159-
{-# INLINE askMemo #-}
160-
161-
askInjSimplifier = asks injSimplifier
162-
{-# INLINE askInjSimplifier #-}
163-
164-
askOverloadSimplifier = asks overloadSimplifier
165-
{-# INLINE askOverloadSimplifier #-}
166-
167-
getCache = get
168-
{-# INLINE getCache #-}
169-
170-
putCache = put
171-
{-# INLINE putCache #-}
172-
173-
askSimplifierXSwitch = asks simplifierXSwitch
174-
{-# INLINE askSimplifierXSwitch #-}
175-
176-
-- | Run a simplification, returning the results along all branches.
177-
runSimplifierBranch ::
178-
Env ->
179-
-- | simplifier computation
180-
LogicT Simplifier a ->
181-
SMT [a]
182-
runSimplifierBranch env = runSimplifier env . observeAllT
183-
184-
{- | Run a simplification, returning the result of only one branch.
185-
186-
__Warning__: @runSimplifier@ calls 'error' if the 'Simplifier' does not contain
187-
exactly one branch. Use 'evalSimplifierBranch' to evaluation simplifications
188-
that may branch.
189-
-}
190-
runSimplifier :: Env -> Simplifier a -> SMT a
191-
runSimplifier env (Simplifier simplifier) =
192-
runReaderT (evalStateT simplifier initCache) env
193-
194110
mkSimplifierEnv ::
195111
SimplifierXSwitch ->
196112
VerifiedModuleSyntax Attribute.Symbol ->
@@ -207,6 +123,8 @@ mkSimplifierEnv simplifierXSwitch verifiedModule sortGraph overloadGraph metadat
207123
Env
208124
{ metadataTools = metadataTools
209125
, simplifierCondition
126+
, simplifierPattern
127+
, simplifierTerm
210128
, simplifierAxioms = earlySimplifierAxioms
211129
, memo = Memo.forgetful
212130
, injSimplifier
@@ -222,6 +140,12 @@ mkSimplifierEnv simplifierXSwitch verifiedModule sortGraph overloadGraph metadat
222140
simplifierCondition =
223141
{-# SCC "evalSimplifier/simplifierCondition" #-}
224142
Condition.create substitutionSimplifier
143+
simplifierPattern sideCondition patt =
144+
{-# SCC "evalSimplifier/simplifierPattern" #-}
145+
traceProfSimplify patt (Pattern.makeEvaluate sideCondition patt)
146+
simplifierTerm =
147+
{-# SCC "evalSimplifier/simplifierTerm" #-}
148+
TermLike.simplify
225149
-- Initialize without any builtin or axiom simplifiers.
226150
earlySimplifierAxioms = Map.empty
227151

@@ -259,6 +183,8 @@ mkSimplifierEnv simplifierXSwitch verifiedModule sortGraph overloadGraph metadat
259183
Env
260184
{ metadataTools
261185
, simplifierCondition
186+
, simplifierPattern
187+
, simplifierTerm
262188
, simplifierAxioms
263189
, memo
264190
, injSimplifier

kore/src/Kore/Simplify/Overloading.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import Kore.Rewrite.RewritingVariable (
4949
import Kore.Simplify.OverloadSimplifier
5050
import Kore.Simplify.Simplify as Simplifier (
5151
MonadSimplify (..),
52+
askOverloadSimplifier,
5253
)
5354
import Pair
5455
import Prelude.Kore hiding (

0 commit comments

Comments
 (0)