@@ -19,13 +19,13 @@ import Data.Limit (
1919 Limit (.. ),
2020 )
2121import qualified Data.Limit as Limit
22+ import qualified Data.Map.Strict as Map
2223import qualified Kore.Internal.Condition as Condition (
2324 bottom ,
2425 fromSubstitution ,
2526 )
2627import qualified Kore.Internal.MultiOr as MultiOr (
2728 make ,
28- mergeAll ,
2929 )
3030import Kore.Internal.OrCondition (
3131 OrCondition ,
@@ -38,6 +38,13 @@ import qualified Kore.Internal.Pattern as Conditional
3838import 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+ )
4148import Kore.Rewrite.RewritingVariable (
4249 RewritingVariableName ,
4350 )
@@ -48,13 +55,8 @@ import qualified Kore.Rewrite.Strategy as Strategy
4855import Kore.Rewrite.Substitution (
4956 mergePredicatesAndSubstitutions ,
5057 )
51- import qualified Kore.Simplify.Not as Not
5258import Kore.Simplify.Simplify
5359import Kore.TopBottom
54- import Kore.Unification.Procedure (
55- unificationProcedure ,
56- )
57- import qualified Kore.Unification.UnifierT as Unifier
5860import Logic (
5961 LogicT ,
6062 )
@@ -130,28 +132,25 @@ matchWith ::
130132 Pattern RewritingVariableName ->
131133 MaybeT m (OrCondition RewritingVariableName )
132134matchWith 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