Skip to content

Commit 3fd34f9

Browse files
Infer that terms are defined to send to SMT solver (#2292)
* Mock SMT env: add function for declaring arbitrary symbols * Separate translatePattern from translatePredicateWith * Export translatePattern, add warning * Test pattern translator, add tests for expected behavior * Fix nesting in expected result * Make Translator a newtype; change test data * Translator: use RWST instead of StateT * Add TranslatorEnv as Reader of Translator; use it to send defined patts to SMT * Comment out failing tests * Switch env to True whenever we find Defined at top * Clean-up * Add documentation * Update kore/src/Kore/Step/SMT/Translate.hs Co-authored-by: Thomas Tuegel <[email protected]> * Address review comment * Add MonadSimplify instance Co-authored-by: Thomas Tuegel <[email protected]> Co-authored-by: Thomas Tuegel <[email protected]>
1 parent bd765b7 commit 3fd34f9

File tree

5 files changed

+322
-135
lines changed

5 files changed

+322
-135
lines changed

kore/src/Kore/Step/SMT/Evaluator.hs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import Prelude.Kore
1919

2020
import Control.Error
2121
( MaybeT
22-
, hoistMaybe
2322
, runMaybeT
2423
)
2524
import qualified Control.Lens as Lens
@@ -194,7 +193,7 @@ decidePredicate predicates =
194193
-- | Run the SMT query once.
195194
query :: MaybeT simplifier Result
196195
query =
197-
SMT.withSolver $ evalTranslator $ do
196+
SMT.withSolver . evalTranslator $ do
198197
tools <- Simplifier.askMetadataTools
199198
predicates' <- traverse (translatePredicate tools) predicates
200199
traverse_ SMT.assert predicates'
@@ -215,7 +214,7 @@ translatePredicate
215214
)
216215
=> SmtMetadataTools Attribute.Symbol
217216
-> Predicate variable
218-
-> Translator m variable SExpr
217+
-> Translator variable m SExpr
219218
translatePredicate tools predicate =
220219
give tools $ translatePredicateWith translateTerm predicate
221220

@@ -226,7 +225,7 @@ translateTerm
226225
=> MonadLog m
227226
=> SExpr -- ^ type name
228227
-> TranslateItem variable -- ^ uninterpreted pattern
229-
-> Translator m variable SExpr
228+
-> Translator variable m SExpr
230229
translateTerm smtType (QuantifiedVariable var) = do
231230
n <- Counter.increment
232231
let varName = "<" <> Text.pack (show n) <> ">"
@@ -277,24 +276,25 @@ lookupVariable
277276
:: InternalVariable variable
278277
=> Monad m
279278
=> TermLike.ElementVariable variable
280-
-> Translator m variable SExpr
279+
-> Translator variable m SExpr
281280
lookupVariable var =
282281
lookupQuantifiedVariable <|> lookupFreeVariable
283282
where
284283
lookupQuantifiedVariable = do
285284
TranslatorState { quantifiedVars } <- State.get
286-
hoistMaybe $ SMT.Atom . smtName <$> Map.lookup var quantifiedVars
285+
maybeToTranslator
286+
$ SMT.Atom . smtName <$> Map.lookup var quantifiedVars
287287
lookupFreeVariable = do
288288
TranslatorState { freeVars} <- State.get
289-
hoistMaybe $ Map.lookup var freeVars
289+
maybeToTranslator $ Map.lookup var freeVars
290290

291291
declareVariable
292292
:: InternalVariable variable
293293
=> SMT.MonadSMT m
294294
=> MonadLog m
295295
=> SExpr -- ^ type name
296296
-> TermLike.ElementVariable variable -- ^ variable to be declared
297-
-> Translator m variable SExpr
297+
-> Translator variable m SExpr
298298
declareVariable t variable = do
299299
n <- Counter.increment
300300
let varName = "<" <> Text.pack (show n) <> ">"
@@ -308,7 +308,7 @@ logVariableAssignment
308308
=> MonadLog m
309309
=> Counter.Natural
310310
-> TermLike variable -- ^ variable to be declared
311-
-> Translator m variable ()
311+
-> Translator variable m ()
312312
logVariableAssignment n pat =
313313
logDebug
314314
. Text.pack . show

kore/src/Kore/Step/SMT/Lemma.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ translateUninterpreted
100100
)
101101
=> SExpr -- ^ type name
102102
-> TranslateItem variable -- ^ uninterpreted pattern
103-
-> Translator m variable SExpr
103+
-> Translator variable m SExpr
104104
translateUninterpreted _ (QuantifiedVariable _) =
105105
empty
106106
translateUninterpreted t (UninterpretedTerm pat)

0 commit comments

Comments
 (0)