Fix trivial solve method for single invocation (#3650)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 23 Jan 2020 21:53:48 +0000 (15:53 -0600)
committerGitHub <noreply@github.com>
Thu, 23 Jan 2020 21:53:48 +0000 (15:53 -0600)
src/theory/quantifiers/sygus/ce_guided_single_inv.cpp
test/regress/CMakeLists.txt
test/regress/regress1/sygus/issue3654.sy [new file with mode: 0644]

index e36047e67655a8dd0581588e739f60ecfbef189e..b6750c5da969cf681324a2e6941a582f4605807f 100644 (file)
@@ -676,7 +676,7 @@ bool CegSingleInv::solveTrivial(Node q)
     }
   }
   // if we solved all arguments
-  if (args.empty())
+  if (args.empty() && body.isConst() && !body.getConst<bool>())
   {
     Trace("cegqi-si-trivial-solve")
         << q << " is trivially solvable by substitution " << vars << " -> "
index 65d7f2b31ad8c9989e44df8d6402a98f1aeaaba8..518e3a889e52675d2ba14c5577edb73d57bc8557 100644 (file)
@@ -1787,6 +1787,7 @@ set(regress_1_tests
   regress1/sygus/issue3580.sy
   regress1/sygus/issue3634.smt2
   regress1/sygus/issue3635.smt2
+  regress1/sygus/issue3654.sy
   regress1/sygus/large-const-simp.sy
   regress1/sygus/let-bug-simp.sy
   regress1/sygus/list-head-x.sy
diff --git a/test/regress/regress1/sygus/issue3654.sy b/test/regress/regress1/sygus/issue3654.sy
new file mode 100644 (file)
index 0000000..12949c5
--- /dev/null
@@ -0,0 +1,24 @@
+; EXPECT: unknown
+; COMMAND-LINE: --sygus-out=status
+(set-logic ALL)
+(synth-fun inv-fn ((i Int) (x (Array Int Int)) (c Int)) Bool)
+
+(define-fun init-fn ((i Int) (x (Array Int Int)) (c Int)) Bool 
+       (and (= i 0)
+       (= (select x 10) c)))
+
+(define-fun post-fn ((i Int) (x (Array Int Int))(c Int)) Bool 
+       (exists ((index Int)) (and (= (select x index) c)
+       (forall ((index2 Int)) (=> (< index2 index) (not (= (select x index) c))))
+       )))
+
+(declare-var x (Array Int Int))
+(declare-var x! (Array Int Int))
+(declare-var i Int)
+(declare-var i! Int)
+(declare-var c Int)
+
+       
+(constraint (=> (init-fn i x c) (inv-fn i x c)))
+(constraint (=> (inv-fn i x c) (post-fn i x c)))
+(check-synth)