Skip to content

Commit dd3d4d9

Browse files
andreiburdusagithub-actions
andauthored
Search: use matching instead of unification (#2931)
* Search: use matching instead of unification * Search: use matching instead of unification * Cleanup * Add type annotation * Format with fourmolu * Empty commit Co-authored-by: github-actions <[email protected]>
1 parent f5bed2d commit dd3d4d9

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

kore/src/Kore/Rewrite/Search.hs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import Data.Limit (
1919
Limit (..),
2020
)
2121
import qualified Data.Limit as Limit
22+
import qualified Data.Map.Strict as Map
2223
import qualified Kore.Internal.Condition as Condition (
2324
bottom,
2425
fromSubstitution,
2526
)
2627
import qualified Kore.Internal.MultiOr as MultiOr (
2728
make,
28-
mergeAll,
2929
)
3030
import Kore.Internal.OrCondition (
3131
OrCondition,
@@ -38,6 +38,13 @@ import qualified Kore.Internal.Pattern as Conditional
3838
import Kore.Internal.SideCondition (
3939
SideCondition,
4040
)
41+
import Kore.Internal.Substitution (
42+
Substitution,
43+
)
44+
import Kore.Rewrite.Axiom.Matcher (
45+
MatchResult,
46+
matchIncremental,
47+
)
4148
import Kore.Rewrite.RewritingVariable (
4249
RewritingVariableName,
4350
)
@@ -48,13 +55,8 @@ import qualified Kore.Rewrite.Strategy as Strategy
4855
import Kore.Rewrite.Substitution (
4956
mergePredicatesAndSubstitutions,
5057
)
51-
import qualified Kore.Simplify.Not as Not
5258
import Kore.Simplify.Simplify
5359
import Kore.TopBottom
54-
import Kore.Unification.Procedure (
55-
unificationProcedure,
56-
)
57-
import qualified Kore.Unification.UnifierT as Unifier
5860
import Logic (
5961
LogicT,
6062
)
@@ -130,28 +132,25 @@ matchWith ::
130132
Pattern RewritingVariableName ->
131133
MaybeT m (OrCondition RewritingVariableName)
132134
matchWith sideCondition e1 e2 = do
133-
unifiers <-
134-
unificationProcedure sideCondition t1 t2
135-
& Unifier.runUnifierT Not.notSimplifier
136-
& lift
135+
matchResults <- MaybeT $ matchIncremental sideCondition t1 t2
137136
let mergeAndEvaluate ::
138-
Condition RewritingVariableName ->
137+
MatchResult RewritingVariableName ->
139138
m (OrCondition RewritingVariableName)
140139
mergeAndEvaluate predSubst = do
141140
results <- Logic.observeAllT $ mergeAndEvaluateBranches predSubst
142141
return (MultiOr.make results)
143142
mergeAndEvaluateBranches ::
144-
Condition RewritingVariableName ->
143+
MatchResult RewritingVariableName ->
145144
LogicT m (Condition RewritingVariableName)
146-
mergeAndEvaluateBranches predSubst = do
145+
mergeAndEvaluateBranches (predicate, substitution) = do
147146
merged <-
148147
mergePredicatesAndSubstitutions
149148
sideCondition
150-
[ Conditional.predicate predSubst
149+
[ predicate
151150
, Conditional.predicate e1
152151
, Conditional.predicate e2
153152
]
154-
[Conditional.substitution predSubst]
153+
[from @(Map.Map _ _) @(Substitution _) substitution]
155154
lift (SMT.evalConditional merged Nothing) >>= \case
156155
Nothing ->
157156
mergePredicatesAndSubstitutions
@@ -163,11 +162,9 @@ matchWith sideCondition e1 e2 = do
163162
Conditional.substitution merged
164163
& Condition.fromSubstitution
165164
& return
166-
results <- lift $ traverse mergeAndEvaluate unifiers
167-
let orResults :: OrCondition RewritingVariableName
168-
orResults = MultiOr.mergeAll results
169-
guardAgainstBottom orResults
170-
return orResults
165+
results <- lift $ mergeAndEvaluate matchResults
166+
guardAgainstBottom results
167+
return results
171168
where
172169
t1 = Conditional.term e1
173170
t2 = Conditional.term e2

0 commit comments

Comments
 (0)