From 5b00f8d6804bf9f71d6169634341011f99d59b8b Mon Sep 17 00:00:00 2001 From: Andrew Reynolds Date: Wed, 17 Apr 2019 10:26:46 -0500 Subject: Fix extended function decomposition (#2960) Fixes #2958. The issue was: we had substr(x,0,2) in R, and the "derivable substitution" modifed this to substr(substr(x,0,2),0,2) in R, since substr(x,0,2) was the representative of x (which is a bad choice, but regardless is legal). Then decomposition inference asked "can i reduce substr(substr(x,0,2),0,2) in R"? It determines substr(substr(x,0,2),0,2) in R rewrites to substr(x,0,2) in R, which is already true. However, substr(x,0,2) in R was what we started with. The fix makes things much more conservative: we never mark extended functions reduced based on decomposition, since there isnt a strong argument based on an ordering. --- test/regress/CMakeLists.txt | 1 + test/regress/regress0/strings/issue2958.smt2 | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 test/regress/regress0/strings/issue2958.smt2 (limited to 'test/regress') diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt index 97ca9a1be..25c0e92aa 100644 --- a/test/regress/CMakeLists.txt +++ b/test/regress/CMakeLists.txt @@ -832,6 +832,7 @@ set(regress_0_tests regress0/strings/ilc-like.smt2 regress0/strings/indexof-sym-simp.smt2 regress0/strings/issue1189.smt2 + regress0/strings/issue2958.smt2 regress0/strings/itos-entail.smt2 regress0/strings/leadingzero001.smt2 regress0/strings/loop001.smt2 diff --git a/test/regress/regress0/strings/issue2958.smt2 b/test/regress/regress0/strings/issue2958.smt2 new file mode 100644 index 000000000..7ed5ef7f3 --- /dev/null +++ b/test/regress/regress0/strings/issue2958.smt2 @@ -0,0 +1,7 @@ +(set-info :smt-lib-version 2.5) +(set-logic QF_SLIA) +(set-info :status unsat) +(declare-const x String) +(assert (not (str.prefixof "ab" x))) +(assert (str.in.re (str.substr x 0 2) (re.++ (str.to.re "ab") (re.* (str.to.re "dcab"))))) +(check-sat) -- cgit v1.2.3