Skip to content

Commit 7d3ee1b

Browse files
Inefficient Equation renaming (#2438)
Co-authored-by: Thomas Tuegel <[email protected]> Co-authored-by: andreiburdusa <[email protected]> Co-authored-by: Thomas Tuegel <[email protected]>
1 parent 7504a9f commit 7d3ee1b

File tree

3 files changed

+39
-20
lines changed

3 files changed

+39
-20
lines changed

kore/src/Kore/Equation/Application.hs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import Kore.Internal.TermLike
9595
import qualified Kore.Internal.TermLike as TermLike
9696
import Kore.Rewriting.RewritingVariable
9797
( RewritingVariableName
98+
, withoutEquationVariables
9899
)
99100
import Kore.Step.Axiom.Matcher
100101
( MatchResult
@@ -156,6 +157,7 @@ attemptEquation
156157
-> Equation RewritingVariableName
157158
-> simplifier (AttemptEquationResult RewritingVariableName)
158159
attemptEquation sideCondition termLike equation =
160+
assertNoEquationVar (freeVariables termLike) $
159161
whileDebugAttemptEquation' $ runExceptT $ do
160162
let Equation { left, argument, antiLeft } = equationRenamed
161163
(equation', predicate) <- matchAndApplyResults left argument antiLeft
@@ -177,25 +179,27 @@ attemptEquation sideCondition termLike equation =
177179
matchAndApplyResults left' argument' antiLeft'
178180
| isNothing argument'
179181
, isNothing antiLeft' = do
180-
matchResult <- match left' termLike & whileMatch
181-
applyMatchResult equationRenamed matchResult
182-
& whileApplyMatchResult
182+
matchResult <- match left' termLike & whileMatch
183+
applyMatchResult equationRenamed matchResult
184+
& whileApplyMatchResult
183185
| otherwise = do
184-
(matchPredicate, matchSubstitution) <-
185-
match left' termLike
186-
& whileMatch
187-
matchResults <-
188-
applySubstitutionAndSimplify
189-
argument'
190-
antiLeft'
191-
matchSubstitution
192-
& whileMatch
193-
(equation', predicate) <-
194-
applyAndSelectMatchResult matchResults
195-
return
196-
( equation'
197-
, makeAndPredicate predicate matchPredicate
198-
)
186+
(matchPredicate, matchSubstitution) <-
187+
match left' termLike
188+
& whileMatch
189+
matchResults <-
190+
applySubstitutionAndSimplify
191+
argument'
192+
antiLeft'
193+
matchSubstitution
194+
& whileMatch
195+
(equation', predicate) <-
196+
applyAndSelectMatchResult matchResults
197+
assertNoEquationVar (freeVariables equation' <> freeVariables predicate)
198+
$ return
199+
( equation'
200+
, makeAndPredicate predicate matchPredicate
201+
)
202+
assertNoEquationVar = assert . withoutEquationVariables
199203

200204
applyAndSelectMatchResult
201205
:: [MatchResult RewritingVariableName]

kore/src/Kore/Rewriting/RewritingVariable.hs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ module Kore.Rewriting.RewritingVariable
1111
, isEquationVariable
1212
, isConfigVariable
1313
, isRuleVariable
14+
, isSomeEquationVariable
15+
, isSomeEquationVariableName
1416
, isSomeConfigVariable
1517
, isSomeConfigVariableName
1618
, isSomeRuleVariable
@@ -34,6 +36,7 @@ module Kore.Rewriting.RewritingVariable
3436
, resetConfigVariable
3537
, resetRuleVariable
3638
, getRewritingVariable
39+
, withoutEquationVariables
3740
-- * Exported for unparsing/testing
3841
, getRewritingPattern
3942
, getRewritingTerm
@@ -52,6 +55,7 @@ import Kore.AST.AstWithLocation
5255
)
5356
import Kore.Attribute.Pattern.FreeVariables
5457
( FreeVariables
58+
, toNames
5559
)
5660
import qualified Kore.Attribute.Pattern.FreeVariables as FreeVariables
5761
import Kore.Internal.Pattern as Pattern
@@ -285,6 +289,12 @@ assertRemainderPattern pattern' =
285289
where
286290
freeVars = freeVariables pattern' & FreeVariables.toList
287291

292+
isSomeEquationVariable :: SomeVariable RewritingVariableName -> Bool
293+
isSomeEquationVariable = isSomeEquationVariableName . variableName
294+
295+
isSomeEquationVariableName :: SomeVariableName RewritingVariableName -> Bool
296+
isSomeEquationVariableName = foldSomeVariableName (pure isEquationVariable)
297+
288298
isSomeConfigVariable :: SomeVariable RewritingVariableName -> Bool
289299
isSomeConfigVariable = isSomeConfigVariableName . variableName
290300

@@ -302,3 +312,8 @@ isElementRuleVariable = isElementRuleVariableName . variableName
302312

303313
isElementRuleVariableName :: ElementVariableName RewritingVariableName -> Bool
304314
isElementRuleVariableName = any isRuleVariable
315+
316+
withoutEquationVariables
317+
:: FreeVariables RewritingVariableName -> Bool
318+
withoutEquationVariables fv =
319+
(not . any isSomeEquationVariableName) (toNames fv)

kore/src/Kore/Step/Simplification/Data.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import Kore.Internal.TermLike
5555
)
5656
import Kore.Rewriting.RewritingVariable
5757
( RewritingVariableName
58-
, mkRuleVariable
58+
, mkEquationVariable
5959
)
6060
import qualified Kore.Step.Axiom.EvaluationStrategy as Axiom.EvaluationStrategy
6161
import Kore.Step.Axiom.Identifier
@@ -249,7 +249,7 @@ evalSimplifier verifiedModule simplifier = do
249249
initialize = do
250250
equations <-
251251
Equation.simplifyExtractedEquations
252-
$ (Map.map . fmap . Equation.mapVariables $ pure mkRuleVariable)
252+
$ (Map.map . fmap . Equation.mapVariables $ pure mkEquationVariable)
253253
$ Equation.extractEquations verifiedModule'
254254
let
255255
builtinEvaluators, userEvaluators, simplifierAxioms

0 commit comments

Comments
 (0)