summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-06-15 09:40:34 -0500
committerGitHub <noreply@github.com>2020-06-15 07:40:34 -0700
commit5de97c3efe8794bf7e39774686dca81a1982a8ed (patch)
tree092aca5e779a1a719e88a78ff4755df88210cad9
parent60ed666d657bfcd69f48821c78a34696796df5fb (diff)
Do RE derivation inference only for concrete constant RE (#4609)
The RE derive inference was not designed to handle re.comp. This makes the application of this inference more conservative.
-rw-r--r--src/theory/strings/regexp_solver.cpp3
-rw-r--r--test/regress/CMakeLists.txt1
-rw-r--r--test/regress/regress1/strings/issue4608-re-derive.smt26
3 files changed, 9 insertions, 1 deletions
diff --git a/src/theory/strings/regexp_solver.cpp b/src/theory/strings/regexp_solver.cpp
index db7e2d836..c9cee97a0 100644
--- a/src/theory/strings/regexp_solver.cpp
+++ b/src/theory/strings/regexp_solver.cpp
@@ -599,7 +599,8 @@ bool RegExpSolver::deriveRegExp(Node x,
Trace("regexp-derive") << "RegExpSolver::deriveRegExp: x=" << x
<< ", r= " << r << std::endl;
CVC4::String s = getHeadConst(x);
- if (!s.empty() && d_regexp_opr.checkConstRegExp(r))
+ // only allow RE_DERIVE for concrete constant regular expressions
+ if (!s.empty() && d_regexp_opr.getRegExpConstType(r) == RE_C_CONRETE_CONSTANT)
{
Node conc = Node::null();
Node dc = r;
diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt
index 69378a559..fb0b38143 100644
--- a/test/regress/CMakeLists.txt
+++ b/test/regress/CMakeLists.txt
@@ -1774,6 +1774,7 @@ set(regress_1_tests
regress1/strings/issue3357.smt2
regress1/strings/issue3657-unexpectedUnsatCVC4.smt2
regress1/strings/issue4379.smt2
+ regress1/strings/issue4608-re-derive.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2
diff --git a/test/regress/regress1/strings/issue4608-re-derive.smt2 b/test/regress/regress1/strings/issue4608-re-derive.smt2
new file mode 100644
index 000000000..c11f7deae
--- /dev/null
+++ b/test/regress/regress1/strings/issue4608-re-derive.smt2
@@ -0,0 +1,6 @@
+(set-logic QF_S)
+(set-info :status sat)
+(declare-fun a () String)
+(assert (str.in_re (str.++ "AB" a) (re.inter (re.comp (str.to_re "AB"))
+(re.* (re.diff (str.to_re "AB") (str.to_re ""))))))
+(check-sat)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback