Do not expand theory definitions at the beginning of preprocessing (#5544)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 7 Dec 2020 15:51:32 +0000 (09:51 -0600)
committerGitHub <noreply@github.com>
Mon, 7 Dec 2020 15:51:32 +0000 (09:51 -0600)
This updates the preprocessor so that expand definitions does not expand theory symbols at the beginning of preprocessing.

This also restores the previous expandDefinitions method in arithmetic, which is required for correctly interpreting division by zero in models, but should not be applied at the beginning of preprocessing. Moreover it ensures that only partial operators are eliminated in arithmetic expandDefinitions, which required an additional argument partialOnly to arith::OperatorElim.

This adds -q to suppress warnings for many quantified regressions which now emit warnings with --check-model. This will be addressed later as part of CVC4/cvc4-wishues#43.

The purpose of this PR is two-fold:
(1) Currently our responses to get-value are incorrect for partial operators like div, mod, seq.nth since partial operators can be left unevaluated.
(2) The preprocessor should have the opportunity to rewrite and eliminate extended operators before they are expanded. This is required for addressing performance issues for non-linear arithmetic. It is also required for ensuring that trigger selection can be done properly for datatype selectors (to be addressed on a later PR).

49 files changed:
src/smt/process_assertions.cpp
src/theory/arith/arith_preprocess.cpp
src/theory/arith/arith_preprocess.h
src/theory/arith/operator_elim.cpp
src/theory/arith/operator_elim.h
src/theory/arith/theory_arith.cpp
src/theory/arith/theory_arith.h
src/theory/arrays/theory_arrays.cpp
src/theory/bv/theory_bv.cpp
src/theory/datatypes/theory_datatypes.cpp
src/theory/fp/theory_fp.cpp
src/theory/quantifiers/cegqi/ceg_instantiator.cpp
src/theory/quantifiers/quant_split.cpp
src/theory/sets/theory_sets.cpp
src/theory/sets/theory_sets.h
src/theory/strings/theory_strings.cpp
src/theory/theory_engine.cpp
test/regress/CMakeLists.txt
test/regress/regress0/arith/div-chainable.smt2
test/regress/regress0/arith/issue3413.smt2
test/regress/regress0/bug484.smt2
test/regress/regress0/datatypes/issue2838.cvc
test/regress/regress0/fmf/fmc_unsound_model.smt2
test/regress/regress0/fmf/sc_bad_model_1221.smt2
test/regress/regress1/arith/issue4985-model-success.smt2
test/regress/regress1/arith/issue4985b-model-success.smt2
test/regress/regress1/fmf/LeftistHeap.scala-8-ncm.smt2
test/regress/regress1/fmf/german169.smt2
test/regress/regress1/fmf/issue3626.smt2
test/regress/regress1/fmf/jasmin-cdt-crash.smt2
test/regress/regress1/fmf/loopy_coda.smt2
test/regress/regress1/fmf/lst-no-self-rev-exp.smt2
test/regress/regress1/fmf/memory_model-R_cpp-dd.cvc
test/regress/regress1/fmf/nun-0208-to.smt2
test/regress/regress1/ho/issue4065-no-rep.smt2
test/regress/regress1/quantifiers/issue5470-aext.smt2
test/regress/regress1/quantifiers/qbv-test-invert-bvudiv-0.smt2
test/regress/regress1/quantifiers/qbv-test-invert-bvudiv-1.smt2
test/regress/regress1/quantifiers/qbv-test-invert-bvurem-1-neq.smt2
test/regress/regress1/quantifiers/qbv-test-invert-bvurem-1.smt2
test/regress/regress1/quantifiers/qbv-test-urem-rewrite.smt2
test/regress/regress1/sets/is_singleton1.smt2
test/regress/regress1/sets/issue5271.smt2
test/regress/regress1/sets/sets-tuple-poly.cvc
test/regress/regress1/sets/univ-set-uf-elim.smt2
test/regress/regress1/sygus/issue3944-div-rewrite.smt2
test/regress/regress1/trim.cvc
test/regress/regress2/bv_to_int_5095_2.smt2
test/regress/regress2/quantifiers/net-policy-no-time.smt2

index fe3dbc62b2dbf0c40ba8cb839e577292ba50e24c..c2374c6ffb4963f240535688eff80def69697891 100644 (file)
@@ -130,7 +130,11 @@ bool ProcessAssertions::apply(Assertions& as)
       << "ProcessAssertions::processAssertions() : pre-definition-expansion"
       << endl;
   dumpAssertions("pre-definition-expansion", assertions);
-  d_exDefs.expandAssertions(assertions, false);
+  // Expand definitions, which replaces defined functions with their definition
+  // and does beta reduction. Notice we pass true as the second argument since
+  // we do not want to call theories to expand definitions here, since we want
+  // to give the opportunity to rewrite/preprocess terms before expansion.
+  d_exDefs.expandAssertions(assertions, true);
   Trace("smt-proc")
       << "ProcessAssertions::processAssertions() : post-definition-expansion"
       << endl;
index 577407c07db223f5e397a33b8ed3f5d54197a717..142f02eab38b4284544124c5dfb119bb005dec40 100644 (file)
@@ -25,7 +25,10 @@ ArithPreprocess::ArithPreprocess(ArithState& state,
     : d_im(im), d_opElim(pnm, info), d_reduced(state.getUserContext())
 {
 }
-TrustNode ArithPreprocess::eliminate(TNode n) { return d_opElim.eliminate(n); }
+TrustNode ArithPreprocess::eliminate(TNode n, bool partialOnly)
+{
+  return d_opElim.eliminate(n, partialOnly);
+}
 bool ArithPreprocess::reduceAssertion(TNode atom)
 {
   context::CDHashMap<Node, bool, NodeHashFunction>::const_iterator it =
index 165209bd93ef44962a1da4f0fdcce6f624f427e0..622357e738da0e6a68edf076c2ac6cee2ef48a1d 100644 (file)
@@ -46,8 +46,13 @@ class ArithPreprocess
    * Call eliminate operators on formula n, return the resulting trust node,
    * which is of TrustNodeKind REWRITE and whose node is the result of
    * eliminating extended operators from n.
+   *
+   * @param n The node to eliminate operators from
+   * @param partialOnly Whether we are eliminating partial operators only.
+   * @return the trust node proving (= n nr) where nr is the return of
+   * eliminating operators in n, or the null trust node if n was unchanged.
    */
-  TrustNode eliminate(TNode n);
+  TrustNode eliminate(TNode n, bool partialOnly = false);
   /**
    * Reduce assertion. This sends a lemma via the inference manager if atom
    * contains any extended operators. When applicable, the lemma is of the form:
index 4d4c4a6f5987695af887663b584cb89fb8df8d5d..fbd1798cd813f8585a33d1242f99654af91a3f6d 100644 (file)
@@ -46,21 +46,23 @@ void OperatorElim::checkNonLinearLogic(Node term)
   }
 }
 
-TrustNode OperatorElim::eliminate(Node n)
+TrustNode OperatorElim::eliminate(Node n, bool partialOnly)
 {
   TConvProofGenerator* tg = nullptr;
-  Node nn = eliminateOperators(n, tg);
+  Node nn = eliminateOperators(n, tg, partialOnly);
   if (nn != n)
   {
     // since elimination may introduce new operators to eliminate, we must
     // recursively eliminate result
-    Node nnr = eliminateOperatorsRec(nn, tg);
+    Node nnr = eliminateOperatorsRec(nn, tg, partialOnly);
     return TrustNode::mkTrustRewrite(n, nnr, nullptr);
   }
   return TrustNode::null();
 }
 
-Node OperatorElim::eliminateOperatorsRec(Node n, TConvProofGenerator* tg)
+Node OperatorElim::eliminateOperatorsRec(Node n,
+                                         TConvProofGenerator* tg,
+                                         bool partialOnly)
 {
   Trace("arith-elim") << "Begin elim: " << n << std::endl;
   NodeManager* nm = NodeManager::currentNM();
@@ -108,12 +110,12 @@ Node OperatorElim::eliminateOperatorsRec(Node n, TConvProofGenerator* tg)
       {
         ret = nm->mkNode(cur.getKind(), children);
       }
-      Node retElim = eliminateOperators(ret, tg);
+      Node retElim = eliminateOperators(ret, tg, partialOnly);
       if (retElim != ret)
       {
         // recursively eliminate operators in result, since some eliminations
         // are defined in terms of other non-standard operators.
-        ret = eliminateOperatorsRec(retElim, tg);
+        ret = eliminateOperatorsRec(retElim, tg, partialOnly);
       }
       visited[cur] = ret;
     }
@@ -123,7 +125,9 @@ Node OperatorElim::eliminateOperatorsRec(Node n, TConvProofGenerator* tg)
   return visited[n];
 }
 
-Node OperatorElim::eliminateOperators(Node node, TConvProofGenerator* tg)
+Node OperatorElim::eliminateOperators(Node node,
+                                      TConvProofGenerator* tg,
+                                      bool partialOnly)
 {
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
@@ -143,6 +147,11 @@ Node OperatorElim::eliminateOperators(Node node, TConvProofGenerator* tg)
     case TO_INTEGER:
     case IS_INTEGER:
     {
+      if (partialOnly)
+      {
+        // not eliminating total operators
+        return node;
+      }
       Node toIntSkolem;
       std::map<Node, Node>::const_iterator it = d_to_int_skolem.find(node[0]);
       if (it == d_to_int_skolem.end())
@@ -180,6 +189,11 @@ Node OperatorElim::eliminateOperators(Node node, TConvProofGenerator* tg)
     case INTS_DIVISION_TOTAL:
     case INTS_MODULUS_TOTAL:
     {
+      if (partialOnly)
+      {
+        // not eliminating total operators
+        return node;
+      }
       Node den = Rewriter::rewrite(node[1]);
       Node num = Rewriter::rewrite(node[0]);
       Node intVar;
@@ -283,6 +297,11 @@ Node OperatorElim::eliminateOperators(Node node, TConvProofGenerator* tg)
     }
     case DIVISION_TOTAL:
     {
+      if (partialOnly)
+      {
+        // not eliminating total operators
+        return node;
+      }
       Node num = Rewriter::rewrite(node[0]);
       Node den = Rewriter::rewrite(node[1]);
       if (den.isConst())
index c7b55caf18d3660ad0854c92b18e7a4dcd58fd4d..bca80ea4db95e3f8af5d68347c718f74b180839a 100644 (file)
@@ -37,7 +37,7 @@ class OperatorElim : public EagerProofGenerator
     * transcendental functions), then we replace it by a form that eliminates
     * that operator. This may involve the introduction of witness terms.
     */
-  TrustNode eliminate(Node n);
+  TrustNode eliminate(Node n, bool partialOnly = false);
   /**
    * Get axiom for term n. This returns the axiom that this class uses to
    * eliminate the term n, which is determined by its top-most symbol.
@@ -101,7 +101,7 @@ class OperatorElim : public EagerProofGenerator
    * @param n The node to eliminate operators from.
    * @return The (single step) eliminated form of n.
    */
-  Node eliminateOperators(Node n, TConvProofGenerator* tg);
+  Node eliminateOperators(Node n, TConvProofGenerator* tg, bool partialOnly);
   /**
    * Recursively ensure that n has no non-standard operators. This applies
    * the above method on all subterms of n.
@@ -109,7 +109,7 @@ class OperatorElim : public EagerProofGenerator
    * @param n The node to eliminate operators from.
    * @return The eliminated form of n.
    */
-  Node eliminateOperatorsRec(Node n, TConvProofGenerator* tg);
+  Node eliminateOperatorsRec(Node n, TConvProofGenerator* tg, bool partialOnly);
   /** get arithmetic skolem
    *
    * Returns the Skolem in the above map for the given id, creating it if it
index 247772897cfac64a12c42a4d5cc27879d62a9c67..b8cead4fc7baf2370f74e78974d0f0991cfa4aad 100644 (file)
@@ -97,6 +97,12 @@ void TheoryArith::preRegisterTerm(TNode n)
   d_internal->preRegisterTerm(n);
 }
 
+TrustNode TheoryArith::expandDefinition(Node node)
+{
+  // call eliminate operators, to eliminate partial operators only
+  return d_arithPreproc.eliminate(node, true);
+}
+
 void TheoryArith::notifySharedTerm(TNode n) { d_internal->notifySharedTerm(n); }
 
 TrustNode TheoryArith::ppRewrite(TNode atom)
@@ -140,8 +146,9 @@ TrustNode TheoryArith::ppRewriteTerms(TNode n)
   // theories may generate lemmas that involve non-standard operators. For
   // example, quantifier instantiation may use TO_INTEGER terms; SyGuS may
   // introduce non-standard arithmetic terms appearing in grammars.
-  // call eliminate operators
-  return d_arithPreproc.eliminate(n);
+  // call eliminate operators. In contrast to expandDefinitions, we eliminate
+  // *all* extended arithmetic operators here, including total ones.
+  return d_arithPreproc.eliminate(n, false);
 }
 
 Theory::PPAssertStatus TheoryArith::ppAssert(
index e6029faef82c61d00033304295773b37a9e9cf7c..e26ff51efb2cb93c93215e9888d44a0b68f906d1 100644 (file)
@@ -68,7 +68,11 @@ class TheoryArith : public Theory {
   /** finish initialization */
   void finishInit() override;
   //--------------------------------- end initialization
-
+  /**
+   * Expand definition, which eliminates extended operators like div/mod in
+   * the given node.
+   */
+  TrustNode expandDefinition(Node node) override;
   /**
    * Does non-context dependent setup for a node connected to a theory.
    */
index 3e59aebe61db371cb5ffb0b74aa8f31beae7a47c..4d4ec89b4a730a3fb39938729b44578e4850cfd2 100644 (file)
@@ -318,6 +318,12 @@ Node TheoryArrays::solveWrite(TNode term, bool solve1, bool solve2, bool ppCheck
 
 TrustNode TheoryArrays::ppRewrite(TNode term)
 {
+  // first, see if we need to expand definitions
+  TrustNode texp = expandDefinition(term);
+  if (!texp.isNull())
+  {
+    return texp;
+  }
   if (!d_preprocess)
   {
     return TrustNode::null();
index d43fa39275f6b19b40fcff027c85de41041b33dc..7285b67682b2e9ea8123b07630b70e1aef7d4dcc 100644 (file)
@@ -200,7 +200,16 @@ Theory::PPAssertStatus TheoryBV::ppAssert(
   return d_internal->ppAssert(tin, outSubstitutions);
 }
 
-TrustNode TheoryBV::ppRewrite(TNode t) { return d_internal->ppRewrite(t); }
+TrustNode TheoryBV::ppRewrite(TNode t)
+{
+  // first, see if we need to expand definitions
+  TrustNode texp = expandDefinition(t);
+  if (!texp.isNull())
+  {
+    return texp;
+  }
+  return d_internal->ppRewrite(t);
+}
 
 void TheoryBV::presolve() { d_internal->presolve(); }
 
index 74c822215d614c0b424a2bfaa572d820be1228c7..ff36216c2d65519b454fa9a9707a8bed5e7bb399 100644 (file)
@@ -431,6 +431,8 @@ void TheoryDatatypes::preRegisterTerm(TNode n)
 {
   Trace("datatypes-prereg")
       << "TheoryDatatypes::preRegisterTerm() " << n << endl;
+  // external selectors should be preprocessed away by now
+  Assert(n.getKind() != APPLY_SELECTOR);
   // must ensure the type is well founded and has no nested recursion if
   // the option dtNestedRec is not set to true.
   TypeNode tn = n.getType();
@@ -595,7 +597,12 @@ TrustNode TheoryDatatypes::expandDefinition(Node n)
 TrustNode TheoryDatatypes::ppRewrite(TNode in)
 {
   Debug("tuprec") << "TheoryDatatypes::ppRewrite(" << in << ")" << endl;
-
+  // first, see if we need to expand definitions
+  TrustNode texp = expandDefinition(in);
+  if (!texp.isNull())
+  {
+    return texp;
+  }
   if( in.getKind()==EQUAL ){
     Node nn;
     std::vector< Node > rew;
index 01fab92c88004e5350fdd1ff72c2309b504de03c..ce423a7feb2ac6fc600ac4e181600d1d46b1d784 100644 (file)
@@ -454,6 +454,12 @@ TrustNode TheoryFp::expandDefinition(Node node)
 TrustNode TheoryFp::ppRewrite(TNode node)
 {
   Trace("fp-ppRewrite") << "TheoryFp::ppRewrite(): " << node << std::endl;
+  // first, see if we need to expand definitions
+  TrustNode texp = expandDefinition(node);
+  if (!texp.isNull())
+  {
+    return texp;
+  }
 
   Node res = node;
 
index 59666f6fd3ec57671cdb0c8e3bffcb2e55152f92..aa847d8ea3ff7fa3d3ec33109ac8ce3ee8742672 100644 (file)
@@ -1612,7 +1612,10 @@ void CegInstantiator::registerCounterexampleLemma(Node lem,
       // already processed variable
       continue;
     }
-    if (ces.getType().isBoolean())
+    // must avoid selector symbols, and function skolems introduced by
+    // theory preprocessing
+    TypeNode ct = ces.getType();
+    if (ct.isBoolean() || ct.isFunctionLike())
     {
       // Boolean variables, including the counterexample literal, don't matter
       // since they are always assigned a model value.
index 57778b4c87d44bc01a723581de5047424e08105f..615ff987ac2609735dbdb259f09b19b4599baa16 100644 (file)
@@ -126,6 +126,7 @@ void QuantDSplit::check(Theory::Effort e, QEffort quant_e)
   {
     return;
   }
+  Trace("quant-dsplit") << "QuantDSplit::check" << std::endl;
   NodeManager* nm = NodeManager::currentNM();
   FirstOrderModel* m = d_quantEngine->getModel();
   std::vector<Node> lemmas;
@@ -134,6 +135,7 @@ void QuantDSplit::check(Theory::Effort e, QEffort quant_e)
        ++it)
   {
     Node q = it->first;
+    Trace("quant-dsplit") << "- Split quantifier " << q << std::endl;
     if (m->isQuantifierAsserted(q) && m->isQuantifierActive(q)
         && d_added_split.find(q) == d_added_split.end())
     {
@@ -196,5 +198,6 @@ void QuantDSplit::check(Theory::Effort e, QEffort quant_e)
     Trace("quant-dsplit") << "QuantDSplit lemma : " << lem << std::endl;
     d_quantEngine->addLemma(lem, false);
   }
+  Trace("quant-dsplit") << "QuantDSplit::check finished" << std::endl;
 }
 
index 0e6ab1b18997bd55672cea4f0fc69c611bd1fd9f..e4f281de8d175fef6d8b87ab68b3e6e15252d083 100644 (file)
@@ -68,6 +68,9 @@ void TheorySets::finishInit()
   d_valuation.setUnevaluatedKind(COMPREHENSION);
   // choice is used to eliminate witness
   d_valuation.setUnevaluatedKind(WITNESS);
+  // Universe set is not evaluated. This is moreover important for ensuring that
+  // we do not eliminate terms whose value involves the universe set.
+  d_valuation.setUnevaluatedKind(UNIVERSE_SET);
 
   // functions we are doing congruence over
   d_equalityEngine->addFunctionKind(SINGLETON);
@@ -127,6 +130,11 @@ void TheorySets::preRegisterTerm(TNode node)
 }
 
 TrustNode TheorySets::expandDefinition(Node n)
+{
+  return d_internal->expandDefinition(n);
+}
+
+TrustNode TheorySets::ppRewrite(TNode n)
 {
   Kind nk = n.getKind();
   if (nk == UNIVERSE_SET || nk == COMPLEMENT || nk == JOIN_IMAGE
@@ -150,7 +158,8 @@ TrustNode TheorySets::expandDefinition(Node n)
       throw LogicException(ss.str());
     }
   }
-  return d_internal->expandDefinition(n);
+  // just expand definitions
+  return expandDefinition(n);
 }
 
 Theory::PPAssertStatus TheorySets::ppAssert(
index a5f8fa4d8d66270cbcb53ee30fc0fc8a306d9989..3b95c7e008a690b0cae0a3a278707f853bd6f571 100644 (file)
@@ -77,6 +77,7 @@ class TheorySets : public Theory
   std::string identify() const override { return "THEORY_SETS"; }
   void preRegisterTerm(TNode node) override;
   TrustNode expandDefinition(Node n) override;
+  TrustNode ppRewrite(TNode n) override;
   PPAssertStatus ppAssert(TrustNode tin,
                           TrustSubstitutionMap& outSubstitutions) override;
   void presolve() override;
index 110ff9b2d880c5da73b942fdd8153460defba6ec..72a4ae50d49ddbf82a2a902d1091a289f9b06fda 100644 (file)
@@ -997,6 +997,12 @@ void TheoryStrings::checkRegisterTermsNormalForms()
 TrustNode TheoryStrings::ppRewrite(TNode atom)
 {
   Trace("strings-ppr") << "TheoryStrings::ppRewrite " << atom << std::endl;
+  // first, see if we need to expand definitions
+  TrustNode texp = expandDefinition(atom);
+  if (!texp.isNull())
+  {
+    return texp;
+  }
   TrustNode ret;
   Node atomRet = atom;
   if (options::regExpElim() && atom.getKind() == STRING_IN_REGEXP)
index da0fc8de44aedb6c57e3885d1eb73379ca0be3a5..84212fa1bd2005a170b952cc4c854e62e41b2c9f 100644 (file)
@@ -1402,7 +1402,8 @@ theory::LemmaStatus TheoryEngine::lemma(theory::TrustNode tlemma,
   // get the node
   Node node = tlemma.getNode();
   Node lemma = tlemma.getProven();
-  Trace("te-lemma") << "Lemma, input: " << lemma << std::endl;
+  Trace("te-lemma") << "Lemma, input: " << lemma << ", property = " << p
+                    << std::endl;
 
   Assert(!expr::hasFreeVar(lemma));
 
index 09ce71577528e60ae84fa1667e7d65a4f139ab3a..5298a2ca972c4b961bae88f08abb52d959e5a3b5 100644 (file)
@@ -1689,7 +1689,6 @@ set(regress_1_tests
   regress1/quantifiers/smtlib46f14a.smt2
   regress1/quantifiers/smtlibe99bbe.smt2
   regress1/quantifiers/smtlibf957ea.smt2
-  regress1/quantifiers/stream-x2014-09-18-unsat.smt2
   regress1/quantifiers/sygus-infer-nested.smt2
   regress1/quantifiers/symmetric_unsat_7.smt2
   regress1/quantifiers/var-eq-trigger.smt2
@@ -2159,7 +2158,6 @@ set(regress_2_tests
   regress2/bv_to_int_5095_2.smt2
   regress2/bv_to_int_ashr.smt2
   regress2/bv_to_int_bitwise.smt2
-  regress2/bv_to_int_bvmul1.smt2
   regress2/bv_to_int_bvuf_to_intuf_smtlib.smt2
   regress2/bv_to_int_inc1.smt2
   regress2/bv_to_int_mask_array_1.smt2
@@ -2586,6 +2584,8 @@ set(regression_disabled_tests
   regress1/quantifiers/nl-pow-trick.smt2
   # timeout after changes to nonlinear on PR #5351
   regress1/quantifiers/rel-trigger-unusable.smt2
+  # changes to expand definitions, related to trigger selection for selectors
+  regress1/quantifiers/stream-x2014-09-18-unsat.smt2
   # ajreynol: different error messages on production and debug:
   regress1/quantifiers/subtype-param-unk.smt2
   regress1/quantifiers/subtype-param.smt2
@@ -2620,6 +2620,8 @@ set(regression_disabled_tests
   # timeout on debug
   regress2/arith/real2int-test.smt2
   regress2/bug396.smt2
+  # due to bv2int not handling unsigned/signed division
+  regress2/bv_to_int_bvmul1.smt2
   regress2/nl/dumortier-050317.smt2
   regress2/nl/nt-lemmas-bad.smt2
   regress2/quantifiers/ForElimination-scala-9.smt2
index 76bc4095f8b461cd691350a2da846d1da6fad26b..c7771d5c9c8953ff4c2da0adddcb3655f917fb76 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic QF_LIA)
 (set-info :status sat)
 
index 290850d1a64157da9f0143d3b7dec1e204ca2e0b..c871226cea83ce64a93220eb0b79b5929dbde0de 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic QF_NIA)
 (declare-fun a () Int)
 (declare-fun e () Int)
index 3b84b7afff0631d3a7b65aeb465683cea189870c..e4bac6a0a89f9b954600871fee039968850da95d 100644 (file)
@@ -1,3 +1,4 @@
+; COMMAND-LINE: -q
 ; EXPECT: sat
 
 ; Preamble  --------------
index 95e1c898a67328d1e10d3f3128e76e2084e5231e..9fab5f423153506566daf9405ed2624822fdcf55 100644 (file)
@@ -1,3 +1,4 @@
+% COMMAND-LINE: -q
 % EXPECT: sat
 Ints_0 : ARRAY INT OF INT;
 C : TYPE = [# i : INT #];
index e4e1f65b48d3a8fd4414a6e75648262fd88ebff7..5d0d8f6e6b6d4a34e11cb16a6913a82c5989ea48 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find
+; COMMAND-LINE: --finite-model-find -q
 ; EXPECT: sat
 ; this problem produced a model where incorrectly card(a)=1 due to --mbqi=fmc
 (set-logic ALL_SUPPORTED)
index d951e6c5045ba44a7cf1f1e3bb5178feec4b5cf0..890e765aa5102ef86f0303b2214b3c067d4ca223 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find
+; COMMAND-LINE: --finite-model-find -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
index 794eefb37c7d6671c33a502914d04f13516ac86b..0249462ee5f9a43e8bdcfad4b50c5f73e6d1c17a 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic QF_AUFNRA)
 (set-info :status sat)
 (declare-const arr0 (Array Real Real))
index eae8d369db97a49cf74609b66e0b3e9d00a2af24..22b55c87f07b6e2c0358d5c85316ef11835f3f7a 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic QF_AUFNRA)
 (set-info :status sat)
 (declare-const a (Array Real Real))
index f1d20befc71f3af85d8eea69f0bc147d1eab5379..33c1796f95d14dc32d0205f8b9f83f62add16687 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find
+; COMMAND-LINE: --finite-model-find -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
index c4a40ccc1ab324a2644714df0c529b2f6f91782d..4bf21d53320bd608faab22fc1f8e833ef78a3141 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find
+; COMMAND-LINE: --finite-model-find -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
index 25dc80223156535656ed6a6dbe67989f0e0588be..6162b4cfe3e38bac1049fb545cc0d825f8beae4f 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --fmf-bound --no-cegqi
+; COMMAND-LINE: --fmf-bound --no-cegqi -q
 ; EXPECT: sat
 (set-logic ALL)
 (assert (forall ((a Int)) (or (distinct (/ 0 0) a) (= (/ 0 a) 0))))
index 7f3a5b28fb712d256d9ace865e3a5226f4be1a4d..8c72672cdb4b0e2a76896446c788a3139629fa8b 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find --fmf-inst-engine --uf-ss-fair-monotone
+; COMMAND-LINE: --finite-model-find --fmf-inst-engine --uf-ss-fair-monotone -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
index 37838077954728e257ea5d79f5fa707b1ecc18a0..d32c1730ea6ef55f5686c142b36ab2492ab32bb0 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find --fmf-inst-engine --uf-ss-fair-monotone
+; COMMAND-LINE: --finite-model-find --fmf-inst-engine --uf-ss-fair-monotone -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
index b2c42d7c54eb6632c74949a589925c1931ef5186..3d30ae058d27122136d70f26f307060e9a2533a4 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find --dt-rewrite-error-sel
+; COMMAND-LINE: --finite-model-find --dt-rewrite-error-sel -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (declare-datatypes ((Nat 0) (Lst 0)) (((succ (pred Nat)) (zero)) ((cons (hd Nat) (tl Lst)) (nil))))
index 5d1289997afb7197e563b52529a67ce7ab8750f2..7577e3966bc17df3480f12b8dda60d2fb2efac6e 100644 (file)
@@ -1,3 +1,4 @@
+% COMMAND-LINE: -q
 % EXPECT: sat
 OPTION "produce-models";
 OPTION "fmf-bound";
index 25851f6e0582fe00fad5949b56c6ceb6be0e2de7..73de1a36f790f9652aa3d3e3b88aab4535141db9 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --finite-model-find
+; COMMAND-LINE: --finite-model-find -q
 ; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (declare-sort b__ 0)
index 841d050a76547f1cd48e15c1f4671ba7944daa1a..25662d6eb7b4de5fc8efa6ac83bb3ef877f870a3 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic AUFBV)
 (set-info :status sat)
 (set-option :bv-div-zero-const false)
index 500ef6d4c30d2d0ce51a57011f3968b393cc9cf4..8846fe7fa3216c61ad7bf3aa40527cfbb5d7e566 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic NIA)
 (set-option :strings-exp true)
 (set-info :status sat)
index 9e8cd65868f391ae25743eaffcda94cb0406f2e1..d45d72253d1ad74601c7c5dadd39255f6121c736 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full
+; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full -q
 ; EXPECT: sat
 (set-logic BV)
 (set-info :status sat)
index e9883297ef83befbe746fabc75719833fa5b321e..c7ef2d053288dfa5bba108168916162de11ca477 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full --bv-div-zero-const
+; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full --bv-div-zero-const -q
 ; EXPECT: sat
 (set-logic BV)
 (set-info :status sat)
index 2c42744ac12db6ef2bbeca9bbf29cf97a0f7b368..17028065c34672737f96c326d1b1374b654d22d0 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full
+; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full -q
 ; EXPECT: sat
 (set-logic BV)
 (set-info :status sat)
index f24aa6b1b2cdcd124978266264cfd11ceb38c872..95608c15065727ae25fae31f370d21b5f2f7d856 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full
+; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full -q
 ; EXPECT: sat
 (set-logic BV)
 (set-info :status sat)
index dbb653351e4777ef2eaf3c8ecaacfed0c3a09642..151499d7822486151b9ea6965079e6c65f50bcfc 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full
+; COMMAND-LINE: --cegqi-bv --cegqi-bv-ineq=keep --no-cegqi-full -q
 ; EXPECT: sat
 (set-logic BV)
 (set-info :status sat)
index 01b633d8ea3b03aafea4f825b44921577ee8267e..f985961dffe15acdcfad1999f06cf237f9f70ef4 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic ALL_SUPPORTED)
 (set-info :status sat)
 (declare-fun S () (Set Int))
@@ -6,4 +8,4 @@
 (assert (= (singleton x) S))
 (assert (is_singleton S))
 (assert (is_singleton (singleton 3)))
-(check-sat)
\ No newline at end of file
+(check-sat)
index ba8180b5ee06da56b5f974ebd23635b6619c59e3..75ac15817857d4e7a2e03da85f12029442f51bdf 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic ALL)
 (set-info :status sat)
 (declare-fun s () (Set Int))
index 4cac9a24edd9428eed0b7a14d2614f47ddd50738..19412951840c6f307258b8b70e34ba9946c1ef8a 100644 (file)
@@ -1,3 +1,4 @@
+% COMMAND-LINE: -q
 % EXPECT: sat
 OPTION "sets-ext";
 OPTION "logic" "ALL_SUPPORTED";
index a22f2a44f290a38a6b5b10f380929a2d4f263419..f02788a72afcbc9f46e1fb3488d8d2155276b3b8 100644 (file)
@@ -1,3 +1,4 @@
+; COMMAND-LINE: --produce-models
 ; EXPECT: (error "Extended set operators are not supported in default mode, try --sets-ext.")
 ; EXIT: 1
 (set-logic ALL)
index 78035790b0830ea1aeb2d15732831b405399aed6..fd20609427a86d98245b9a3bd59d9b7ddec490c4 100644 (file)
@@ -1,5 +1,5 @@
 ; EXPECT: sat
-; COMMAND-LINE: --sygus-inference
+; COMMAND-LINE: --sygus-inference -q
 (set-logic ALL)
 (declare-fun a () Int)
 (declare-fun b () Int)
index 8bdbde79ab82a70c47b9055f006025e49d1e20a2..019b7702fd6c623f9b1e90f2d284654f5f4da6ad 100644 (file)
@@ -1,4 +1,4 @@
-% COMMAND-LINE: --finite-model-find
+% COMMAND-LINE: --finite-model-find -q
 % EXPECT: sat
 DATATYPE
        myType = A | B
index 54dfa09461ff00422d3d6f7a5f9eb7b1874e8dd1..234e82229977bd10e08c72f7a6f235d188f8ad0a 100644 (file)
@@ -1,6 +1,6 @@
 ; EXPECT: sat
-; COMMAND --solve-bv-as-int=sum
+; COMMAND-LINE: --solve-bv-as-int=sum -q
 (set-logic BV)
 (declare-const bv_42-0 (_ BitVec 42))
 (assert (exists ((q28 (_ BitVec 42))) (distinct (bvudiv bv_42-0 bv_42-0) q28)))
-(check-sat)
\ No newline at end of file
+(check-sat)
index 938aa01eafe9283e406f6737a566958bba218007..b688d3fcf57e6bfa2940af596962ce3220b6a09e 100644 (file)
@@ -1,3 +1,5 @@
+; COMMAND-LINE: -q
+; EXPECT: sat
 (set-logic UFDTLIRA)
 (set-option :fmf-bound true)
 (set-option :finite-model-find true)