diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2019-10-14 13:24:27 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-14 13:24:27 -0500 |
commit | d733e417bf9c96ae3da449e194e57d5b06a0607a (patch) | |
tree | ab5ccda4442bbad0ce105e08c3d44aa75723684c | |
parent | 04d6ede62919e469416765416f9721d2d2f67ee9 (diff) |
Ensure lemmas from sygus repair const are guarded (#3385)
-rw-r--r-- | src/theory/quantifiers/sygus/cegis.cpp | 9 | ||||
-rw-r--r-- | test/regress/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/regress/regress1/sygus/repair-const-unk.sy | 17 |
3 files changed, 24 insertions, 3 deletions
diff --git a/src/theory/quantifiers/sygus/cegis.cpp b/src/theory/quantifiers/sygus/cegis.cpp index c319d7a37..96f347890 100644 --- a/src/theory/quantifiers/sygus/cegis.cpp +++ b/src/theory/quantifiers/sygus/cegis.cpp @@ -247,9 +247,11 @@ bool Cegis::constructCandidates(const std::vector<Node>& enums, enums[i], enum_values[i], exp); } Assert(!exp.empty()); - Node expn = - exp.size() == 1 ? exp[0] : NodeManager::currentNM()->mkNode(AND, exp); - lems.push_back(expn.negate()); + NodeManager* nm = NodeManager::currentNM(); + Node expn = exp.size() == 1 ? exp[0] : nm->mkNode(AND, exp); + // must guard it + expn = nm->mkNode(OR, d_parent->getGuard().negate(), expn.negate()); + lems.push_back(expn); return false; } } @@ -300,6 +302,7 @@ bool Cegis::processConstructCandidates(const std::vector<Node>& enums, void Cegis::addRefinementLemma(Node lem) { + Trace("cegis-rl") << "Cegis::addRefinementLemma: " << lem << std::endl; d_refinement_lemmas.push_back(lem); // apply existing substitution Node slem = lem; diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt index 1ed879400..cbe5f2e35 100644 --- a/test/regress/CMakeLists.txt +++ b/test/regress/CMakeLists.txt @@ -1726,6 +1726,7 @@ set(regress_1_tests regress1/sygus/qe.sy regress1/sygus/qf_abv.smt2 regress1/sygus/real-grammar.sy + regress1/sygus/repair-const-unk.sy regress1/sygus/simple-regexp.sy regress1/sygus/stopwatch-bt.sy regress1/sygus/strings-no-syntax.sy diff --git a/test/regress/regress1/sygus/repair-const-unk.sy b/test/regress/regress1/sygus/repair-const-unk.sy new file mode 100644 index 000000000..fdd818592 --- /dev/null +++ b/test/regress/regress1/sygus/repair-const-unk.sy @@ -0,0 +1,17 @@ +; EXPECT: unknown +; COMMAND-LINE: --sygus-out=status --sygus-repair-const --lang=sygus2 +(set-logic LIA) +(synth-fun f ((x Int) (y Int)) Int + ((Start Int) (CInt Int)) + ( + (Start Int ((+ (* CInt x) (* CInt y) CInt))) + (CInt Int ((Constant Int))) + ) +) +(declare-var x Int) +(declare-var y Int) +(constraint (= (f 0 0) 100)) +(constraint (= (f 1 1) 110)) +(constraint (= (f 2 1) 117)) +(constraint (>= (- (* 3 (f x y)) (f (* 2 x) (+ y 1))) (+ (* 7 x) (* 6 y)))) +(check-synth) |