3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

add special procedures for UTVPI and horn arithmetic

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2013-04-28 13:37:03 -07:00
parent e6d6c55df0
commit be64e4b238
2 changed files with 7 additions and 23 deletions

View file

@ -6,30 +6,16 @@ Module Name:
theory_horn_ineq.h
Abstract:
A*x <= b + D*x, coefficients to A and D are non-negative,
A*x <= weight + D*x, coefficients to A and D are non-negative,
D is a diagonal matrix.
Coefficients to b may have both signs.
Coefficients to weight may have both signs.
Ford-Fulkerson variant:
Label variables by weight.
Select inequality that is not satisfied.
Set gamma(LHS) := 0
Set gamma(RHS(x)) := weight(x) - b
Propagate gamma through inequalities.
Gamma is the increment.
Maintain Heap of variables weighted by gamma.
When processing inequality,
then update gamma of variables by gamma := A(gamma + weight) - b
If some variable in the premise of the original rule gets
relabeled (assignment is increased), then the set of
inequalities is unsatisfiable.
Propagation updates lower bounds on gamma by taking into
account integer inequalities. The greatest lower bound
is computable by taking integer floor/ceilings.
Set delta(LHS) := 0
Set delta(RHS(x)) := weight(x) - b
Propagate weight increment through inequalities.
Author:

View file

@ -937,10 +937,8 @@ namespace smt {
template<typename Ext>
void theory_horn_ineq<Ext>::collect_statistics(::statistics& st) const {
st.update("hi conflicts", m_stats.m_num_conflicts);
// st.update("hi propagations", m_stats.m_num_th2core_prop);
// st.update("hi asserts", m_stats.m_num_assertions);
// st.update("core->hi eqs", m_stats.m_num_core2th_eqs);
st.update("horn ineq conflicts", m_stats.m_num_conflicts);
st.update("horn ineq assertions", m_stats.m_num_assertions);
m_arith_eq_adapter.collect_statistics(st);
m_graph->collect_statistics(st);
}