6#include "LeakyReluConstraint.h"
10#include "dlinear/symbolic/LinearFormulaFlattener.h"
11#include "dlinear/util/Infinity.h"
12#include "dlinear/util/exception.h"
22 relu_var - e, relu_var - alpha * e) {}
27 std::move(active_var),
28 std::move(inactive_var),
30 std::move(active_soi),
31 std::move(inactive_soi)} {}
48void LeakyReluConstraint::EnableLiteral(
const Variable&) {
53 std::set<LiteralSet> active_explanations;
54 std::set<LiteralSet> inactive_explanations;
59 inactive_explanations);
61 if (!active_explanations.empty() && !inactive_explanations.empty()) {
62 return active_explanations;
73 DLINEAR_ASSERT(!
fixed(),
"LeakyReluConstraint::Assumptions() should not be called on a fixed constraint");
This class uses some basic algebraic operations to preprocess the constraints and identify violations...
const BoundVectorMap & theory_bounds() const
Get read-only access to the bounds of the variables in the LP solver of the BoundPreprocessor.
bool PropagateBoundsPolynomial(const Literal &lit, const Variable &var_to_propagate, Explanations &explanations)
Propagate the bounds of the variables in the given formula.
void UpdateUpperBound(const mpq_class *upper_bound) override
Update the upper bounds of the constraint.
void UpdateLowerBound(const mpq_class *lower_bound) override
Update the lower bounds of the constraint.
std::ostream & Print(std::ostream &os) const override
Print the constraint on the standard output.
LeakyReluConstraint(const Variable &relu_var, const Expression &e, float alpha, const PredicateAbstractor &pa)
Construct a new LeakyReluConstraint object.
static const mpq_class zero
Zero constant all the pointers to the default lower bound will point to.
LiteralSet LearnedClauses() const override
Produce some learned clauses the SAT solver will use to prune the sub-problems this piecewise constra...
LiteralSet Assumptions() const override
The assumptions used to guide the SAT solver towards the most promising sub-problems.
std::set< LiteralSet > TightenBounds(BoundPreprocessor &preprocessor) override
Use the preprocessor to tighten the bounds of the constraint and hopefully fix its state to either ac...
A piecewise linear constraint is a constraint that assumes different linear functions depending on th...
virtual void UpdateLowerBound(const mpq_class *lb)
Update the lower bounds of the constraint.
virtual void UpdateUpperBound(const mpq_class *ub)
Update the upper bounds of the constraint.
bool fixed() const
Check whether the constraint is fixed.
const mpq_class * lower_bound_
Lower bound of the constraint.
const Variable theory_var_
Theory variable .
const Variable active_var_
Boolean variable associated with the theory literal.
PiecewiseConstraintState state_
State of the constraint.
const mpq_class & lower_bound() const
Get read-only access to the lower bound of the constraint.
const mpq_class * upper_bound_
Upper bound of the constraint.
const Variable inactive_var_
Boolean variable associated with the theory literal.
const mpq_class & upper_bound() const
Get read-only access to the upper bound of the constraint.
Predicate abstraction is a method to convert a first-order logic formula into a Boolean formula.
Represents a symbolic form of an expression.
Represents a symbolic variable.
Global namespace for the dlinear library.
@ ACTIVE
The constraint is active.
@ INACTIVE
The constraint is inactive.
std::set< Literal > LiteralSet
A set of literals.
Tuple containing the value, bound type and theory literal associated with the bound.