summaryrefslogtreecommitdiff
path: root/src/smt/command.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-09-14 16:29:32 -0500
committerGitHub <noreply@github.com>2021-09-14 21:29:32 +0000
commit74c5067d81b8384701cff7f6e7b697d7fe67cf58 (patch)
tree686d06c8fe27f122a0c8a6ad05d74c487570e966 /src/smt/command.cpp
parentd34e563fe48c42aa06eea44191a21dcf29772339 (diff)
Support sygus version 2.1 command assume (#7081)
Adds support for global assumptions in sygus files. Also guards against cases of declare-const, which should be prohibited in sygus.
Diffstat (limited to 'src/smt/command.cpp')
-rw-r--r--src/smt/command.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/smt/command.cpp b/src/smt/command.cpp
index adfd2f71d..4b04abcb2 100644
--- a/src/smt/command.cpp
+++ b/src/smt/command.cpp
@@ -732,7 +732,9 @@ void SynthFunCommand::toStream(std::ostream& out,
/* class SygusConstraintCommand */
/* -------------------------------------------------------------------------- */
-SygusConstraintCommand::SygusConstraintCommand(const api::Term& t) : d_term(t)
+SygusConstraintCommand::SygusConstraintCommand(const api::Term& t,
+ bool isAssume)
+ : d_term(t), d_isAssume(isAssume)
{
}
@@ -740,7 +742,14 @@ void SygusConstraintCommand::invoke(api::Solver* solver, SymbolManager* sm)
{
try
{
- solver->addSygusConstraint(d_term);
+ if (d_isAssume)
+ {
+ solver->addSygusAssume(d_term);
+ }
+ else
+ {
+ solver->addSygusConstraint(d_term);
+ }
d_commandStatus = CommandSuccess::instance();
}
catch (exception& e)
@@ -753,12 +762,12 @@ api::Term SygusConstraintCommand::getTerm() const { return d_term; }
Command* SygusConstraintCommand::clone() const
{
- return new SygusConstraintCommand(d_term);
+ return new SygusConstraintCommand(d_term, d_isAssume);
}
std::string SygusConstraintCommand::getCommandName() const
{
- return "constraint";
+ return d_isAssume ? "assume" : "constraint";
}
void SygusConstraintCommand::toStream(std::ostream& out,
@@ -766,7 +775,15 @@ void SygusConstraintCommand::toStream(std::ostream& out,
size_t dag,
Language language) const
{
- Printer::getPrinter(language)->toStreamCmdConstraint(out, termToNode(d_term));
+ if (d_isAssume)
+ {
+ Printer::getPrinter(language)->toStreamCmdAssume(out, termToNode(d_term));
+ }
+ else
+ {
+ Printer::getPrinter(language)->toStreamCmdConstraint(out,
+ termToNode(d_term));
+ }
}
/* -------------------------------------------------------------------------- */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback