SMT-RAT
24.02
Toolbox for Strategic and Parallel Satisfiability-Modulo-Theories Solving
|
#include <CSplitModule.h>
Data Structures | |
struct | Expansion |
Represents the quotients and remainders of a variable in a positional notation to the basis Settings::expansionBase. More... | |
struct | LAModule |
Linear arithmetic module to call for the linearized formula. More... | |
struct | Linearization |
Represents the class of all original constraints with the same left hand side after a normalization. More... | |
struct | Purification |
Represents the substitution variables of a nonlinear monomial in a positional notation to the basis Settings::expansionBase. More... | |
Public Types | |
typedef Settings | SettingsType |
enum class | LemmaType : unsigned { NORMAL = 0 , PERMANENT = 1 } |
Public Member Functions | |
std::string | moduleName () const |
CSplitModule (const ModuleInput *_formula, Conditionals &_conditionals, Manager *_manager=nullptr) | |
bool | addCore (ModuleInput::const_iterator _subformula) |
The module has to take the given sub-formula of the received formula into account. More... | |
void | removeCore (ModuleInput::const_iterator _subformula) |
Removes the subformula of the received formula at the given position to the considered ones of this module. More... | |
void | updateModel () const |
Updates the current assignment into the model. More... | |
Answer | checkCore () |
Checks the received formula for consistency. More... | |
bool | inform (const FormulaT &_constraint) |
Informs the module about the given constraint. More... | |
void | deinform (const FormulaT &_constraint) |
The inverse of informing about a constraint. More... | |
virtual void | init () |
Informs all backends about the so far encountered constraints, which have not yet been communicated. More... | |
bool | add (ModuleInput::const_iterator _subformula) |
The module has to take the given sub-formula of the received formula into account. More... | |
virtual Answer | check (bool _final=false, bool _full=true, carl::Variable _objective=carl::Variable::NO_VARIABLE) |
Checks the received formula for consistency. More... | |
virtual void | remove (ModuleInput::const_iterator _subformula) |
Removes everything related to the given sub-formula of the received formula. More... | |
virtual void | updateAllModels () |
Updates all satisfying models, if the solver has detected the consistency of the received formula, beforehand. More... | |
virtual std::list< std::vector< carl::Variable > > | getModelEqualities () const |
Partition the variables from the current model into equivalence classes according to their assigned value. More... | |
unsigned | currentlySatisfiedByBackend (const FormulaT &_formula) const |
virtual unsigned | currentlySatisfied (const FormulaT &) const |
bool | receivedVariable (carl::Variable::Arg _var) const |
Answer | solverState () const |
std::size_t | id () const |
void | setId (std::size_t _id) |
Sets this modules unique ID to identify itself. More... | |
thread_priority | threadPriority () const |
void | setThreadPriority (thread_priority _threadPriority) |
Sets the priority of this module to get a thread for running its check procedure. More... | |
const ModuleInput * | pReceivedFormula () const |
const ModuleInput & | rReceivedFormula () const |
const ModuleInput * | pPassedFormula () const |
const ModuleInput & | rPassedFormula () const |
const Model & | model () const |
const std::vector< Model > & | allModels () const |
const std::vector< FormulaSetT > & | infeasibleSubsets () const |
const std::vector< Module * > & | usedBackends () const |
const carl::FastSet< FormulaT > & | constraintsToInform () const |
const carl::FastSet< FormulaT > & | informedConstraints () const |
void | addLemma (const FormulaT &_lemma, const LemmaType &_lt=LemmaType::NORMAL, const FormulaT &_preferredFormula=FormulaT(carl::FormulaType::TRUE)) |
Stores a lemma being a valid formula. More... | |
bool | hasLemmas () |
Checks whether this module or any of its backends provides any lemmas. More... | |
void | clearLemmas () |
Deletes all yet found lemmas. More... | |
const std::vector< Lemma > & | lemmas () const |
ModuleInput::const_iterator | firstUncheckedReceivedSubformula () const |
ModuleInput::const_iterator | firstSubformulaToPass () const |
void | receivedFormulaChecked () |
Notifies that the received formulas has been checked. More... | |
const smtrat::Conditionals & | answerFound () const |
bool | isPreprocessor () const |
carl::Variable | objective () const |
bool | is_minimizing () const |
void | excludeNotReceivedVariablesFromModel () const |
Excludes all variables from the current model, which do not occur in the received formula. More... | |
void | updateLemmas () |
Stores all lemmas of any backend of this module in its own lemma vector. More... | |
void | collectTheoryPropagations () |
void | collectOrigins (const FormulaT &_formula, FormulasT &_origins) const |
Collects the formulas in the given formula, which are part of the received formula. More... | |
void | collectOrigins (const FormulaT &_formula, FormulaSetT &_origins) const |
bool | hasValidInfeasibleSubset () const |
void | checkInfSubsetForMinimality (std::vector< FormulaSetT >::const_iterator _infsubset, const std::string &_filename="smaller_muses", unsigned _maxSizeDifference=1) const |
Checks the given infeasible subset for minimality by storing all subsets of it, which have a smaller size which differs from the size of the infeasible subset not more than the given threshold. More... | |
virtual std::pair< bool, FormulaT > | getReceivedFormulaSimplified () |
void | print (const std::string &_initiation="***") const |
Prints everything relevant of the solver. More... | |
void | printReceivedFormula (const std::string &_initiation="***") const |
Prints the vector of the received formula. More... | |
void | printPassedFormula (const std::string &_initiation="***") const |
Prints the vector of passed formula. More... | |
void | printInfeasibleSubsets (const std::string &_initiation="***") const |
Prints the infeasible subsets. More... | |
void | printModel (std::ostream &_out=std::cout) const |
Prints the assignment of this module satisfying its received formula if it satisfiable and this module could find an assignment. More... | |
void | printAllModels (std::ostream &_out=std::cout) |
Prints all assignments of this module satisfying its received formula if it satisfiable and this module could find an assignment. More... | |
Static Public Member Functions | |
static void | freeSplittingVariable (const FormulaT &_splittingVariable) |
Static Public Attributes | |
static size_t | mNumOfBranchVarsToStore = 5 |
The number of different variables to consider for a probable infinite loop of branchings. More... | |
static std::vector< Branching > | mLastBranches = std::vector<Branching>(mNumOfBranchVarsToStore, Branching(typename Poly::PolyType(), 0)) |
Stores the last branches in a cycle buffer. More... | |
static size_t | mFirstPosInLastBranches = 0 |
The beginning of the cyclic buffer storing the last branches. More... | |
static std::vector< FormulaT > | mOldSplittingVariables |
Reusable splitting variables. More... | |
Protected Member Functions | |
virtual bool | informCore ([[maybe_unused]] const FormulaT &_constraint) |
Informs the module about the given constraint. More... | |
virtual void | deinformCore ([[maybe_unused]] const FormulaT &_constraint) |
The inverse of informing about a constraint. More... | |
virtual bool | addCore ([[maybe_unused]] ModuleInput::const_iterator formula) |
The module has to take the given sub-formula of the received formula into account. More... | |
virtual void | removeCore ([[maybe_unused]] ModuleInput::const_iterator formula) |
Removes everything related to the given sub-formula of the received formula. More... | |
bool | anAnswerFound () const |
Checks for all antecedent modules and those which run in parallel with the same antecedent modules, whether one of them has determined a result. More... | |
void | clearModel () const |
Clears the assignment, if any was found. More... | |
void | clearModels () const |
Clears all assignments, if any was found. More... | |
void | cleanModel () const |
Substitutes variable occurrences by its model value in the model values of other variables. More... | |
ModuleInput::iterator | passedFormulaBegin () |
ModuleInput::iterator | passedFormulaEnd () |
void | addOrigin (ModuleInput::iterator _formula, const FormulaT &_origin) |
Adds the given set of formulas in the received formula to the origins of the given passed formula. More... | |
const FormulaT & | getOrigins (ModuleInput::const_iterator _formula) const |
Gets the origins of the passed formula at the given position. More... | |
void | getOrigins (const FormulaT &_formula, FormulasT &_origins) const |
void | getOrigins (const FormulaT &_formula, FormulaSetT &_origins) const |
std::pair< ModuleInput::iterator, bool > | removeOrigin (ModuleInput::iterator _formula, const FormulaT &_origin) |
std::pair< ModuleInput::iterator, bool > | removeOrigins (ModuleInput::iterator _formula, const std::shared_ptr< std::vector< FormulaT >> &_origins) |
void | informBackends (const FormulaT &_constraint) |
Informs all backends of this module about the given constraint. More... | |
virtual void | addConstraintToInform (const FormulaT &_constraint) |
Adds a constraint to the collection of constraints of this module, which are informed to a freshly generated backend. More... | |
std::pair< ModuleInput::iterator, bool > | addReceivedSubformulaToPassedFormula (ModuleInput::const_iterator _subformula) |
Copies the given sub-formula of the received formula to the passed formula. More... | |
bool | originInReceivedFormula (const FormulaT &_origin) const |
std::pair< ModuleInput::iterator, bool > | addSubformulaToPassedFormula (const FormulaT &_formula) |
Adds the given formula to the passed formula with no origin. More... | |
std::pair< ModuleInput::iterator, bool > | addSubformulaToPassedFormula (const FormulaT &_formula, const std::shared_ptr< std::vector< FormulaT >> &_origins) |
Adds the given formula to the passed formula. More... | |
std::pair< ModuleInput::iterator, bool > | addSubformulaToPassedFormula (const FormulaT &_formula, const FormulaT &_origin) |
Adds the given formula to the passed formula. More... | |
void | generateTrivialInfeasibleSubset () |
Stores the trivial infeasible subset being the set of received formulas. More... | |
void | receivedFormulasAsInfeasibleSubset (ModuleInput::const_iterator _subformula) |
Stores an infeasible subset consisting only of the given received formula. More... | |
std::vector< FormulaT >::const_iterator | findBestOrigin (const std::vector< FormulaT > &_origins) const |
void | getInfeasibleSubsets () |
Copies the infeasible subsets of the passed formula. More... | |
std::vector< FormulaSetT > | getInfeasibleSubsets (const Module &_backend) const |
Get the infeasible subsets the given backend provides. More... | |
const Model & | backendsModel () const |
Stores the model of a backend which determined satisfiability of the passed formula in the model of this module. More... | |
void | getBackendsModel () const |
void | getBackendsAllModels () const |
Stores all models of a backend in the list of all models of this module. More... | |
virtual Answer | runBackends (bool _final, bool _full, carl::Variable _objective) |
Runs the backend solvers on the passed formula. More... | |
virtual Answer | runBackends () |
virtual ModuleInput::iterator | eraseSubformulaFromPassedFormula (ModuleInput::iterator _subformula, bool _ignoreOrigins=false) |
Removes everything related to the sub-formula to remove from the passed formula in the backends of this module. More... | |
void | clearPassedFormula () |
std::vector< FormulaT > | merge (const std::vector< FormulaT > &, const std::vector< FormulaT > &) const |
Merges the two vectors of sets into the first one. More... | |
size_t | determine_smallest_origin (const std::vector< FormulaT > &origins) const |
bool | probablyLooping (const typename Poly::PolyType &_branchingPolynomial, const Rational &_branchingValue) const |
Checks whether given the current branching value and branching variable/polynomial it is (highly) probable that this branching is part of an infinite loop of branchings. More... | |
bool | branchAt (const Poly &_polynomial, bool _integral, const Rational &_value, std::vector< FormulaT > &&_premise, bool _leftCaseWeak=true, bool _preferLeftCase=true, bool _useReceivedFormulaAsPremise=false) |
Adds a lemmas which provoke a branching for the given variable at the given value, if this module returns Unknown and there exists a preceding SATModule. More... | |
bool | branchAt (const Poly &_polynomial, bool _integral, const Rational &_value, bool _leftCaseWeak=true, bool _preferLeftCase=true, bool _useReceivedFormulaAsPremise=false, const std::vector< FormulaT > &_premise=std::vector< FormulaT >()) |
bool | branchAt (carl::Variable::Arg _var, const Rational &_value, std::vector< FormulaT > &&_premise, bool _leftCaseWeak=true, bool _preferLeftCase=true, bool _useReceivedFormulaAsPremise=false) |
bool | branchAt (carl::Variable::Arg _var, const Rational &_value, bool _leftCaseWeak=true, bool _preferLeftCase=true, bool _useReceivedFormulaAsPremise=false, const std::vector< FormulaT > &_premise=std::vector< FormulaT >()) |
void | splitUnequalConstraint (const FormulaT &) |
Adds the following lemmas for the given constraint p!=0. More... | |
unsigned | checkModel () const |
void | addInformationRelevantFormula (const FormulaT &formula) |
Adds a formula to the InformationRelevantFormula. More... | |
const std::set< FormulaT > & | getInformationRelevantFormulas () |
Gets all InformationRelevantFormulas. More... | |
bool | isLemmaLevel (LemmaLevel level) |
Checks if current lemma level is greater or equal to given level. More... | |
Static Protected Member Functions | |
static bool | modelsDisjoint (const Model &_modelA, const Model &_modelB) |
Checks whether there is no variable assigned by both models. More... | |
Protected Attributes | |
std::vector< FormulaSetT > | mInfeasibleSubsets |
Stores the infeasible subsets. More... | |
Manager *const | mpManager |
A reference to the manager. More... | |
Model | mModel |
Stores the assignment of the current satisfiable result, if existent. More... | |
std::vector< Model > | mAllModels |
Stores all satisfying assignments. More... | |
bool | mModelComputed |
True, if the model has already been computed. More... | |
bool | mFinalCheck |
true, if the check procedure should perform a final check which especially means not to postpone splitting decisions More... | |
bool | mFullCheck |
false, if this module should avoid too expensive procedures and rather return unknown instead. More... | |
carl::Variable | mObjectiveVariable |
Objective variable to be minimized. If set to NO_VARIABLE, a normal sat check should be performed. More... | |
std::vector< TheoryPropagation > | mTheoryPropagations |
std::atomic< Answer > | mSolverState |
States whether the received formula is known to be satisfiable or unsatisfiable otherwise it is set to unknown. More... | |
std::atomic_bool * | mBackendsFoundAnswer |
This flag is passed to any backend and if it determines an answer to a prior check call, this flag is fired. More... | |
Conditionals | mFoundAnswer |
Vector of Booleans: If any of them is true, we have to terminate a running check procedure. More... | |
std::vector< Module * > | mUsedBackends |
The backends of this module which are currently used (conditions to use this module are fulfilled for the passed formula). More... | |
std::vector< Module * > | mAllBackends |
The backends of this module which have been used. More... | |
std::vector< Lemma > | mLemmas |
Stores the lemmas being valid formulas this module or its backends made. More... | |
ModuleInput::iterator | mFirstSubformulaToPass |
Stores the position of the first sub-formula in the passed formula, which has not yet been considered for a consistency check of the backends. More... | |
carl::FastSet< FormulaT > | mConstraintsToInform |
Stores the constraints which the backends must be informed about. More... | |
carl::FastSet< FormulaT > | mInformedConstraints |
Stores the position of the first constraint of which no backend has been informed about. More... | |
ModuleInput::const_iterator | mFirstUncheckedReceivedSubformula |
Stores the position of the first (by this module) unchecked sub-formula of the received formula. More... | |
unsigned | mSmallerMusesCheckCounter |
Counter used for the generation of the smt2 files to check for smaller muses. More... | |
std::vector< std::size_t > | mVariableCounters |
Maps variables to the number of their occurrences. More... | |
Private Types | |
enum class | DomainSize { SMALL = 0 , LARGE = 1 , UNBOUNDED = 2 } |
Subdivides the size of a variable domain into three classes: More... | |
Private Member Functions | |
bool | resetExpansions () |
Resets all expansions to the center points of the variable domains and constructs a new tree of reductions for the currently active monomials. More... | |
bool | bloatDomains (const FormulaSetT &LRAConflict) |
Bloats the active domains of a subset of variables that are part of the LRA solvers infeasible subset, and indicates if no active domain could be bloated, because the maximal domain of all variables were reached. More... | |
Answer | analyzeConflict (const FormulaSetT &LRAConflict) |
Analyzes the infeasible subset of the LRA solver and constructs an infeasible subset of the received constraints. More... | |
void | changeActiveDomain (Expansion &expansion, RationalInterval &&domain) |
Changes the active domain of a variable and adapts its positional notation to the basis Settings::expansionBase. More... | |
void | propagateFormula (const FormulaT &formula, bool assert) |
Asserts/Removes the given formula to/from the LRA solver. More... | |
std::pair< ModuleInput::iterator, bool > | addSubformulaToPassedFormula (const FormulaT &_formula, bool _hasSingleOrigin, const FormulaT &_origin, const std::shared_ptr< std::vector< FormulaT >> &_origins, bool _mightBeConjunction) |
This method actually implements the adding of a formula to the passed formula. More... | |
Answer | foundAnswer (Answer _answer) |
Sets the solver state to the given answer value. More... | |
Private Attributes | |
std::map< carl::Monomial::Arg, Purification > | mPurifications |
Maps a monomial to its purification information. More... | |
Bimap< Expansion, const carl::Variable, &Expansion::mRationalization, const carl::Variable, &Expansion::mDiscretization > | mExpansions |
Bimap< Linearization, const Poly, &Linearization::mNormalization, const Poly, &Linearization::mLinearization > | mLinearizations |
vb::VariableBounds< FormulaT > | mVariableBounds |
Helper class that extracts the variable domains. More... | |
Model | mLRAModel |
Stores the last model for the linearization that was found by the LRA solver. More... | |
bool | mCheckedWithBackends |
Stores whether the last consistency check was done by the backends. More... | |
LAModule | mLRAModule |
Handle to the linear arithmetic module. More... | |
friend | Manager |
std::size_t | mId |
A unique ID to identify this module instance. (Could be useful but currently nowhere used) More... | |
thread_priority | mThreadPriority |
The priority of this module to get a thread for running its check procedure. More... | |
const ModuleInput * | mpReceivedFormula |
The formula passed to this module. More... | |
ModuleInput * | mpPassedFormula |
The formula passed to the backends of this module. More... | |
std::string | mModuleName |
ModuleStatistics & | mStatistics = statistics_get<ModuleStatistics>(moduleName()) |
Definition at line 23 of file CSplitModule.h.
typedef Settings smtrat::CSplitModule< Settings >::SettingsType |
Definition at line 148 of file CSplitModule.h.
|
strongprivate |
Subdivides the size of a variable domain into three classes:
Enumerator | |
---|---|
SMALL | |
LARGE | |
UNBOUNDED |
Definition at line 58 of file CSplitModule.h.
|
stronginherited |
smtrat::CSplitModule< Settings >::CSplitModule | ( | const ModuleInput * | _formula, |
Conditionals & | _conditionals, | ||
Manager * | _manager = nullptr |
||
) |
|
inherited |
The module has to take the given sub-formula of the received formula into account.
_subformula | The sub-formula to take additionally into account. |
Definition at line 138 of file Module.cpp.
|
protectedvirtualinherited |
Adds a constraint to the collection of constraints of this module, which are informed to a freshly generated backend.
_constraint | The constraint to add. |
Reimplemented in smtrat::SATModule< Settings >.
Definition at line 877 of file Module.cpp.
|
inlineprotectedvirtualinherited |
The module has to take the given sub-formula of the received formula into account.
formula | The sub-formula to take additionally into account. |
Definition at line 706 of file Module.h.
bool smtrat::CSplitModule< Settings >::addCore | ( | ModuleInput::const_iterator | _subformula | ) |
The module has to take the given sub-formula of the received formula into account.
_subformula | The sub-formula to take additionally into account. |
|
protectedinherited |
Adds a formula to the InformationRelevantFormula.
formula | Formula to add |
Definition at line 1068 of file Module.cpp.
|
inlineinherited |
|
inlineprotectedinherited |
Adds the given set of formulas in the received formula to the origins of the given passed formula.
_formula | The passed formula to set the origins for. |
_origin | A set of formulas in the received formula of this module. |
Definition at line 798 of file Module.h.
|
inlineprotectedinherited |
Copies the given sub-formula of the received formula to the passed formula.
Note, that there is always a link between sub-formulas of the passed formulas to sub-formulas of the received formulas, which are responsible for its occurrence.
_subformula | The sub-formula of the received formula to copy. |
Definition at line 857 of file Module.h.
|
inlineprotectedinherited |
Adds the given formula to the passed formula with no origin.
Note that in the next call of this module's removeSubformula, all formulas in the passed formula without origins will be removed.
_formula | The formula to add to the passed formula. |
Definition at line 873 of file Module.h.
|
privateinherited |
This method actually implements the adding of a formula to the passed formula.
_formula | The formula to add to the passed formula. |
_hasSingleOrigin | true, if the next argument contains the formula being the single origin. |
_origin | The sub-formula of the received formula being responsible for the occurrence of the formula to add to the passed formula. |
_origins | The link of the formula to add to the passed formula to sub-formulas of the received formulas, which are responsible for its occurrence |
_mightBeConjunction | true, if the formula to add might be a conjunction. |
Definition at line 341 of file Module.cpp.
|
inlineprotectedinherited |
Adds the given formula to the passed formula.
_formula | The formula to add to the passed formula. |
_origin | The sub-formula of the received formula being responsible for the occurrence of the formula to add to the passed formula. |
Definition at line 901 of file Module.h.
|
inlineprotectedinherited |
Adds the given formula to the passed formula.
_formula | The formula to add to the passed formula. |
_origins | The link of the formula to add to the passed formula to sub-formulas of the received formulas, which are responsible for its occurrence |
Definition at line 887 of file Module.h.
|
inlineinherited |
|
private |
Analyzes the infeasible subset of the LRA solver and constructs an infeasible subset of the received constraints.
The unsatisfiability cannot be deduced if the corresponding original constraints contain real valued variables.
LRAConflict | Infeasible subset of the LRA solver |
|
inlineprotectedinherited |
|
inlineinherited |
|
protectedinherited |
Stores the model of a backend which determined satisfiability of the passed formula in the model of this module.
Definition at line 630 of file Module.cpp.
|
private |
Bloats the active domains of a subset of variables that are part of the LRA solvers infeasible subset, and indicates if no active domain could be bloated, because the maximal domain of all variables were reached.
LRAConflict | Infeasible subset of the LRA solver |
|
protectedinherited |
Adds a lemmas which provoke a branching for the given variable at the given value, if this module returns Unknown and there exists a preceding SATModule.
Note that the given value is rounded down and up, if the given variable is integer-valued.
_polynomial | The variable to branch for. |
_integral | A flag being true, if all variables in the polynomial to branch for are integral. |
_value | The value to branch at. |
_premise | The sub-formulas of the received formula from which the branch is followed. Note, that a premise is not necessary, as every branch is a valid formula. But a premise can prevent from branching unnecessarily. |
_leftCaseWeak | true, if a branching in the form of (or (<= p b) (> p b)) is desired. false, if a branching in the form of (or (< p b) (>= p b)) is desired. |
_preferLeftCase | true, if the left case (polynomial less(or equal) 0 shall be chosen first. false, otherwise. |
_useReceivedFormulaAsPremise | true, if the whole received formula should be used as premise |
Definition at line 478 of file Module.cpp.
|
private |
Changes the active domain of a variable and adapts its positional notation to the basis Settings::expansionBase.
expansion | Expansion data structure thats keeps all needed informations. |
domain | The new domain that shall be active afterwards. Note, that the new domain has to contain the currently active interval. |
|
virtualinherited |
Checks the received formula for consistency.
Note, that this is an implementation of the satisfiability check of the conjunction of the so far received formulas, which does actually nothing but passing the problem to its backends. This implementation is only used internally and must be overwritten by any derived module.
_final | true, if this satisfiability check will be the last one (for a global sat-check), if its result is SAT |
_full | false, if this module should avoid too expensive procedures and rather return unknown instead. |
_objective | if not set to NO_VARIABLE, the module should find an assignment minimizing this objective variable; otherwise any assignment is good. |
Reimplemented in smtrat::PModule.
Definition at line 86 of file Module.cpp.
|
virtual |
Checks the received formula for consistency.
Reimplemented from smtrat::Module.
|
inherited |
Checks the given infeasible subset for minimality by storing all subsets of it, which have a smaller size which differs from the size of the infeasible subset not more than the given threshold.
_infsubset | The infeasible subset to check for minimality. |
_filename | The name of the file to store the infeasible subsets in order to be able to check their infeasibility. |
_maxSizeDifference | The maximal difference between the sizes of the subsets compared to the size of the infeasible subset. |
Definition at line 1018 of file Module.cpp.
|
protectedinherited |
Definition at line 588 of file Module.cpp.
|
inlineprotectedinherited |
|
inlineinherited |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
protectedinherited |
|
inherited |
|
inherited |
Collects the formulas in the given formula, which are part of the received formula.
If the given formula directly occurs in the received formula, it is inserted into the given set. Otherwise, the given formula must be of type AND and all its sub-formulas part of the received formula. Hence, they will be added to the given set.
_formula | The formula from which to collect the formulas being sub-formulas of the received formula (origins). |
_origins | The set in which to store the origins. |
Definition at line 960 of file Module.cpp.
|
inherited |
Definition at line 928 of file Module.cpp.
|
inlineinherited |
|
inlinevirtualinherited |
Reimplemented in smtrat::LRAModule< Settings >, smtrat::LRAModule< smtrat::LRASettings1 >, and smtrat::LRAModule< smtrat::LRASettingsICP >.
|
inherited |
Definition at line 296 of file Module.cpp.
|
inherited |
The inverse of informing about a constraint.
All data structures which were kept regarding this constraint are going to be removed. Note, that this makes only sense if it is not likely enough that a formula with this constraint must be solved again.
_constraint | The constraint to remove from internal data structures. |
Definition at line 124 of file Module.cpp.
|
inlineprotectedvirtualinherited |
The inverse of informing about a constraint.
All data structures which were kept regarding this constraint are going to be removed. Note, that this makes only sense if it is not likely enough that a formula with this constraint must be solved again.
_constraint | The constraint to remove from internal data structures. |
Definition at line 695 of file Module.h.
|
protectedinherited |
origins | A vector of sets of origins. |
Definition at line 403 of file Module.cpp.
|
protectedvirtualinherited |
Removes everything related to the sub-formula to remove from the passed formula in the backends of this module.
Afterwards the sub-formula is removed from the passed formula.
_subformula | The sub-formula to remove from the passed formula. |
_ignoreOrigins | True, if the sub-formula shall be removed regardless of its origins (should only be applied with expertise). |
Reimplemented in smtrat::ICPModule< Settings >, smtrat::ICPModule< smtrat::ICPSettings1 >, and smtrat::ICPModule< smtrat::ICPSettings4 >.
Definition at line 807 of file Module.cpp.
|
inherited |
Excludes all variables from the current model, which do not occur in the received formula.
Definition at line 884 of file Module.cpp.
|
protectedinherited |
_origins |
Definition at line 691 of file Module.cpp.
|
inlineinherited |
|
inlineinherited |
Sets the solver state to the given answer value.
This method also fires the flag given by the antecessor module of this module to true, if the given answer value is not Unknown.
_answer | The found answer. |
Definition at line 856 of file Module.cpp.
|
inlinestaticinherited |
|
inlineprotectedinherited |
|
protectedinherited |
Stores all models of a backend in the list of all models of this module.
Definition at line 669 of file Module.cpp.
|
protectedinherited |
|
protectedinherited |
Copies the infeasible subsets of the passed formula.
Definition at line 596 of file Module.cpp.
|
protectedinherited |
Get the infeasible subsets the given backend provides.
Note, that an infeasible subset in a backend contains sub formulas of the passed formula and an infeasible subset of this module contains sub formulas of the received formula. In this method the LATTER is returned.
_backend | The backend from which to obtain the infeasible subsets. |
Definition at line 709 of file Module.cpp.
|
protectedinherited |
Gets all InformationRelevantFormulas.
Definition at line 1074 of file Module.cpp.
|
virtualinherited |
Partition the variables from the current model into equivalence classes according to their assigned value.
The result is a set of equivalence classes of variables where all variables within one class are assigned the same value. Note that the number of classes may not be minimal, i.e. two classes may actually be equivalent.
Definition at line 308 of file Module.cpp.
|
inlineprotectedinherited |
|
inlineprotectedinherited |
Gets the origins of the passed formula at the given position.
_formula | The position of a formula in the passed formulas. |
Definition at line 808 of file Module.h.
|
virtualinherited |
Reimplemented in smtrat::PModule.
Definition at line 945 of file Module.cpp.
|
inlineinherited |
|
inherited |
Definition at line 1000 of file Module.cpp.
|
inlineinherited |
|
inlineinherited |
|
inherited |
Informs the module about the given constraint.
It should be tried to inform this module about any constraint it could receive eventually before assertSubformula is called (preferably for the first time, but at least before adding a formula containing that constraint).
_constraint | The constraint to inform about. |
Definition at line 117 of file Module.cpp.
|
inlineprotectedinherited |
|
inlineprotectedvirtualinherited |
Informs the module about the given constraint.
It should be tried to inform this module about any constraint it could receive eventually before assertSubformula is called (preferably for the first time, but at least before adding a formula containing that constraint).
_constraint | The constraint to inform about. |
Definition at line 684 of file Module.h.
|
inlineinherited |
|
virtualinherited |
Informs all backends about the so far encountered constraints, which have not yet been communicated.
This method must not be called twice and only before the first runBackends call.
Reimplemented in smtrat::PBPPModule< Settings >, smtrat::PBGaussModule< Settings >, smtrat::NRAILModule< Settings >, smtrat::NewCoveringModule< Settings >, smtrat::NewCADModule< Settings >, smtrat::LRAModule< Settings >, smtrat::LRAModule< smtrat::LRASettings1 >, smtrat::LRAModule< smtrat::LRASettingsICP >, smtrat::IntBlastModule< Settings >, smtrat::FPPModule< Settings >, smtrat::CurryModule< Settings >, and smtrat::BVModule< Settings >.
Definition at line 234 of file Module.cpp.
|
inlineinherited |
|
protectedinherited |
Checks if current lemma level is greater or equal to given level.
level | Level to check. |
Definition at line 1079 of file Module.cpp.
|
inlineinherited |
|
inlineinherited |
|
protectedinherited |
Merges the two vectors of sets into the first one.
({a,b},{a,c}) and ({b,d},{b}) -> ({a,b,d},{a,b},{a,b,c,d},{a,b,c})
_vecSetA | A vector of sets of constraints. |
_vecSetB | A vector of sets of constraints. |
Definition at line 377 of file Module.cpp.
|
inlineinherited |
|
staticprotectedinherited |
Checks whether there is no variable assigned by both models.
_modelA | The first model to check for. |
_modelB | The second model to check for. |
Definition at line 611 of file Module.cpp.
|
inlinevirtual |
Reimplemented from smtrat::Module.
Definition at line 150 of file CSplitModule.h.
|
inlineinherited |
|
protectedinherited |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inlineinherited |
|
inlineinherited |
|
inherited |
Prints everything relevant of the solver.
_initiation | The line initiation. |
Definition at line 1085 of file Module.cpp.
|
inherited |
Prints all assignments of this module satisfying its received formula if it satisfiable and this module could find an assignment.
_out | The stream to print the assignment on. |
Definition at line 1161 of file Module.cpp.
|
inherited |
Prints the infeasible subsets.
_initiation | The line initiation. |
Definition at line 1136 of file Module.cpp.
|
inherited |
Prints the assignment of this module satisfying its received formula if it satisfiable and this module could find an assignment.
_out | The stream to print the assignment on. |
Definition at line 1151 of file Module.cpp.
|
inherited |
Prints the vector of passed formula.
_initiation | The line initiation. |
Definition at line 1118 of file Module.cpp.
|
inherited |
Prints the vector of the received formula.
_initiation | The line initiation. |
Definition at line 1105 of file Module.cpp.
|
protectedinherited |
Checks whether given the current branching value and branching variable/polynomial it is (highly) probable that this branching is part of an infinite loop of branchings.
_branchingPolynomial | The polynomial to branch at (in most branching strategies this is just a variable). |
_branchingValue | The value to branch at. |
Definition at line 426 of file Module.cpp.
|
inlineprivate |
Asserts/Removes the given formula to/from the LRA solver.
formula | The formula to assert/remove to the LRA solver. |
assert | True, if formula shall be asserted; False, if formula shall be removed. |
|
inlineinherited |
|
inlineprotectedinherited |
|
inlineinherited |
|
virtualinherited |
Removes everything related to the given sub-formula of the received formula.
However, it is desired not to lose track of search spaces where no satisfying assignment can be found for the remaining sub-formulas.
_subformula | The sub formula of the received formula to remove. |
Reimplemented in smtrat::PModule.
Definition at line 159 of file Module.cpp.
|
inlineprotectedvirtualinherited |
Removes everything related to the given sub-formula of the received formula.
However, it is desired not to lose track of search spaces where no satisfying assignment can be found for the remaining sub-formulas.
formula | The sub formula of the received formula to remove. |
Definition at line 729 of file Module.h.
void smtrat::CSplitModule< Settings >::removeCore | ( | ModuleInput::const_iterator | _subformula | ) |
Removes the subformula of the received formula at the given position to the considered ones of this module.
Note that this includes every stored calculation which depended on this subformula, but should keep the other stored calculation, if possible, untouched.
_subformula | The position of the subformula to remove. |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
private |
Resets all expansions to the center points of the variable domains and constructs a new tree of reductions for the currently active monomials.
|
inlineinherited |
|
inlineinherited |
|
inlineprotectedvirtualinherited |
Reimplemented in smtrat::PModule.
Definition at line 1012 of file Module.h.
|
protectedvirtualinherited |
Runs the backend solvers on the passed formula.
_final | true, if this satisfiability check will be the last one (for a global sat-check), if its result is SAT |
_full | false, if this module should avoid too expensive procedures and rather return unknown instead. |
_objective | if not set to NO_VARIABLE, the module should find an assignment minimizing this objective variable; otherwise any assignment is good. |
Reimplemented in smtrat::PModule.
Definition at line 727 of file Module.cpp.
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
Definition at line 388 of file Module.h.
|
protectedinherited |
Adds the following lemmas for the given constraint p!=0.
(p!=0 <-> (p<0 or p>0))
and not(p<0 and p>0)
_unequalConstraint | A constraint having the relation symbol !=. |
Definition at line 565 of file Module.cpp.
|
inlineinherited |
|
virtualinherited |
Updates all satisfying models, if the solver has detected the consistency of the received formula, beforehand.
Reimplemented in smtrat::SATModule< Settings >.
Definition at line 261 of file Module.cpp.
|
inherited |
Stores all lemmas of any backend of this module in its own lemma vector.
Definition at line 919 of file Module.cpp.
|
virtual |
Updates the current assignment into the model.
Note, that this is a unique but possibly symbolic assignment maybe containing newly introduced variables.
Reimplemented from smtrat::Module.
|
inlineinherited |
|
protectedinherited |
|
mutableprotectedinherited |
|
protectedinherited |
|
private |
Stores whether the last consistency check was done by the backends.
Definition at line 127 of file CSplitModule.h.
|
protectedinherited |
|
private |
Definition at line 94 of file CSplitModule.h.
|
protectedinherited |
|
staticinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
privateinherited |
|
protectedinherited |
|
protectedinherited |
|
staticinherited |
|
protectedinherited |
|
private |
Definition at line 120 of file CSplitModule.h.
|
private |
Stores the last model for the linearization that was found by the LRA solver.
Definition at line 125 of file CSplitModule.h.
|
private |
Handle to the linear arithmetic module.
Definition at line 145 of file CSplitModule.h.
|
mutableprotectedinherited |
|
mutableprotectedinherited |
|
staticinherited |
|
protectedinherited |
|
staticinherited |
|
protectedinherited |
|
privateinherited |
|
privateinherited |
|
private |
Maps a monomial to its purification information.
Definition at line 52 of file CSplitModule.h.
|
mutableprotectedinherited |
|
protectedinherited |
|
privateinherited |
|
protectedinherited |
|
privateinherited |
|
protectedinherited |
|
private |
Helper class that extracts the variable domains.
Definition at line 123 of file CSplitModule.h.
|
protectedinherited |