Skip to content

Commit 295d9b9

Browse files
authored
Do not return \bottom for unsolved List unification cases (#2693)
* Kore.Builtin.Builtin: Remove function unifyEqualsUnsolved This function tries to re-simplify unsolved unification problems, but it makes no sense to do that: we are already in the simplifier for the type of unification problem, and attempting to re-simplify the unsolved problem cannot make any more progress! * Kore.Builtin.List.unifyEquals: Do not return \bottom for unsolved cases
1 parent f16bd02 commit 295d9b9

File tree

4 files changed

+16
-80
lines changed

4 files changed

+16
-80
lines changed

kore/src/Kore/Builtin/Builtin.hs

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ module Kore.Builtin.Builtin (
3939
makeDomainValuePattern,
4040

4141
-- * Implementing builtin unification
42-
unifyEqualsUnsolved,
4342
module Kore.Builtin.Verifiers,
4443
) where
4544

@@ -78,51 +77,28 @@ import qualified Kore.IndexedModule.Resolvers as IndexedModule
7877
import Kore.Internal.ApplicationSorts
7978
import qualified Kore.Internal.OrPattern as OrPattern
8079
import Kore.Internal.Pattern (
81-
Conditional (..),
8280
Pattern,
8381
)
8482
import Kore.Internal.Pattern as Pattern (
8583
fromTermLike,
86-
top,
87-
withCondition,
8884
)
89-
import Kore.Internal.Predicate (
90-
makeEqualsPredicate,
91-
)
92-
import qualified Kore.Internal.Predicate as Predicate
9385
import Kore.Internal.SideCondition (
9486
SideCondition,
9587
)
96-
import qualified Kore.Internal.SideCondition as SideCondition (
97-
topTODO,
98-
)
9988
import Kore.Internal.TermLike as TermLike
100-
import Kore.Rewriting.RewritingVariable (
101-
RewritingVariableName,
102-
)
10389
import Kore.Sort (
10490
predicateSort,
10591
)
106-
import Kore.Step.Simplification.SimplificationType as SimplificationType (
107-
SimplificationType (..),
108-
)
10992
import Kore.Step.Simplification.Simplify (
11093
AttemptedAxiom (..),
11194
AttemptedAxiomResults (AttemptedAxiomResults),
11295
BuiltinAndAxiomSimplifier (BuiltinAndAxiomSimplifier),
11396
MonadSimplify,
11497
applicationAxiomSimplifier,
115-
makeEvaluateTermCeil,
11698
)
11799
import qualified Kore.Step.Simplification.Simplify as AttemptedAxiomResults (
118100
AttemptedAxiomResults (..),
119101
)
120-
import Kore.Unification.Unify (
121-
MonadUnify,
122-
)
123-
import qualified Kore.Unification.Unify as Monad.Unify (
124-
scatter,
125-
)
126102
import Kore.Unparser
127103
import Prelude.Kore
128104

@@ -494,27 +470,6 @@ getAttemptedAxiom ::
494470
getAttemptedAxiom attempt =
495471
fromMaybe NotApplicable <$> runMaybeT attempt
496472

497-
-- | Return an unsolved unification problem.
498-
unifyEqualsUnsolved ::
499-
MonadUnify unifier =>
500-
SimplificationType ->
501-
TermLike RewritingVariableName ->
502-
TermLike RewritingVariableName ->
503-
unifier (Pattern RewritingVariableName)
504-
unifyEqualsUnsolved SimplificationType.And a b = do
505-
let unified = TermLike.markSimplified $ mkAnd a b
506-
orCondition <-
507-
makeEvaluateTermCeil
508-
SideCondition.topTODO
509-
unified
510-
predicate <- Monad.Unify.scatter orCondition
511-
return (unified `Pattern.withCondition` predicate)
512-
unifyEqualsUnsolved SimplificationType.Equals a b =
513-
return
514-
Pattern.top
515-
{ predicate = Predicate.markSimplified $ makeEqualsPredicate a b
516-
}
517-
518473
makeDomainValueTerm ::
519474
InternalVariable variable =>
520475
Sort ->

kore/src/Kore/Builtin/List.hs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,6 @@ import qualified Kore.Internal.TermLike as TermLike (
103103
import Kore.Rewriting.RewritingVariable (
104104
RewritingVariableName,
105105
)
106-
import Kore.Step.Simplification.SimplificationType (
107-
SimplificationType,
108-
)
109106
import Kore.Step.Simplification.Simplify as Simplifier
110107
import Kore.Syntax.Sentence (
111108
SentenceSort (..),
@@ -384,7 +381,6 @@ builtinFunctions =
384381
unifyEquals ::
385382
forall unifier.
386383
MonadUnify unifier =>
387-
SimplificationType ->
388384
( TermLike RewritingVariableName ->
389385
TermLike RewritingVariableName ->
390386
unifier (Pattern RewritingVariableName)
@@ -393,7 +389,6 @@ unifyEquals ::
393389
TermLike RewritingVariableName ->
394390
MaybeT unifier (Pattern RewritingVariableName)
395391
unifyEquals
396-
simplificationType
397392
simplifyChild
398393
first
399394
second =
@@ -426,8 +421,8 @@ unifyEquals
426421
| otherwise = empty
427422
unifyEquals0 (App_ symbol1 args1) (App_ symbol2 args2)
428423
| isSymbolConcat symbol1
429-
, isSymbolConcat symbol1 =
430-
lift $ case (args1, args2) of
424+
, isSymbolConcat symbol2 =
425+
case (args1, args2) of
431426
( [InternalList_ builtin1, x1@(Var_ _)]
432427
, [InternalList_ builtin2, x2@(Var_ _)]
433428
) ->
@@ -437,6 +432,7 @@ unifyEquals
437432
x1
438433
builtin2
439434
x2
435+
& lift
440436
( [x1@(Var_ _), InternalList_ builtin1]
441437
, [x2@(Var_ _), InternalList_ builtin2]
442438
) ->
@@ -446,23 +442,20 @@ unifyEquals
446442
builtin1
447443
x2
448444
builtin2
445+
& lift
449446
_ -> empty
450-
unifyEquals0 dv1@(InternalList_ builtin1) pat2 =
447+
unifyEquals0 (InternalList_ builtin1) pat2 =
451448
case pat2 of
452449
InternalList_ builtin2 ->
453450
lift $ unifyEqualsConcrete builtin1 builtin2
454-
app@(App_ symbol2 args2)
451+
(App_ symbol2 args2)
455452
| isSymbolConcat symbol2 ->
456-
lift $ case args2 of
453+
case args2 of
457454
[InternalList_ builtin2, x@(Var_ _)] ->
458-
unifyEqualsFramedRight builtin1 builtin2 x
455+
unifyEqualsFramedRight builtin1 builtin2 x & lift
459456
[x@(Var_ _), InternalList_ builtin2] ->
460-
unifyEqualsFramedLeft builtin1 x builtin2
461-
[_, _] ->
462-
Builtin.unifyEqualsUnsolved
463-
simplificationType
464-
dv1
465-
app
457+
unifyEqualsFramedLeft builtin1 x builtin2 & lift
458+
[_, _] -> empty
466459
_ -> Builtin.wrongArity concatKey
467460
| otherwise -> empty
468461
_ -> empty

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ import Kore.Step.Simplification.NoConfusion
7373
import Kore.Step.Simplification.NotSimplifier
7474
import Kore.Step.Simplification.OverloadSimplifier as OverloadSimplifier
7575
import Kore.Step.Simplification.Overloading as Overloading
76-
import qualified Kore.Step.Simplification.SimplificationType as SimplificationType (
77-
SimplificationType (..),
78-
)
7976
import Kore.Step.Simplification.Simplify as Simplifier
8077
import Kore.Unification.Unify as Unify
8178
import Kore.Unparser
@@ -212,11 +209,7 @@ maybeTermEquals notSimplifier childTransformers first second = do
212209
, Builtin.Map.unifyEquals childTransformers first second
213210
, Builtin.Map.unifyNotInKeys childTransformers notSimplifier first second
214211
, Builtin.Set.unifyEquals childTransformers first second
215-
, Builtin.List.unifyEquals
216-
SimplificationType.Equals
217-
childTransformers
218-
first
219-
second
212+
, Builtin.List.unifyEquals childTransformers first second
220213
, domainValueAndConstructorErrors first second
221214
]
222215

@@ -300,11 +293,7 @@ maybeTermAnd notSimplifier childTransformers first second = do
300293
, Builtin.Signedness.unifyEquals first second
301294
, Builtin.Map.unifyEquals childTransformers first second
302295
, Builtin.Set.unifyEquals childTransformers first second
303-
, Builtin.List.unifyEquals
304-
SimplificationType.And
305-
childTransformers
306-
first
307-
second
296+
, Builtin.List.unifyEquals childTransformers first second
308297
, domainValueAndConstructorErrors first second
309298
, Error.hoistMaybe (functionAnd first second)
310299
]

kore/test/Test/Kore/Step/Simplification/AndTerms.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Data.Text (
2020
)
2121
import qualified Kore.Builtin.AssociativeCommutative as Ac
2222
import Kore.Internal.Condition as Condition
23-
import qualified Kore.Internal.Conditional as Conditional
23+
import Kore.Internal.From
2424
import Kore.Internal.InternalSet
2525
import Kore.Internal.MultiAnd (
2626
MultiAnd,
@@ -937,10 +937,9 @@ test_andTermsSimplification =
937937
actual <- unify term7 term8
938938
assertEqual "" expect actual
939939
, testCase "fallback for external List symbols" $ do
940-
let expectTerm = mkAnd rhs lhs
941-
expect =
942-
Pattern.fromTermLike expectTerm
943-
`Conditional.andPredicate` makeCeilPredicate expectTerm
940+
let expect =
941+
(Pattern.withCondition rhs)
942+
(fromEquals_ rhs lhs & Condition.fromPredicate)
944943
x = mkElemVar $ configElementVariableFromId "x" Mock.testSort
945944
l = mkElemVar $ configElementVariableFromId "y" Mock.listSort
946945
-- List unification does not fully succeed because the

0 commit comments

Comments
 (0)