@@ -24,25 +24,19 @@ import Data.Map.Strict
24
24
import Kore.Equation.Equation
25
25
import Kore.Internal.Conditional
26
26
( Conditional (.. )
27
+ , fromPredicate
27
28
)
28
29
import Kore.Internal.MultiAnd
29
30
( MultiAnd
30
31
)
31
32
import qualified Kore.Internal.MultiAnd as MultiAnd
32
- import Kore.Internal.OrPattern
33
- ( OrPattern
34
- )
35
- import Kore.Internal.Pattern
36
- ( Pattern
37
- )
38
- import qualified Kore.Internal.Pattern as Pattern
39
33
import qualified Kore.Internal.Predicate as Predicate
34
+ import qualified Kore.Internal.SideCondition as SideCondition
40
35
import qualified Kore.Internal.Substitution as Substitution
41
36
import qualified Kore.Internal.TermLike as TermLike
42
37
import Kore.Rewriting.RewritingVariable
43
38
( RewritingVariableName
44
39
)
45
- import qualified Kore.Step.Simplification.Pattern as Pattern
46
40
import Kore.Step.Simplification.Simplify
47
41
( MonadSimplify
48
42
)
@@ -82,16 +76,14 @@ simplifyEquation
82
76
-> simplifier (MultiAnd (Equation RewritingVariableName ))
83
77
simplifyEquation equation@ (Equation _ _ _ _ _ _ _) =
84
78
do
85
- simplifiedResults <-
86
- simplifyPattern leftWithArgument
87
- Monad. when
88
- (any (not . isTop . predicate) simplifiedResults)
89
- (throwE equation)
90
- simplified <- lift $ Logic. scatter simplifiedResults
91
- let Conditional { term, predicate, substitution } = simplified
92
- Monad. unless (isTop predicate) (throwE equation)
79
+ simplifiedCond <-
80
+ Simplifier. simplifyCondition
81
+ SideCondition. top
82
+ (fromPredicate argument')
83
+ let Conditional { substitution, predicate } = simplifiedCond
84
+ lift $ Monad. unless (isTop predicate) (throwE equation)
93
85
let subst = Substitution. toMap substitution
94
- left' = TermLike. substitute subst term
86
+ left' = TermLike. substitute subst left
95
87
requires' = Predicate. substitute subst requires
96
88
antiLeft' = Predicate. substitute subst <$> antiLeft
97
89
right' = TermLike. substitute subst right
@@ -105,17 +97,14 @@ simplifyEquation equation@(Equation _ _ _ _ _ _ _) =
105
97
, ensures = Predicate. forgetSimplified ensures'
106
98
, attributes = attributes
107
99
}
108
- & returnOriginalIfAborted
109
100
& Logic. observeAllT
101
+ & returnOriginalIfAborted
110
102
& fmap MultiAnd. make
111
103
where
112
- leftWithArgument =
113
- maybe
114
- (Pattern. fromTermLike left)
115
- (Pattern. fromTermAndPredicate left)
116
- argument
104
+ argument' =
105
+ fromMaybe Predicate. makeTruePredicate argument
117
106
returnOriginalIfAborted =
118
- fmap (either id id ) . runExceptT
107
+ fmap (either ( : [] ) id ) . runExceptT
119
108
Equation
120
109
{ requires
121
110
, argument
@@ -125,12 +114,3 @@ simplifyEquation equation@(Equation _ _ _ _ _ _ _) =
125
114
, ensures
126
115
, attributes
127
116
} = equation
128
-
129
- -- | Simplify a 'Pattern' using only matching logic rules.
130
- simplifyPattern
131
- :: MonadSimplify simplifier
132
- => Pattern RewritingVariableName
133
- -> simplifier (OrPattern RewritingVariableName )
134
- simplifyPattern =
135
- Simplifier. localSimplifierAxioms (const mempty )
136
- . Pattern. simplify
0 commit comments