mirror of
https://github.com/Z3Prover/z3
synced 2025-10-08 08:51:55 +00:00
extract karr invariants as a Datalog relation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
cd48a5164e
commit
4138e17b3f
15 changed files with 1082 additions and 574 deletions
|
@ -27,6 +27,7 @@ Revision History:
|
|||
#include"dl_product_relation.h"
|
||||
#include"dl_bound_relation.h"
|
||||
#include"dl_interval_relation.h"
|
||||
#include"dl_mk_karr_invariants.h"
|
||||
#include"dl_finite_product_relation.h"
|
||||
#include"dl_sparse_table.h"
|
||||
#include"dl_table.h"
|
||||
|
@ -54,6 +55,8 @@ namespace datalog {
|
|||
|
||||
get_rmanager().register_plugin(alloc(bound_relation_plugin, get_rmanager()));
|
||||
get_rmanager().register_plugin(alloc(interval_relation_plugin, get_rmanager()));
|
||||
get_rmanager().register_plugin(alloc(karr_relation_plugin, get_rmanager()));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -178,23 +181,23 @@ namespace datalog {
|
|||
return result;
|
||||
}
|
||||
|
||||
#define BEGIN_QUERY() \
|
||||
#define BEGIN_QUERY() \
|
||||
rule_set original_rules(m_context.get_rules()); \
|
||||
decl_set original_preds; \
|
||||
m_context.collect_predicates(original_preds); \
|
||||
bool was_closed = m_context.is_closed(); \
|
||||
if (was_closed) { \
|
||||
decl_set original_preds; \
|
||||
m_context.collect_predicates(original_preds); \
|
||||
bool was_closed = m_context.is_closed(); \
|
||||
if (was_closed) { \
|
||||
m_context.reopen(); \
|
||||
} \
|
||||
|
||||
#define END_QUERY() \
|
||||
} \
|
||||
|
||||
#define END_QUERY() \
|
||||
m_context.reopen(); \
|
||||
m_context.replace_rules(original_rules); \
|
||||
restrict_predicates(original_preds); \
|
||||
\
|
||||
if (was_closed) { \
|
||||
restrict_predicates(original_preds); \
|
||||
\
|
||||
if (was_closed) { \
|
||||
m_context.close(); \
|
||||
} \
|
||||
} \
|
||||
|
||||
lbool rel_context::query(unsigned num_rels, func_decl * const* rels) {
|
||||
get_rmanager().reset_saturated_marks();
|
||||
|
@ -427,6 +430,10 @@ namespace datalog {
|
|||
get_rmanager().set_predicate_kind(pred, target_kind);
|
||||
}
|
||||
|
||||
void rel_context::set_cancel(bool f) {
|
||||
get_rmanager().set_cancel(f);
|
||||
}
|
||||
|
||||
relation_plugin & rel_context::get_ordinary_relation_plugin(symbol relation_name) {
|
||||
relation_plugin * plugin = get_rmanager().get_relation_plugin(relation_name);
|
||||
if (!plugin) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue