|
|
dlinear
0.0.1
Delta-complete SMT solver for linear programming
|
Delta complete solver using QSopt_ex. More...
#include <DeltaQsoptexTheorySolver.h>
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 Box & | model () const |
| Get read-only access to the model that satisfies all the constraints of the TheorySolver. | |
| const Config & | config () const |
| Get read-only access to the configuration of the TheorySolver. | |
| const PredicateAbstractor & | predicate_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 BoundPreprocessor & | preprocessor () const |
| Get read-only access to the bound preprocessor of the TheorySolver. | |
| BoundPreprocessor & | m_preprocessor () |
| Get read-write access to the bound preprocessor of the TheorySolver. | |
| const BoundPreprocessor & | fixed_preprocessor () const |
| Get read-only access to the fixed bound preprocessor of the TheorySolver. | |
| BoundPreprocessor & | m_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< Literal > | enabled_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 IterationStats & | stats () 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< LpRowSense > | qsx_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 Config & | config_ |
| Configuration of the theory solver. | |
| bool | is_consolidated_ |
| Whether the solver has been consolidated. | |
| const PredicateAbstractor & | predicate_abstractor_ |
| Predicate abstractor used to create the theory solver. | |
| std::map< Variable::Id, int > | var_to_theory_col_ |
| Variable ⇔ theory column. | |
| std::vector< Variable > | theory_col_to_var_ |
| Theory column ⇔ Variable. | |
| std::map< Variable::Id, int > | lit_to_theory_row_ |
| Literal ⇔ theory row. | |
| std::vector< Literal > | theory_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. | |
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.
|
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
| formula_var | boolean variable that corresponds to the theory formula |
| formula | symbolic formula that represents the theory formula |
Implements dlinear::TheorySolver.
Definition at line 24 of file DeltaQsoptexTheorySolver.cpp.
|
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.
| lit | literal to activate |
Implements dlinear::TheorySolver.
Definition at line 51 of file DeltaQsoptexTheorySolver.cpp.
|
overrideprivatevirtual |
Enable the qsx_row row for the LP solver.
| qsx_row | index of the row to enable |
| truth | truth value of the row |
Implements dlinear::QsoptexTheorySolver.
Definition at line 133 of file DeltaQsoptexTheorySolver.cpp.