return false;
}
-bool DioSolver::acceptableOriginalNodes(Node n){
- Kind k = n.getKind();
- if(k == kind::EQUAL){
- return true;
- }else if(k == kind::AND){
- Node ub = n[0];
- Node lb = n[1];
- Kind kub = Comparison::comparisonKind(ub);
- Kind klb = Comparison::comparisonKind(lb);
- Debug("nf::tmp") << n << endl;
- return (kub == kind::GEQ || kub==kind::LT) && (klb == kind::GEQ || klb == kind::LT);
- }else{
- return false;
- }
-}
void DioSolver::pushInputConstraint(const Comparison& eq, Node reason){
Assert(!debugEqualityInInputEquations(reason));
Assert(eq.debugIsIntegral());
Assert(eq.getNode().getKind() == kind::EQUAL);
- Assert(acceptableOriginalNodes(reason));
SumPair sp = eq.toSumPair();
uint32_t length = sp.maxLength();
Variable v = vl.getHead();
Node input = proofVariableToReason(v);
- Assert(acceptableOriginalNodes(input));
if(input.getKind() == kind::AND){
for(Node::iterator input_iter = input.begin(), input_end = input.end(); input_iter != input_end; ++input_iter){
Node inputChild = *input_iter;
TrailIndex ci = d_trail.size();
d_trail.push_back(Constraint(newSI, Polynomial::mkZero()));
+ // no longer reference av safely!
Debug("arith::dio") << "Decompose ci(" << ci <<":" << d_trail[ci].d_eq.getNode()
- << ") for " << av.getNode() << endl;
+ << ") for " << d_trail[i].d_minimalMonomial.getNode() << endl;
Assert(d_trail[ci].d_eq.getPolynomial().getCoefficient(vl) == Constant::mkConstant(-1));
SumPair newFact = r + fresh_a;
*/
size_t allocateVariableInPool();
- /**
- * Returns true if the node can be accepted as a reason according to the
- * kinds.
- */
- bool acceptableOriginalNodes(Node n);
/** Empties the unproccessed input constraints into the queue. */
void enqueueInputConstraints();
--- /dev/null
+(benchmark fuzzsmt
+:logic QF_AUFLIA
+:extrafuns ((v4 Array))
+:extrafuns ((f0 Int Int))
+:extrapreds ((p0 Int Int Int))
+:status sat
+:formula
+(let (?n1 0)
+(flet ($n2 (p0 ?n1 ?n1 ?n1))
+(let (?n3 1)
+(let (?n4 (ite $n2 ?n3 ?n1))
+(flet ($n5 (< ?n1 ?n4))
+(flet ($n6 (p0 ?n3 ?n1 ?n1))
+(let (?n7 (ite $n6 ?n3 ?n1))
+(let (?n8 (ite $n5 ?n7 ?n3))
+(flet ($n9 (< ?n1 ?n8))
+(flet ($n10 true)
+(let (?n11 3)
+(let (?n12 (f0 ?n1))
+(let (?n13 (* ?n11 ?n12))
+(let (?n14 (select v4 ?n1))
+(flet ($n15 (> ?n13 ?n14))
+(flet ($n16 (xor $n10 $n15))
+(flet ($n17 false)
+(flet ($n18 (implies $n16 $n17))
+(flet ($n19 (and $n9 $n18))
+$n19
+))))))))))))))))))))