for (ConstraintCP a = d_database->getAntecedent(i); a != NullConstraint;
a = d_database->getAntecedent(--i))
{
- // ... that antecdent must be an assumption ...
- if (a->isAssumption())
- {
- continue;
- }
-
- // ... OR a tightened assumption ...
- if (a->hasIntTightenProof()
- && a->getConstraintRule().d_antecedentEnd != AntecedentIdSentinel
- && d_database->getAntecedent(a->getConstraintRule().d_antecedentEnd)
- ->isAssumption())
-
+ // ... that antecdent must be an assumption OR a tightened assumption ...
+ if (a->isPossiblyTightenedAssumption())
{
continue;
}
return true;
}
+bool Constraint::isPossiblyTightenedAssumption() const
+{
+ // ... that antecdent must be an assumption ...
+
+ if (isAssumption()) return true;
+ if (!hasIntTightenProof()) return false;
+ if (getConstraintRule().d_antecedentEnd == AntecedentIdSentinel) return false;
+ return d_database->getAntecedent(getConstraintRule().d_antecedentEnd)
+ ->isAssumption();
+}
+
bool Constraint::hasIntTightenProof() const {
return getProofType() == IntTightenAP;
}
*
*/
bool hasSimpleFarkasProof() const;
+ /**
+ * Returns whether this constraint is an assumption or a tightened
+ * assumption.
+ */
+ bool isPossiblyTightenedAssumption() const;
/** Returns true if the node has a int bound tightening proof. */
bool hasIntTightenProof() const;
}
Assert(conflict.getNumChildren() == pf.d_farkasCoefficients->size());
- if (confConstraint->hasSimpleFarkasProof())
+ if (confConstraint->hasSimpleFarkasProof()
+ && confConstraint->getNegation()->isPossiblyTightenedAssumption())
{
d_containing.d_proofRecorder->saveFarkasCoefficients(
conflictInFarkasCoefficientOrder, pf.d_farkasCoefficients);
regress3/incorrect1.smtv1.smt2
regress3/issue2429.smt2
regress3/issue4170.smt2
+ regress3/issue4714.smt2
regress3/pp-regfile.smtv1.smt2
regress3/qwh.35.405.shuffled-as.sat03-1651.smtv1.smt2
regress3/siegel-nl-bases.smt2
--- /dev/null
+; COMMAND-LINE: --check-models
+; EXPECT: unknown
+(set-logic UFNIRA)
+(declare-fun c (Int) Int)
+(define-fun d ((k Int)) Int (- (c k) 10))
+(define-fun j ((k Int) (e Int)) Bool (<= 0 e (d k)))
+(define-fun f ((k Int) (a Int) (b Int)) Int (ite (= b 1) a (mod a b)))
+(define-fun g ((k Int) (a Int) (b Int)) Int (f k (* a (c b)) (c k)))
+(define-fun h ((k Int) (a Int) (b Int)) Int (f k (+ a b) (c k)))
+(assert (= (c 0) 1))
+(assert (exists ((l Int) (k Int)) (and (j k l) (distinct (g k (h k l (g k l l)) l) (g k (h k l 0) l)))))
+(check-sat)