diff options
author | Morgan Deters <mdeters@gmail.com> | 2010-10-09 04:24:15 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2010-10-09 04:24:15 +0000 |
commit | 97668b64994c5749a5a75822136de49841d2c15d (patch) | |
tree | 23dd1852741a847f6228cc063b0a5ad7ec3c2af3 /src/prop/prop_engine.cpp | |
parent | e63abd23b45a078a42cafb277a4817abb4d044a1 (diff) |
Model generation for arith, boolean, and uf theories via
(get-value ...) SMT-LIBv2 command. As per SMT-LIBv2 spec,
you must pass --interactive --produce-models on the command
line (although they don't currently make us do any extra
work). Closes bug #213.
Diffstat (limited to 'src/prop/prop_engine.cpp')
-rw-r--r-- | src/prop/prop_engine.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/prop/prop_engine.cpp b/src/prop/prop_engine.cpp index c49d5f38a..961a18bdb 100644 --- a/src/prop/prop_engine.cpp +++ b/src/prop/prop_engine.cpp @@ -130,6 +130,20 @@ Result PropEngine::checkSat() { return Result(result ? Result::SAT : Result::UNSAT); } +Node PropEngine::getValue(TNode node) { + Assert(node.getKind() == kind::VARIABLE && + node.getType().isBoolean()); + SatLiteralValue v = d_satSolver->value(d_cnfStream->getLiteral(node)); + if(v == l_True) { + return NodeManager::currentNM()->mkConst(true); + } else if(v == l_False) { + return NodeManager::currentNM()->mkConst(false); + } else { + Assert(v == l_Undef); + return Node::null(); + } +} + void PropEngine::push() { Assert(!d_inCheckSat, "Sat solver in solve()!"); Debug("prop") << "push()" << endl; |