summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2019-10-14 13:24:27 -0500
committerGitHub <noreply@github.com>2019-10-14 13:24:27 -0500
commitd733e417bf9c96ae3da449e194e57d5b06a0607a (patch)
treeab5ccda4442bbad0ce105e08c3d44aa75723684c
parent04d6ede62919e469416765416f9721d2d2f67ee9 (diff)
Ensure lemmas from sygus repair const are guarded (#3385)
-rw-r--r--src/theory/quantifiers/sygus/cegis.cpp9
-rw-r--r--test/regress/CMakeLists.txt1
-rw-r--r--test/regress/regress1/sygus/repair-const-unk.sy17
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)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback