Skip to content

Commit f8af3f3

Browse files
Merge branch 'development' into master
2 parents 876e939 + 4d19cbd commit f8af3f3

5 files changed

Lines changed: 62 additions & 24 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ include(smtratmacros)
1515

1616
set(PROJECT_FULLNAME "SMT-RAT")
1717
set(PROJECT_DESCRIPTION "Toolbox for Strategic and Parallel Satisfiability-Modulo-Theories Solving")
18-
set_version(25 06)
18+
set_version(25 11)
1919

2020
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
2121
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} CACHE PATH "Directory for built executables")

src/smtrat-modules/SATModule/SATModule.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ namespace smtrat
6767
//template<int num, int num2> friend struct VarSchedulingMcsatLowerFirstPerLevel;
6868
friend class VarSchedulerBase;
6969
friend class VarSchedulerMcsatBase;
70-
70+
template<mcsat::VariableOrdering vot>
71+
friend class TheoryVarSchedulerStatic;
7172
private:
7273

7374
/**

src/smtrat-modules/SATModule/mcsat/MCSATMixin.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,11 @@ class MCSATMixin {
684684
return *mVarPropertyCache[v].theoryVars;
685685
}
686686

687+
public:
688+
const std::map<Minisat::Var, std::vector<Minisat::Var>>& varDeps() const {
689+
return mVarDeps;
690+
}
691+
687692
// ***** Output
688693
/// Prints a single clause
689694
void printClause(std::ostream& os, Minisat::CRef clause) const;

src/smtrat-modules/SATModule/mcsat/VarSchedulerMcsat.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ namespace smtrat {
4040
std::vector<Minisat::Var> ordering;
4141
std::vector<Minisat::Var>::const_iterator nextTheoryVar = ordering.end();
4242
bool initialized = false;
43+
const std::map<Minisat::Var, std::vector<Minisat::Var>>& varDeps;
4344

4445
public:
4546

4647
template<typename BaseModule>
4748
explicit TheoryVarSchedulerStatic( BaseModule& baseModule ) :
48-
VarSchedulerMcsatBase(baseModule)
49+
VarSchedulerMcsatBase(baseModule),
50+
varDeps(baseModule.mMCSAT.varDeps())
4951
{}
5052

5153
void insert(Minisat::Var var) {
@@ -86,6 +88,28 @@ namespace smtrat {
8688
std::cout << "Theory variable ordering: " << ordering << std::endl;
8789
}
8890

91+
92+
// compare variables based on dependencies in the baseModule.
93+
// l < r if r depends on l (possibly by transitive dependencies)
94+
struct cmp_dep {
95+
const std::map<Minisat::Var, std::vector<Minisat::Var>>& varDeps;
96+
cmp_dep(const std::map<Minisat::Var, std::vector<Minisat::Var>>& vd) : varDeps(vd) {}
97+
98+
inline bool operator() (const Minisat::Var l, const Minisat::Var r) const {
99+
auto it = varDeps.find(r);
100+
if (it != varDeps.end()) {
101+
const auto& deps = it->second;
102+
auto it_l = std::find(deps.begin(), deps.end(), l);
103+
if (it_l != deps.end()) return true;
104+
return std::any_of(
105+
deps.begin(), deps.end(),
106+
[this, l](const auto& v){return (*this)(l,v);}
107+
);
108+
}
109+
return false;
110+
}
111+
};
112+
89113
template<typename Constraints>
90114
void rebuildTheoryVars(const Constraints& c) {
91115
assert(!initialized);
@@ -96,6 +120,10 @@ namespace smtrat {
96120
for (const auto& tvar : tordering) {
97121
ordering.push_back(minisatVar(tvar));
98122
}
123+
124+
// make sure dependencies are in the right order
125+
std::stable_sort(ordering.begin(), ordering.end(), cmp_dep(varDeps));
126+
99127
nextTheoryVar = ordering.begin();
100128
initialized = true;
101129
}

src/smtrat-strategies/strategies/Default.h

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,31 @@ class Default : public Manager {
117117
addBackend<STropModule<STropSettings3>>({
118118
addBackend<SATModule<SATSettingsMCSATApxVSIDS>>().condition(&condition_qf_nra_with_bool),
119119
addBackend<SATModule<SATSettingsMCSATApxStaticTheory>>().condition(&condition_qf_nra_without_bool)
120-
}).condition( &condition_nra ),
121-
// QF_NIRA
120+
})
121+
}).condition( &condition_qf_nra ),
122+
123+
// QF_NRA extended with root expressions
124+
addBackend<SATModule<SATSettingsMCSATApxVSIDS>>(
125+
).condition( &condition_qf_ra_ext ),
126+
127+
// NRA
128+
addBackend<PNFerModule>({
129+
addBackend<CoveringNGModule<CoveringNGSettingsDefault>>( // covering for quantifiers
130+
).condition( &condition_non_quantifier_free ),
131+
addBackend<FPPModule<FPPSettings1>>({ // default QF_NRA solver
132+
addBackend<STropModule<STropSettings3>>({
133+
addBackend<SATModule<SATSettingsMCSATApxVSIDS>>().condition(&condition_qf_nra_with_bool),
134+
addBackend<SATModule<SATSettingsMCSATApxStaticTheory>>().condition(&condition_qf_nra_without_bool)
135+
})
136+
}).condition( &condition_quantifier_free )
137+
}).condition( &condition_nonqf_ra ),
138+
139+
// NRA extended with root expressions
140+
addBackend<CoveringNGModule<CoveringNGSettingsDefault>>(
141+
).condition( &condition_ra_ext ),
142+
143+
// QF_NIRA
144+
addBackend<FPPModule<FPPSettings1>>({
122145
addBackend<IncWidthModule<IncWidthSettings1>>({
123146
addBackend<IntBlastModule<IntBlastSettings2>>({
124147
addBackend<SATModule<SATSettings1>>({
@@ -146,25 +169,6 @@ class Default : public Manager {
146169
addBackend<LRAModule<LRASettings1>>()
147170
}).condition( &condition_lira_non_conj )
148171
}).condition( &condition_qf_base ),
149-
150-
151-
// QF_NRA extended with root expressions
152-
addBackend<SATModule<SATSettingsMCSATStaticTheory>>().condition( &condition_qf_ra_ext ),
153-
154-
// NRA
155-
addBackend<PNFerModule>({
156-
addBackend<CoveringNGModule<CoveringNGSettingsDefault>>( // covering for quantifiers
157-
).condition( &condition_non_quantifier_free ),
158-
addBackend<FPPModule<FPPSettings1>>({ // default QF_NRA solver
159-
addBackend<STropModule<STropSettings3>>({
160-
addBackend<SATModule<SATSettingsMCSATApxVSIDS>>().condition(&condition_qf_nra_with_bool),
161-
addBackend<SATModule<SATSettingsMCSATApxStaticTheory>>().condition(&condition_qf_nra_without_bool)
162-
})
163-
}).condition( &condition_quantifier_free )
164-
}).condition( &condition_nonqf_ra ),
165-
166-
// NRA extended with root expressions
167-
addBackend<CoveringNGModule<CoveringNGSettingsDefault>>().condition( &condition_ra_ext ),
168172
});
169173
}
170174
};

0 commit comments

Comments
 (0)