dlinear  0.0.1
Delta-complete SMT solver for linear programming
Loading...
Searching...
No Matches
dlinear::DeltaQsoptexTheorySolver Class Reference

Delta complete solver using QSopt_ex. More...

#include <DeltaQsoptexTheorySolver.h>

Inheritance diagram for dlinear::DeltaQsoptexTheorySolver:
dlinear::QsoptexTheorySolver dlinear::TheorySolver

Public Member Functions

Explanations EnableLiteral (const Literal &lit) override
 Activate the literal that had previously been added to the theory solver.
 
void AddLiteral (const Variable &formula_var, const Formula &formula) override
 Add a Literal to the theory solver.
 
- Public Member Functions inherited from dlinear::QsoptexTheorySolver
void AddVariable (const Variable &var) override
 Add a variable (column) to the theory solver.
 
void AddLiterals () override
 Add a vector of literals to the theory solver.
 
void Consolidate (const Box &box) override
 Consolidate the solver.
 
- Public Member Functions inherited from dlinear::TheorySolver
 TheorySolver (const PredicateAbstractor &predicate_abstractor, const std::string &class_name="TheorySolver")
 Construct a new Theory Solver object.
 
virtual Explanations PreprocessFixedLiterals (const LiteralSet &fixed_literals)
 Add the fixed literals to the theory solver.
 
Explanations EnableLiterals (std::span< const Literal > theory_literals)
 Activate the literals that have previously been added to the theory solver.
 
const Boxmodel () const
 Get read-only access to the model that satisfies all the constraints of the TheorySolver.
 
const Configconfig () const
 Get read-only access to the configuration of the TheorySolver.
 
const PredicateAbstractorpredicate_abstractor () const
 Get read-only access to the predicate abstractor of the TheorySolver.
 
const std::map< Variable::Id, int > & var_to_theory_col () const
 Get read-only access to the map of variables to the theory columns of the TheorySolver.
 
const std::vector< Variable > & theory_col_to_var () const
 Get read-only access to the map of theory columns to the variables of the TheorySolver.
 
const std::map< Variable::Id, int > & lit_to_theory_row () const
 Get read-only access to the map of literals to the theory rows of the TheorySolver.
 
const std::vector< Literal > & theory_row_to_lit () const
 Get read-only access to the map of theory rows to the literals of the TheorySolver.
 
const BoundVectorMap & theory_bounds () const
 Get read-only access to the bounds of each theory variable of the TheorySolver.
 
const BoundVectorMap & fixed_theory_bounds () const
 Get read-only access to the fixed bounds of each theory variable of the TheorySolver.
 
const BoundPreprocessorpreprocessor () const
 Get read-only access to the bound preprocessor of the TheorySolver.
 
BoundPreprocessorm_preprocessor ()
 Get read-write access to the bound preprocessor of the TheorySolver.
 
const BoundPreprocessorfixed_preprocessor () const
 Get read-only access to the fixed bound preprocessor of the TheorySolver.
 
BoundPreprocessorm_fixed_preprocessor ()
 Get read-write access to the fixed bound preprocessor of the TheorySolver.
 
std::size_t theory_row_count () const
 Get read-only access to the number of rows of the TheorySolver.
 
std::size_t theory_col_count () const
 Get read-only access to the number of columns of the TheorySolver.
 
std::set< Literalenabled_literals () const
 Get read-only access to the vector of enabled literals of the TheorySolver.
 
SatResult CheckSat (const Box &box, mpq_class *actual_precision, std::set< LiteralSet > &explanations)
 Check the satisfiability of the theory.
 
virtual SatResult CheckSatCore (mpq_class *actual_precision, std::set< LiteralSet > &explanations)=0
 Check the satisfiability of the theory.
 
virtual void Reset ()
 Reset the linear problem.
 
const IterationStatsstats () const
 Get the statistics of the theory solver.
 

Private Member Functions

void EnableQsxRow (int spx_row, bool truth) override
 Enable the qsx_row row for the LP solver.
 

Additional Inherited Members

- Public Types inherited from dlinear::TheorySolver
using Bound = std::tuple<const Variable &, LpColBound, const mpq_class &>
 Bound on the variable.
 
using Violation = BoundIterator
 Bound iterator over some violated bounds.
 
using Explanations = std::set<LiteralSet>
 Set of explanations of the conflict.
 
- Protected Types inherited from dlinear::TheorySolver
enum class  BoundViolationType { NO_BOUND_VIOLATION , LOWER_BOUND_VIOLATION , UPPER_BOUND_VIOLATION }
 Enum used to describe how the bounds on a variable participate in the infeasibility result of an LP problem. More...
 
- Protected Member Functions inherited from dlinear::QsoptexTheorySolver
void UpdateModelBounds () override
 Update each variable in the model with the bounds passed to the theory solver.
 
void UpdateModelSolution () override
 Update the model with the solution obtained from the LP solver.
 
void UpdateExplanation (LiteralSet &explanation) override
 Use the result from the theory solver to update the explanation with the conflict that has been detected.
 
void EnableQsxVarBound ()
 Set the bounds of the variables in the LP solver.
 
void EnableQsxRow (int qsx_row)
 Enable the qsx_row row for the LP solver.
 
void DisableQsxRows ()
 Disable all disabled qsx rows from the LP solver.
 
void SetRowCoeff (const Formula &formula, int qsx_row)
 Parse a formula and set the correct coefficients of decisional variables in the qsx_row row.
 
void SetQsxVarCoeff (int qsx_row, const Variable &var, const mpq_class &value)
 Set the coefficient of var on the qsx_row row.
 
void SetQsxVarObjCoeff (const Variable &var, const mpq_class &value)
 Set the objective coefficient of var to value.
 
- Protected Member Functions inherited from dlinear::TheorySolver
void UpdateExplanations (Explanations &explanations)
 Use the result from the theory solver to update the explanations with the conflict that has been detected.
 
- Protected Attributes inherited from dlinear::QsoptexTheorySolver
std::vector< mpq_class > qsx_rhs_
 Right-hand side of the constraints.
 
std::vector< LpRowSenseqsx_sense_
 Sense of the constraints.
 
qsopt_ex::MpqArray ray_
 Ray of the last infeasible solution.
 
qsopt_ex::MpqArray x_
 Solution vector.
 
- Protected Attributes inherited from dlinear::TheorySolver
const Configconfig_
 Configuration of the theory solver.
 
bool is_consolidated_
 Whether the solver has been consolidated.
 
const PredicateAbstractorpredicate_abstractor_
 Predicate abstractor used to create the theory solver.
 
std::map< Variable::Id, int > var_to_theory_col_
 Variable ⇔ theory column.
 
std::vector< Variabletheory_col_to_var_
 Theory column ⇔ Variable.
 
std::map< Variable::Id, int > lit_to_theory_row_
 Literal ⇔ theory row.
 
std::vector< Literaltheory_row_to_lit_
 Theory row ⇔ Literal The row is the constraint used by the theory solver.
 
std::vector< bool > theory_rows_state_
 Whether each theory row is enabled or not.
 
BoundPreprocessor fixed_preprocessor_
 Preprocessor for the bounds. Only computed on fixed literal theories.
 
BoundPreprocessor preprocessor_
 Preprocessor for the bounds.
 
Box model_
 Model produced by the theory solver.
 
IterationStats stats_
 Statistics of the theory solver.
 

Detailed Description

Delta complete solver using QSopt_ex.

The LP problem is solver exactly, within a given precision, delta. Since the value of delta is considered strictly positive, strict inequalities will be relaxed and not-equal-to constraints ignored.

Definition at line 30 of file DeltaQsoptexTheorySolver.h.

Member Function Documentation

◆ AddLiteral()

void dlinear::DeltaQsoptexTheorySolver::AddLiteral ( const Variable & formula_var,
const Formula & formula )
overridevirtual

Add a Literal to the theory solver.

A Literal is formed by a variable that corresponds to a theory formula inside the PredicateAbstractor and the formula itself

Parameters
formula_varboolean variable that corresponds to the theory formula
formulasymbolic formula that represents the theory formula

Implements dlinear::TheorySolver.

Definition at line 24 of file DeltaQsoptexTheorySolver.cpp.

◆ EnableLiteral()

DeltaQsoptexTheorySolver::Explanations dlinear::DeltaQsoptexTheorySolver::EnableLiteral ( const Literal & lit)
overridevirtual

Activate the literal that had previously been added to the theory solver.

If the literal is a row inside the TheorySolver, then the the corresponding constraint is activated by giving it the proper values.

If the literal is a simple bound on the variable (column), some additional checks are made. Theory solvers struggle to handle problems with inverted bounds. It is convenient to have a method that checks them beforehand. If at least a bound is inverted, the problem is UNSAT, since it is impossible to satisfy the constraint. An explanation is produced and returned to the SAT solver.

Parameters
litliteral to activate
Returns
an explanation with the literals that correspond to the conflicting bounds
an empty optional if no conflicts are detected at this step

Implements dlinear::TheorySolver.

Definition at line 51 of file DeltaQsoptexTheorySolver.cpp.

◆ EnableQsxRow()

void dlinear::DeltaQsoptexTheorySolver::EnableQsxRow ( int qsx_row,
bool truth )
overrideprivatevirtual

Enable the qsx_row row for the LP solver.

Precondition
The row's coefficients must have been set correctly before calling this function
Parameters
qsx_rowindex of the row to enable
truthtruth value of the row

Implements dlinear::QsoptexTheorySolver.

Definition at line 133 of file DeltaQsoptexTheorySolver.cpp.


The documentation for this class was generated from the following files: