Node alit,
CegInstEffort effort)
{
+ Trace("cegqi-arith-debug") << "Process assertion " << lit << std::endl;
NodeManager* nm = NodeManager::currentNM();
Node atom = lit.getKind() == NOT ? lit[0] : lit;
bool pol = lit.getKind() != NOT;
return CEG_TT_INVALID;
}
// if its type is integer but the substitution is not integer
+ Node vval = mkVtsSum(val, vts_coeff[0], vts_coeff[1]);
if (pvtn.isInteger()
&& ((!veq_c.isNull() && !veq_c.getType().isInteger())
- || !val.getType().isInteger()))
+ || !vval.getType().isInteger()))
{
// redo, split integer/non-integer parts
bool useCoeff = false;
val = rewrite(val);
Trace("cegqi-arith-bound2") << "(after rho) : " << val << std::endl;
}
+ return mkVtsSum(val, inf_coeff, delta_coeff);
+}
+
+Node ArithInstantiator::mkVtsSum(const Node& val,
+ const Node& inf_coeff,
+ const Node& delta_coeff)
+{
+ NodeManager* nm = NodeManager::currentNM();
+ Node vval = val;
if (!inf_coeff.isNull())
{
Assert(!d_vts_sym[0].isNull());
- val = nm->mkNode(ADD, val, nm->mkNode(MULT, inf_coeff, d_vts_sym[0]));
- val = rewrite(val);
+ vval = nm->mkNode(ADD, vval, nm->mkNode(MULT, inf_coeff, d_vts_sym[0]));
}
if (!delta_coeff.isNull())
{
// create delta here if necessary
- val = nm->mkNode(
- ADD, val, nm->mkNode(MULT, delta_coeff, d_vtc->getVtsDelta()));
- val = rewrite(val);
+ vval = nm->mkNode(
+ ADD, vval, nm->mkNode(MULT, delta_coeff, d_vtc->getVtsDelta()));
}
- return val;
+ vval = rewrite(vval);
+ return vval;
}
Node ArithInstantiator::negate(const Node& t) const
Node delta_coeff);
/** Return the rewritten form of the negation of t */
Node negate(const Node& t) const;
+ /**
+ * Make the node from base value, with infinity and delta coefficients.
+ */
+ Node mkVtsSum(const Node& val,
+ const Node& inf_coeff,
+ const Node& delta_coeff);
};
} // namespace quantifiers
// push the substitution pv_prop.getModifiedTerm(pv) -> n
void SolvedForm::push_back(Node pv, Node n, TermProperties& pv_prop)
{
+ Assert(n.getType().isSubtypeOf(pv.getType()));
d_vars.push_back(pv);
d_subs.push_back(n);
d_props.push_back(pv_prop);
SolvedForm& sf,
bool revertOnSuccess)
{
+ Assert(n.getType().isSubtypeOf(pv.getType()));
Node cnode = pv_prop.getCacheNode();
if( d_curr_subs_proc[pv][n].find( cnode )==d_curr_subs_proc[pv][n].end() ){
d_curr_subs_proc[pv][n][cnode] = true;
regress1/quantifiers/issue7537-cegqi-comp-types.smt2
regress1/quantifiers/issue8157-duplicate-conflicts.smt2
regress1/quantifiers/issue8344-cegqi-string-witness.smt2
+ regress1/quantifiers/issue8410-vts-subtypes.smt2
regress1/quantifiers/issue993.smt2
regress1/quantifiers/javafe.ast.StmtVec.009.smt2
regress1/quantifiers/lia-witness-div-pp.smt2