mirror of
https://github.com/Z3Prover/z3
synced 2025-08-07 03:31:23 +00:00
reorganization of rule_set structure
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
5915533170
commit
8f46179def
65 changed files with 778 additions and 10668 deletions
|
@ -162,10 +162,14 @@ namespace datalog {
|
|||
|
||||
context & m_context;
|
||||
rule_manager & m_rule_manager;
|
||||
rule_ref_vector m_rules; //!< all rules
|
||||
decl2rules m_head2rules; //!< mapping from head symbol to rules.
|
||||
rule_dependencies m_deps; //!< dependencies
|
||||
scoped_ptr<rule_stratifier> m_stratifier; //!< contains stratifier object iff the rule_set is closed
|
||||
rule_ref_vector m_rules; //!< all rules
|
||||
decl2rules m_head2rules; //!< mapping from head symbol to rules.
|
||||
rule_dependencies m_deps; //!< dependencies
|
||||
scoped_ptr<rule_stratifier> m_stratifier; //!< contains stratifier object iff the rule_set is closed
|
||||
func_decl_set m_output_preds; //!< output predicates
|
||||
obj_map<func_decl,func_decl*> m_orig2pred;
|
||||
obj_map<func_decl,func_decl*> m_pred2orig;
|
||||
func_decl_ref_vector m_refs;
|
||||
|
||||
|
||||
//sometimes we need to return reference to an empty rule_vector,
|
||||
|
@ -184,6 +188,12 @@ namespace datalog {
|
|||
rule_manager & get_rule_manager() const { return const_cast<rule_manager&>(m_rule_manager); }
|
||||
context& get_context() const { return m_context; }
|
||||
|
||||
|
||||
void inherit_predicates(rule_set const& other);
|
||||
void inherit_predicate(rule_set const& other, func_decl* orig, func_decl* pred);
|
||||
func_decl* get_orig(func_decl* pred) const;
|
||||
func_decl* get_pred(func_decl* orig) const;
|
||||
|
||||
/**
|
||||
\brief Add rule \c r to the rule set.
|
||||
*/
|
||||
|
@ -198,7 +208,7 @@ namespace datalog {
|
|||
\brief Add all rules from a different rule_set.
|
||||
*/
|
||||
void add_rules(const rule_set& src);
|
||||
void add_rules(unsigned sz, rule * const * rules);
|
||||
void replace_rules(const rule_set& other);
|
||||
|
||||
/**
|
||||
\brief This method should be invoked after all rules are added to the rule set.
|
||||
|
@ -216,11 +226,14 @@ namespace datalog {
|
|||
bool is_closed() const { return m_stratifier != 0; }
|
||||
|
||||
unsigned get_num_rules() const { return m_rules.size(); }
|
||||
bool empty() const { return m_rules.size() == 0; }
|
||||
|
||||
rule * get_rule(unsigned i) const { return m_rules[i]; }
|
||||
rule * last() const { return m_rules[m_rules.size()-1]; }
|
||||
rule_ref_vector const& get_rules() const { return m_rules; }
|
||||
|
||||
const rule_vector & get_predicate_rules(func_decl * pred) const;
|
||||
bool contains(func_decl* pred) const { return m_head2rules.contains(pred); }
|
||||
|
||||
const rule_stratifier & get_stratifier() const {
|
||||
SASSERT(m_stratifier);
|
||||
|
@ -230,9 +243,17 @@ namespace datalog {
|
|||
unsigned get_predicate_strat(func_decl * pred) const;
|
||||
const rule_dependencies & get_dependencies() const { SASSERT(is_closed()); return m_deps; }
|
||||
|
||||
// split predicats into founded and non-founded.
|
||||
void split_founded_rules(func_decl_set& founded, func_decl_set& non_founded);
|
||||
|
||||
void reset();
|
||||
|
||||
void set_output_predicate(func_decl * pred) { m_refs.push_back(pred); m_output_preds.insert(pred); }
|
||||
bool is_output_predicate(func_decl * pred) const { return m_output_preds.contains(pred); }
|
||||
const func_decl_set & get_output_predicates() const { return m_output_preds; }
|
||||
func_decl* get_output_predicate() const { SASSERT(m_output_preds.size() == 1); return *m_output_preds.begin(); }
|
||||
|
||||
|
||||
void display(std::ostream & out) const;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue