mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	bool_vector, some spacer tidy
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									2ed26e8e73
								
							
						
					
					
						commit
						b889b110ee
					
				
					 106 changed files with 239 additions and 266 deletions
				
			
		| 
						 | 
				
			
			@ -3110,7 +3110,7 @@ proof * ast_manager::mk_unit_resolution(unsigned num_proofs, proof * const * pro
 | 
			
		|||
        app const * cls   = to_app(f1);
 | 
			
		||||
        unsigned num_args = cls->get_num_args();
 | 
			
		||||
#ifdef Z3DEBUG
 | 
			
		||||
        svector<bool> found;
 | 
			
		||||
        bool_vector found;
 | 
			
		||||
#endif
 | 
			
		||||
        ast_mark mark;
 | 
			
		||||
        for (unsigned i = 0; i < num_args; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ protected:
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
class default_expr2polynomial : public expr2polynomial {
 | 
			
		||||
    svector<bool> m_is_int;
 | 
			
		||||
    bool_vector m_is_int;
 | 
			
		||||
public:
 | 
			
		||||
    default_expr2polynomial(ast_manager & am, polynomial::manager & pm);
 | 
			
		||||
    ~default_expr2polynomial() override;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,9 +34,9 @@ public:
 | 
			
		|||
        ptr_vector<func_decl> m_fs;
 | 
			
		||||
        expr_ref_vector       m_defs;
 | 
			
		||||
        expr_ref_vector       m_conds;
 | 
			
		||||
        svector<bool>         m_ineq; // true if the macro is based on an inequality instead of equality.
 | 
			
		||||
        svector<bool>         m_satisfy;
 | 
			
		||||
        svector<bool>         m_hint; // macro did not contain all universal variables in the quantifier.
 | 
			
		||||
        bool_vector         m_ineq; // true if the macro is based on an inequality instead of equality.
 | 
			
		||||
        bool_vector         m_satisfy;
 | 
			
		||||
        bool_vector         m_hint; // macro did not contain all universal variables in the quantifier.
 | 
			
		||||
        friend class macro_util;
 | 
			
		||||
        ast_manager & get_manager() { return m_conds.get_manager(); }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ struct static_features {
 | 
			
		|||
    u_map<unsigned>          m_expr2formula_depth;
 | 
			
		||||
 | 
			
		||||
    unsigned                 m_num_theories; 
 | 
			
		||||
    svector<bool>            m_theories;       // mapping family_id -> bool
 | 
			
		||||
    bool_vector            m_theories;       // mapping family_id -> bool
 | 
			
		||||
 | 
			
		||||
    symbol                   m_label_sym;
 | 
			
		||||
    symbol                   m_pattern_sym;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -440,7 +440,7 @@ typename symbolic_automata<T, M>::automaton_t* symbolic_automata<T, M>::mk_produ
 | 
			
		|||
        inv[mv.dst()].push_back(move_t(m, mv.dst(), mv.src(), mv.t())); 
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    svector<bool> back_reachable(n, false);
 | 
			
		||||
    bool_vector back_reachable(n, false);
 | 
			
		||||
    for (unsigned f : final) {
 | 
			
		||||
        back_reachable[f] = true;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -748,7 +748,7 @@ namespace dd {
 | 
			
		|||
    void bdd_manager::gc() {
 | 
			
		||||
        m_free_nodes.reset();
 | 
			
		||||
        IF_VERBOSE(13, verbose_stream() << "(bdd :gc " << m_nodes.size() << ")\n";);
 | 
			
		||||
        svector<bool> reachable(m_nodes.size(), false);
 | 
			
		||||
        bool_vector reachable(m_nodes.size(), false);
 | 
			
		||||
        for (unsigned i = m_bdd_stack.size(); i-- > 0; ) {
 | 
			
		||||
            reachable[m_bdd_stack[i]] = true;
 | 
			
		||||
            m_todo.push_back(m_bdd_stack[i]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -952,12 +952,12 @@ namespace dd {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    bool pdd_manager::is_reachable(PDD p) {
 | 
			
		||||
        svector<bool> reachable(m_nodes.size(), false);
 | 
			
		||||
        bool_vector reachable(m_nodes.size(), false);
 | 
			
		||||
        compute_reachable(reachable);
 | 
			
		||||
        return reachable[p];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void pdd_manager::compute_reachable(svector<bool>& reachable) {
 | 
			
		||||
    void pdd_manager::compute_reachable(bool_vector& reachable) {
 | 
			
		||||
        for (unsigned i = m_pdd_stack.size(); i-- > 0; ) {
 | 
			
		||||
            reachable[m_pdd_stack[i]] = true;
 | 
			
		||||
            m_todo.push_back(m_pdd_stack[i]);
 | 
			
		||||
| 
						 | 
				
			
			@ -994,7 +994,7 @@ namespace dd {
 | 
			
		|||
        m_free_nodes.reset();
 | 
			
		||||
        SASSERT(well_formed());
 | 
			
		||||
        IF_VERBOSE(13, verbose_stream() << "(pdd :gc " << m_nodes.size() << ")\n";);
 | 
			
		||||
        svector<bool> reachable(m_nodes.size(), false);
 | 
			
		||||
        bool_vector reachable(m_nodes.size(), false);
 | 
			
		||||
        compute_reachable(reachable);
 | 
			
		||||
        for (unsigned i = m_nodes.size(); i-- > pdd_no_op; ) {
 | 
			
		||||
            if (!reachable[i]) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -227,7 +227,7 @@ namespace dd {
 | 
			
		|||
        bool var_is_leaf(PDD p, unsigned v);
 | 
			
		||||
 | 
			
		||||
        bool is_reachable(PDD p);
 | 
			
		||||
        void compute_reachable(svector<bool>& reachable);
 | 
			
		||||
        void compute_reachable(bool_vector& reachable);
 | 
			
		||||
        void try_gc();
 | 
			
		||||
        void reserve_var(unsigned v);
 | 
			
		||||
        bool well_formed();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ class hilbert_basis {
 | 
			
		|||
 | 
			
		||||
    reslimit&          m_limit;
 | 
			
		||||
    vector<num_vector> m_ineqs;      // set of asserted inequalities
 | 
			
		||||
    svector<bool>      m_iseq;       // inequalities that are equalities
 | 
			
		||||
    bool_vector      m_iseq;       // inequalities that are equalities
 | 
			
		||||
    num_vector         m_store;      // store of vectors
 | 
			
		||||
    svector<offset_t>  m_basis;      // vector of current basis
 | 
			
		||||
    svector<offset_t>  m_free_list;  // free list of unused storage
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ void const_iterator_mon::advance_mask() {
 | 
			
		|||
const_iterator_mon::self_type const_iterator_mon::operator++() {  self_type i = *this; operator++(1); return i;  }
 | 
			
		||||
const_iterator_mon::self_type const_iterator_mon::operator++(int) { advance_mask(); return *this; }
 | 
			
		||||
 | 
			
		||||
const_iterator_mon::const_iterator_mon(const svector<bool>& mask, const factorization_factory *f) : 
 | 
			
		||||
const_iterator_mon::const_iterator_mon(const bool_vector& mask, const factorization_factory *f) : 
 | 
			
		||||
    m_mask(mask),
 | 
			
		||||
    m_ff(f) ,
 | 
			
		||||
    m_full_factorization_returned(false)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ public:
 | 
			
		|||
 | 
			
		||||
struct const_iterator_mon {
 | 
			
		||||
    // fields
 | 
			
		||||
    svector<bool>                  m_mask;
 | 
			
		||||
    bool_vector                  m_mask;
 | 
			
		||||
    const factorization_factory *  m_ff;
 | 
			
		||||
    bool                           m_full_factorization_returned;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ struct const_iterator_mon {
 | 
			
		|||
    self_type operator++();
 | 
			
		||||
    self_type operator++(int);
 | 
			
		||||
 | 
			
		||||
    const_iterator_mon(const svector<bool>& mask, const factorization_factory *f);
 | 
			
		||||
    const_iterator_mon(const bool_vector& mask, const factorization_factory *f);
 | 
			
		||||
    
 | 
			
		||||
    bool operator==(const self_type &other) const;
 | 
			
		||||
    bool operator!=(const self_type &other) const;
 | 
			
		||||
| 
						 | 
				
			
			@ -119,15 +119,15 @@ struct factorization_factory {
 | 
			
		|||
        m_vars(vars), m_monic(m) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    svector<bool> get_mask() const {
 | 
			
		||||
    bool_vector get_mask() const {
 | 
			
		||||
        // we keep the last element always in the first factor to avoid
 | 
			
		||||
        // repeating a pair twice, that is why m_mask is shorter by one then m_vars
 | 
			
		||||
        
 | 
			
		||||
        return
 | 
			
		||||
            m_vars.size() != 2 ?
 | 
			
		||||
            svector<bool>(m_vars.size() - 1, false)
 | 
			
		||||
            bool_vector(m_vars.size() - 1, false)
 | 
			
		||||
            :
 | 
			
		||||
            svector<bool>(1, true); // init mask as in the end() since the full iteration will do the job
 | 
			
		||||
            bool_vector(1, true); // init mask as in the end() since the full iteration will do the job
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    const_iterator_mon begin() const {
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ struct factorization_factory {
 | 
			
		|||
    }
 | 
			
		||||
    
 | 
			
		||||
    const_iterator_mon end() const {
 | 
			
		||||
        svector<bool> mask(m_vars.size() - 1, true);
 | 
			
		||||
        bool_vector mask(m_vars.size() - 1, true);
 | 
			
		||||
        auto it = const_iterator_mon(mask, this);
 | 
			
		||||
        it.m_full_factorization_returned = true;
 | 
			
		||||
        return it;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ class var_eqs {
 | 
			
		|||
 | 
			
		||||
    trail_stack<var_eqs>              m_stack;
 | 
			
		||||
    mutable svector<var_frame>        m_todo;
 | 
			
		||||
    mutable svector<bool>             m_marked;
 | 
			
		||||
    mutable bool_vector             m_marked;
 | 
			
		||||
    mutable unsigned_vector           m_marked_trail;
 | 
			
		||||
    mutable svector<eq_justification> m_justtrail;
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1272,7 +1272,7 @@ namespace polynomial {
 | 
			
		|||
            SASSERT(sz == num_vars());
 | 
			
		||||
            DEBUG_CODE({
 | 
			
		||||
                // check whether xs is really a permutation
 | 
			
		||||
                svector<bool> found;
 | 
			
		||||
                bool_vector found;
 | 
			
		||||
                found.resize(num_vars(), false);
 | 
			
		||||
                for (unsigned i = 0; i < sz; i++) {
 | 
			
		||||
                    SASSERT(xs[i] < num_vars());
 | 
			
		||||
| 
						 | 
				
			
			@ -3218,7 +3218,7 @@ namespace polynomial {
 | 
			
		|||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        svector<bool>  m_found_vars;
 | 
			
		||||
        bool_vector  m_found_vars;
 | 
			
		||||
        void vars(polynomial const * p, var_vector & xs) {
 | 
			
		||||
            xs.reset();
 | 
			
		||||
            m_found_vars.reserve(num_vars(), false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ namespace upolynomial {
 | 
			
		|||
        // the factors to select from
 | 
			
		||||
        factors_type const   & m_factors;
 | 
			
		||||
        // which factors are enabled
 | 
			
		||||
        svector<bool>          m_enabled;
 | 
			
		||||
        bool_vector          m_enabled;
 | 
			
		||||
        // the size of the current selection
 | 
			
		||||
        int                    m_current_size;
 | 
			
		||||
        // the current selection: indices at positions < m_current_size, other values are maxed out
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ namespace opt {
 | 
			
		|||
        static const unsigned   m_objective_id = 0;
 | 
			
		||||
        vector<unsigned_vector> m_var2row_ids;
 | 
			
		||||
        vector<rational>        m_var2value;
 | 
			
		||||
        svector<bool>           m_var2is_int;
 | 
			
		||||
        bool_vector           m_var2is_int;
 | 
			
		||||
        vector<var>             m_new_vars;
 | 
			
		||||
        unsigned_vector         m_lub, m_glb, m_mod;
 | 
			
		||||
        unsigned_vector         m_above, m_below;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -224,7 +224,7 @@ namespace smt {
 | 
			
		|||
        node src = m_graph.get_source(m_enter_id);
 | 
			
		||||
        node tgt = m_graph.get_target(m_enter_id); 
 | 
			
		||||
        svector<edge_id> path;
 | 
			
		||||
        svector<bool> against;
 | 
			
		||||
        bool_vector against;
 | 
			
		||||
        m_tree->get_path(src, tgt, path, against);
 | 
			
		||||
        SASSERT(path.size() >= 1);
 | 
			
		||||
        for (unsigned i = 0; i < path.size(); ++i) {
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ namespace smt {
 | 
			
		|||
        m_delta.set_invalid();
 | 
			
		||||
        edge_id leave_id = null_edge_id;
 | 
			
		||||
        svector<edge_id> path;
 | 
			
		||||
        svector<bool> against;
 | 
			
		||||
        bool_vector against;
 | 
			
		||||
        m_tree->get_path(src, tgt, path, against);
 | 
			
		||||
        SASSERT(path.size() >= 1);
 | 
			
		||||
        for (unsigned i = 0; i < path.size(); ++i) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -476,7 +476,7 @@ private:
 | 
			
		|||
    interval_manager          m_im;
 | 
			
		||||
    scoped_numeral_vector     m_num_buffer;
 | 
			
		||||
 | 
			
		||||
    svector<bool>             m_is_int;
 | 
			
		||||
    bool_vector             m_is_int;
 | 
			
		||||
    ptr_vector<definition>    m_defs;
 | 
			
		||||
    vector<watch_list>        m_wlist;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -153,7 +153,7 @@ namespace datalog {
 | 
			
		|||
        mk_rule_core(fml1, pr, rules, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void rule_manager::mk_negations(app_ref_vector& body, svector<bool>& is_negated) {
 | 
			
		||||
    void rule_manager::mk_negations(app_ref_vector& body, bool_vector& is_negated) {
 | 
			
		||||
        for (unsigned i = 0; i < body.size(); ++i) {
 | 
			
		||||
            expr* e = body[i].get(), *e1;
 | 
			
		||||
            if (m.is_not(e, e1) && m_ctx.is_predicate(e1)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -628,7 +628,7 @@ namespace datalog {
 | 
			
		|||
        }
 | 
			
		||||
        if (change) {
 | 
			
		||||
            app_ref_vector tail(m);
 | 
			
		||||
            svector<bool> tail_neg;
 | 
			
		||||
            bool_vector tail_neg;
 | 
			
		||||
            for (unsigned i = 0; i < ut_len; ++i) {
 | 
			
		||||
                tail.push_back(r->get_tail(i));
 | 
			
		||||
                tail_neg.push_back(r->is_neg_tail(i));
 | 
			
		||||
| 
						 | 
				
			
			@ -660,7 +660,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        var_counter vctr;
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        svector<bool> tail_neg;
 | 
			
		||||
        bool_vector tail_neg;
 | 
			
		||||
        app_ref head(r->get_head(), m);
 | 
			
		||||
 | 
			
		||||
        vctr.count_vars(head);
 | 
			
		||||
| 
						 | 
				
			
			@ -811,7 +811,7 @@ namespace datalog {
 | 
			
		|||
        expr_ref tmp(m);
 | 
			
		||||
        app_ref  new_head(m);
 | 
			
		||||
        app_ref_vector new_tail(m);
 | 
			
		||||
        svector<bool> tail_neg;
 | 
			
		||||
        bool_vector tail_neg;
 | 
			
		||||
        var_subst vs(m, false);
 | 
			
		||||
        tmp = vs(r->get_head(), sz, es);
 | 
			
		||||
        new_head = to_app(tmp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ namespace datalog {
 | 
			
		|||
        app_ref_vector       m_body;
 | 
			
		||||
        app_ref              m_head;
 | 
			
		||||
        expr_ref_vector      m_args;
 | 
			
		||||
        svector<bool>        m_neg;
 | 
			
		||||
        bool_vector        m_neg;
 | 
			
		||||
        hnf                  m_hnf;
 | 
			
		||||
        qe_lite              m_qe;
 | 
			
		||||
        label_rewriter       m_rwr;
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +158,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        void bind_variables(expr* fml, bool is_forall, expr_ref& result);
 | 
			
		||||
 | 
			
		||||
        void mk_negations(app_ref_vector& body, svector<bool>& is_negated);
 | 
			
		||||
        void mk_negations(app_ref_vector& body, bool_vector& is_negated);
 | 
			
		||||
 | 
			
		||||
        void mk_rule_core(expr* fml, proof* p, rule_set& rules, symbol const& name);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace datalog {
 | 
			
		|||
    //
 | 
			
		||||
    //------------------------------
 | 
			
		||||
 | 
			
		||||
    void rule_transformer::plugin::remove_duplicate_tails(app_ref_vector& tail, svector<bool>& tail_neg)
 | 
			
		||||
    void rule_transformer::plugin::remove_duplicate_tails(app_ref_vector& tail, bool_vector& tail_neg)
 | 
			
		||||
    {
 | 
			
		||||
        //one set for positive and one for negative
 | 
			
		||||
        obj_hashtable<app> tail_apps[2];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ namespace datalog {
 | 
			
		|||
        /**
 | 
			
		||||
           Removes duplicate tails.
 | 
			
		||||
        */
 | 
			
		||||
        static void remove_duplicate_tails(app_ref_vector& tail, svector<bool>& tail_neg);
 | 
			
		||||
        static void remove_duplicate_tails(app_ref_vector& tail, bool_vector& tail_neg);
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ namespace datalog {
 | 
			
		|||
        ddnf_node::hash        m_hash;
 | 
			
		||||
        ddnf_node::eq          m_eq;
 | 
			
		||||
        ddnf_nodes             m_nodes;
 | 
			
		||||
        svector<bool>          m_marked;
 | 
			
		||||
        bool_vector          m_marked;
 | 
			
		||||
        stats                  m_stats;
 | 
			
		||||
    public:
 | 
			
		||||
        ddnf_mgr(unsigned n): m_noderefs(*this), m_internalized(false), m_tbv(n),
 | 
			
		||||
| 
						 | 
				
			
			@ -338,7 +338,7 @@ namespace datalog {
 | 
			
		|||
            }
 | 
			
		||||
            ptr_vector<ddnf_node> todo;
 | 
			
		||||
            todo.push_back(m_root);
 | 
			
		||||
            svector<bool> done(m_noderefs.size(), false);
 | 
			
		||||
            bool_vector done(m_noderefs.size(), false);
 | 
			
		||||
            while (!todo.empty()) {
 | 
			
		||||
                ddnf_node& n = *todo.back();
 | 
			
		||||
                if (done[n.get_id()]) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -724,7 +724,7 @@ protected:
 | 
			
		|||
 | 
			
		||||
    dtoken parse_body(app* head) {
 | 
			
		||||
        app_ref_vector body(m_manager);
 | 
			
		||||
        svector<bool> polarity_vect;
 | 
			
		||||
        bool_vector polarity_vect;
 | 
			
		||||
        dtoken tok = m_lexer->next_token();
 | 
			
		||||
        while (tok != TK_ERROR && tok != TK_EOS) {            
 | 
			
		||||
            if (tok == TK_PERIOD) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -582,7 +582,7 @@ namespace datalog {
 | 
			
		|||
            const unsigned_vector m_cols2;
 | 
			
		||||
            bool m_all_neg_bound; //all columns are bound at least once
 | 
			
		||||
            bool m_overlap; //one column in negated table is bound multiple times
 | 
			
		||||
            svector<bool> m_bound;
 | 
			
		||||
            bool_vector m_bound;
 | 
			
		||||
 | 
			
		||||
            convenient_negation_filter_fn(const base_object & tgt, const base_object & neg_t,
 | 
			
		||||
                    unsigned joined_col_cnt, const unsigned * t_cols, const unsigned * negated_cols)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,12 +92,12 @@ namespace datalog {
 | 
			
		|||
    family_id finite_product_relation_plugin::get_relation_kind(finite_product_relation & r,
 | 
			
		||||
            const bool * table_columns) {
 | 
			
		||||
        const relation_signature & sig = r.get_signature();
 | 
			
		||||
        svector<bool> table_cols_vect(sig.size(), table_columns);
 | 
			
		||||
        bool_vector table_cols_vect(sig.size(), table_columns);
 | 
			
		||||
        return m_spec_store.get_relation_kind(sig, rel_spec(table_cols_vect));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void finite_product_relation_plugin::get_all_possible_table_columns(relation_manager & rmgr,
 | 
			
		||||
            const relation_signature & s, svector<bool> & table_columns) {
 | 
			
		||||
            const relation_signature & s, bool_vector & table_columns) {
 | 
			
		||||
        SASSERT(table_columns.empty());
 | 
			
		||||
        unsigned s_sz = s.size();
 | 
			
		||||
        for(unsigned i=0; i<s_sz; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ namespace datalog {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    relation_base * finite_product_relation_plugin::mk_empty(const relation_signature & s) {
 | 
			
		||||
        svector<bool> table_columns;
 | 
			
		||||
        bool_vector table_columns;
 | 
			
		||||
        get_all_possible_table_columns(s, table_columns);
 | 
			
		||||
#ifndef _EXTERNAL_RELEASE
 | 
			
		||||
        unsigned s_sz = s.size();
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ namespace datalog {
 | 
			
		|||
        SASSERT(join_fun);
 | 
			
		||||
        scoped_rel<table_base> res_table = (*join_fun)(t, *idx_singleton);
 | 
			
		||||
 | 
			
		||||
        svector<bool> table_cols(sig.size(), true);
 | 
			
		||||
        bool_vector table_cols(sig.size(), true);
 | 
			
		||||
        finite_product_relation * res = mk_empty(sig, table_cols.c_ptr());
 | 
			
		||||
 | 
			
		||||
        //this one does not need to be deleted -- it will be taken over by \c res in the \c init function
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ namespace datalog {
 | 
			
		|||
        idx_singleton_fact.push_back(0);
 | 
			
		||||
        idx_singleton->add_fact(idx_singleton_fact);
 | 
			
		||||
 | 
			
		||||
        svector<bool> table_cols(sig.size(), false);
 | 
			
		||||
        bool_vector table_cols(sig.size(), false);
 | 
			
		||||
        finite_product_relation * res = mk_empty(sig, table_cols.c_ptr());
 | 
			
		||||
 | 
			
		||||
        relation_vector rels;
 | 
			
		||||
| 
						 | 
				
			
			@ -378,7 +378,7 @@ namespace datalog {
 | 
			
		|||
        scoped_ptr<table_transformer_fn> m_tjoined_second_rel_remover;
 | 
			
		||||
 | 
			
		||||
        //determines which columns of the result are table columns and which are in the inner relation
 | 
			
		||||
        svector<bool> m_res_table_columns;
 | 
			
		||||
        bool_vector m_res_table_columns;
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        class join_maker : public table_row_mutator_fn {
 | 
			
		||||
| 
						 | 
				
			
			@ -529,7 +529,7 @@ namespace datalog {
 | 
			
		|||
        scoped_ptr<relation_union_fn> m_inner_rel_union;
 | 
			
		||||
 | 
			
		||||
        //determines which columns of the result are table columns and which are in the inner relation
 | 
			
		||||
        svector<bool> m_res_table_columns;
 | 
			
		||||
        bool_vector m_res_table_columns;
 | 
			
		||||
    public:
 | 
			
		||||
        project_fn(const finite_product_relation & r, unsigned col_cnt, const unsigned * removed_cols)
 | 
			
		||||
                : convenient_relation_project_fn(r.get_signature(), col_cnt, removed_cols) {
 | 
			
		||||
| 
						 | 
				
			
			@ -665,7 +665,7 @@ namespace datalog {
 | 
			
		|||
        unsigned_vector m_rel_permutation;
 | 
			
		||||
 | 
			
		||||
        //determines which columns of the result are table columns and which are in the inner relation
 | 
			
		||||
        svector<bool> m_res_table_columns;
 | 
			
		||||
        bool_vector m_res_table_columns;
 | 
			
		||||
    public:
 | 
			
		||||
        rename_fn(const finite_product_relation & r, unsigned cycle_len, const unsigned * permutation_cycle)
 | 
			
		||||
                : convenient_relation_rename_fn(r.get_signature(), cycle_len, permutation_cycle) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2156,7 +2156,7 @@ namespace datalog {
 | 
			
		|||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        unsigned sig_sz = rels.back()->get_signature().size();
 | 
			
		||||
        svector<bool> table_cols(sig_sz, true);
 | 
			
		||||
        bool_vector table_cols(sig_sz, true);
 | 
			
		||||
 | 
			
		||||
        ptr_vector<finite_product_relation>::iterator it = rels.begin();
 | 
			
		||||
        ptr_vector<finite_product_relation>::iterator end = rels.end();
 | 
			
		||||
| 
						 | 
				
			
			@ -2221,7 +2221,7 @@ namespace datalog {
 | 
			
		|||
        scoped_rel<relation_base> moved_cols_trel =
 | 
			
		||||
            rmgr.get_table_relation_plugin(moved_cols_table->get_plugin()).mk_from_table(moved_cols_sig, moved_cols_table);
 | 
			
		||||
 | 
			
		||||
        svector<bool> moved_cols_table_flags(moved_cols_sig.size(), false);
 | 
			
		||||
        bool_vector moved_cols_table_flags(moved_cols_sig.size(), false);
 | 
			
		||||
 | 
			
		||||
        scoped_rel<finite_product_relation> moved_cols_rel = get_plugin().mk_empty(moved_cols_sig,
 | 
			
		||||
            moved_cols_table_flags.c_ptr());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,10 +36,10 @@ namespace datalog {
 | 
			
		|||
    public:
 | 
			
		||||
        struct rel_spec {
 | 
			
		||||
            family_id m_inner_kind; //null_family_id means we don't care about the kind
 | 
			
		||||
            svector<bool> m_table_cols;
 | 
			
		||||
            bool_vector m_table_cols;
 | 
			
		||||
 | 
			
		||||
            rel_spec() : m_inner_kind(null_family_id) {}
 | 
			
		||||
            rel_spec(const svector<bool>& table_cols) 
 | 
			
		||||
            rel_spec(const bool_vector& table_cols) 
 | 
			
		||||
                : m_inner_kind(null_family_id), m_table_cols(table_cols) {}
 | 
			
		||||
 | 
			
		||||
            bool operator==(const rel_spec & o) const {
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +74,8 @@ namespace datalog {
 | 
			
		|||
        family_id get_relation_kind(finite_product_relation & r, const bool * table_columns);
 | 
			
		||||
 | 
			
		||||
        static void get_all_possible_table_columns(relation_manager & rmgr, const relation_signature & s, 
 | 
			
		||||
            svector<bool> & table_columns);
 | 
			
		||||
        void get_all_possible_table_columns(const relation_signature & s, svector<bool> & table_columns) {
 | 
			
		||||
            bool_vector & table_columns);
 | 
			
		||||
        void get_all_possible_table_columns(const relation_signature & s, bool_vector & table_columns) {
 | 
			
		||||
            get_all_possible_table_columns(get_manager(), s, table_columns);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -644,10 +644,10 @@ namespace datalog {
 | 
			
		|||
        relation_signature sig;
 | 
			
		||||
        rmgr.from_predicate(e_decl, sig);
 | 
			
		||||
 | 
			
		||||
        svector<bool> inner_sieve(sz-1, true);
 | 
			
		||||
        bool_vector inner_sieve(sz-1, true);
 | 
			
		||||
        inner_sieve.push_back(false);
 | 
			
		||||
 | 
			
		||||
        svector<bool> expl_sieve(sz-1, false);
 | 
			
		||||
        bool_vector expl_sieve(sz-1, false);
 | 
			
		||||
        expl_sieve.push_back(true);
 | 
			
		||||
 | 
			
		||||
        sieve_relation_plugin & sieve_plugin = sieve_relation_plugin::get_plugin(rmgr);
 | 
			
		||||
| 
						 | 
				
			
			@ -715,7 +715,7 @@ namespace datalog {
 | 
			
		|||
        app_ref e_head(get_e_lit(r->get_head(), head_var), m_manager);
 | 
			
		||||
 | 
			
		||||
        app_ref_vector e_tail(m_manager);
 | 
			
		||||
        svector<bool> neg_flags;
 | 
			
		||||
        bool_vector neg_flags;
 | 
			
		||||
        unsigned pos_tail_sz = r->get_positive_tail_size();
 | 
			
		||||
        for (unsigned i=0; i<pos_tail_sz; i++) {
 | 
			
		||||
            unsigned e_var = next_var++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -373,7 +373,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        app * new_head = r->get_head();
 | 
			
		||||
        ptr_vector<app> new_tail;
 | 
			
		||||
        svector<bool> new_negs;
 | 
			
		||||
        bool_vector new_negs;
 | 
			
		||||
        unsigned tail_sz = r->get_tail_size();
 | 
			
		||||
        for (unsigned i=0; i<tail_sz; i++) {
 | 
			
		||||
            new_tail.push_back(r->get_tail(i));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -711,7 +711,7 @@ namespace datalog {
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                ptr_vector<app> tail(content);
 | 
			
		||||
                svector<bool> negs(tail.size(), false);
 | 
			
		||||
                bool_vector negs(tail.size(), false);
 | 
			
		||||
                unsigned or_len = orig_r->get_tail_size();
 | 
			
		||||
                for (unsigned i=orig_r->get_positive_tail_size(); i < or_len; i++) {
 | 
			
		||||
                    tail.push_back(orig_r->get_tail(i));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ namespace datalog {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    void sieve_relation_plugin::extract_inner_columns(const relation_signature & s, relation_plugin & inner, 
 | 
			
		||||
            svector<bool> & inner_columns) {
 | 
			
		||||
            bool_vector & inner_columns) {
 | 
			
		||||
        SASSERT(inner_columns.size()==s.size());
 | 
			
		||||
        unsigned n = s.size();
 | 
			
		||||
        relation_signature inner_sig_singleton;
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ namespace datalog {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    void sieve_relation_plugin::collect_inner_signature(const relation_signature & s, 
 | 
			
		||||
            const svector<bool> & inner_columns, relation_signature & inner_sig) {
 | 
			
		||||
            const bool_vector & inner_columns, relation_signature & inner_sig) {
 | 
			
		||||
        SASSERT(inner_columns.size()==s.size());
 | 
			
		||||
        inner_sig.reset();
 | 
			
		||||
        unsigned n = s.size();
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ namespace datalog {
 | 
			
		|||
            relation_signature & inner_sig) {
 | 
			
		||||
        UNREACHABLE();
 | 
			
		||||
#if 0
 | 
			
		||||
        svector<bool> inner_cols(s.size());
 | 
			
		||||
        bool_vector inner_cols(s.size());
 | 
			
		||||
        extract_inner_columns(s, inner_cols.c_ptr());
 | 
			
		||||
        collect_inner_signature(s, inner_cols, inner_sig);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -228,7 +228,7 @@ namespace datalog {
 | 
			
		|||
        UNREACHABLE();
 | 
			
		||||
        return nullptr;
 | 
			
		||||
#if 0
 | 
			
		||||
        svector<bool> inner_cols(s.size());
 | 
			
		||||
        bool_vector inner_cols(s.size());
 | 
			
		||||
        extract_inner_columns(s, inner_cols.c_ptr());
 | 
			
		||||
        return mk_empty(s, inner_cols.c_ptr());
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -236,7 +236,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
    sieve_relation * sieve_relation_plugin::mk_empty(const relation_signature & s, relation_plugin & inner_plugin) {
 | 
			
		||||
        SASSERT(!inner_plugin.is_sieve_relation()); //it does not make sense to make a sieve of a sieve
 | 
			
		||||
        svector<bool> inner_cols(s.size());
 | 
			
		||||
        bool_vector inner_cols(s.size());
 | 
			
		||||
        extract_inner_columns(s, inner_plugin, inner_cols);
 | 
			
		||||
        relation_signature inner_sig;
 | 
			
		||||
        collect_inner_signature(s, inner_cols, inner_sig);
 | 
			
		||||
| 
						 | 
				
			
			@ -248,14 +248,14 @@ namespace datalog {
 | 
			
		|||
        relation_signature empty_sig;
 | 
			
		||||
        relation_plugin& plugin = get_manager().get_appropriate_plugin(s);
 | 
			
		||||
        relation_base * inner = plugin.mk_full(p, empty_sig, null_family_id);
 | 
			
		||||
        svector<bool> inner_cols;
 | 
			
		||||
        bool_vector inner_cols;
 | 
			
		||||
        inner_cols.resize(s.size(), false);
 | 
			
		||||
        return mk_from_inner(s, inner_cols, inner);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sieve_relation * sieve_relation_plugin::full(func_decl* p, const relation_signature & s, relation_plugin & inner_plugin) {
 | 
			
		||||
        SASSERT(!inner_plugin.is_sieve_relation()); //it does not make sense to make a sieve of a sieve
 | 
			
		||||
        svector<bool> inner_cols(s.size());
 | 
			
		||||
        bool_vector inner_cols(s.size());
 | 
			
		||||
        extract_inner_columns(s, inner_plugin, inner_cols);
 | 
			
		||||
        relation_signature inner_sig;
 | 
			
		||||
        collect_inner_signature(s, inner_cols, inner_sig);
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +267,7 @@ namespace datalog {
 | 
			
		|||
        sieve_relation_plugin & m_plugin;
 | 
			
		||||
        unsigned_vector m_inner_cols_1;
 | 
			
		||||
        unsigned_vector m_inner_cols_2;
 | 
			
		||||
        svector<bool> m_result_inner_cols;
 | 
			
		||||
        bool_vector m_result_inner_cols;
 | 
			
		||||
 | 
			
		||||
        scoped_ptr<relation_join_fn> m_inner_join_fun;
 | 
			
		||||
    public:
 | 
			
		||||
| 
						 | 
				
			
			@ -347,7 +347,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
    class sieve_relation_plugin::transformer_fn : public convenient_relation_transformer_fn {
 | 
			
		||||
        svector<bool> m_result_inner_cols;
 | 
			
		||||
        bool_vector m_result_inner_cols;
 | 
			
		||||
 | 
			
		||||
        scoped_ptr<relation_transformer_fn> m_inner_fun;
 | 
			
		||||
    public:
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +383,7 @@ namespace datalog {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        svector<bool> result_inner_cols = r.m_inner_cols;
 | 
			
		||||
        bool_vector result_inner_cols = r.m_inner_cols;
 | 
			
		||||
        project_out_vector_columns(result_inner_cols, col_cnt, removed_cols);
 | 
			
		||||
 | 
			
		||||
        relation_signature result_sig;
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ namespace datalog {
 | 
			
		|||
        unsigned_vector inner_permutation;
 | 
			
		||||
        collect_sub_permutation(permutation, r.m_sig2inner, inner_permutation, inner_identity);
 | 
			
		||||
 | 
			
		||||
        svector<bool> result_inner_cols = r.m_inner_cols;
 | 
			
		||||
        bool_vector result_inner_cols = r.m_inner_cols;
 | 
			
		||||
        permutate_by_cycle(result_inner_cols, cycle_len, permutation_cycle);
 | 
			
		||||
 | 
			
		||||
        relation_signature result_sig;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ namespace datalog {
 | 
			
		|||
        friend class sieve_relation;
 | 
			
		||||
    public:
 | 
			
		||||
        struct rel_spec {
 | 
			
		||||
            svector<bool> m_inner_cols;
 | 
			
		||||
            bool_vector m_inner_cols;
 | 
			
		||||
            family_id m_inner_kind;
 | 
			
		||||
 | 
			
		||||
            /**
 | 
			
		||||
| 
						 | 
				
			
			@ -70,9 +70,9 @@ namespace datalog {
 | 
			
		|||
        family_id get_relation_kind(sieve_relation & r, const bool * inner_columns);
 | 
			
		||||
 | 
			
		||||
        void extract_inner_columns(const relation_signature & s, relation_plugin & inner, 
 | 
			
		||||
            svector<bool> & inner_columns);
 | 
			
		||||
            bool_vector & inner_columns);
 | 
			
		||||
        void extract_inner_signature(const relation_signature & s, relation_signature & inner_sig);
 | 
			
		||||
        void collect_inner_signature(const relation_signature & s, const svector<bool> & inner_columns, 
 | 
			
		||||
        void collect_inner_signature(const relation_signature & s, const bool_vector & inner_columns, 
 | 
			
		||||
            relation_signature & inner_sig);
 | 
			
		||||
    public:
 | 
			
		||||
        static symbol get_name() { return symbol("sieve_relation"); }
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +89,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        family_id get_relation_kind(const relation_signature & sig, const bool * inner_columns, 
 | 
			
		||||
            family_id inner_kind);
 | 
			
		||||
        family_id get_relation_kind(const relation_signature & sig, const svector<bool> & inner_columns, 
 | 
			
		||||
        family_id get_relation_kind(const relation_signature & sig, const bool_vector & inner_columns, 
 | 
			
		||||
                family_id inner_kind) {
 | 
			
		||||
            SASSERT(sig.size()==inner_columns.size());
 | 
			
		||||
            return get_relation_kind(sig, inner_columns.c_ptr(), inner_kind);
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        sieve_relation * mk_from_inner(const relation_signature & s, const bool * inner_columns, 
 | 
			
		||||
            relation_base * inner_rel);
 | 
			
		||||
        sieve_relation * mk_from_inner(const relation_signature & s, const svector<bool> & inner_columns, 
 | 
			
		||||
        sieve_relation * mk_from_inner(const relation_signature & s, const bool_vector & inner_columns, 
 | 
			
		||||
                relation_base * inner_rel) {
 | 
			
		||||
            SASSERT(inner_columns.size()==s.size());
 | 
			
		||||
            return mk_from_inner(s, inner_columns.c_ptr(), inner_rel);
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ namespace datalog {
 | 
			
		|||
        friend class sieve_relation_plugin::union_fn;
 | 
			
		||||
        friend class sieve_relation_plugin::filter_fn;
 | 
			
		||||
 | 
			
		||||
        svector<bool> m_inner_cols;
 | 
			
		||||
        bool_vector m_inner_cols;
 | 
			
		||||
 | 
			
		||||
        unsigned_vector m_sig2inner;
 | 
			
		||||
        unsigned_vector m_inner2sig;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1112,7 +1112,7 @@ namespace datalog {
 | 
			
		|||
            SASSERT(joined_col_cnt > 0 || neg.get_signature().size() == 0);
 | 
			
		||||
            m_is_subtract = (joined_col_cnt == t.get_signature().size());
 | 
			
		||||
            m_is_subtract &= (joined_col_cnt == neg.get_signature().size());
 | 
			
		||||
            svector<bool> found(joined_col_cnt, false);
 | 
			
		||||
            bool_vector found(joined_col_cnt, false);
 | 
			
		||||
            for (unsigned i = 0; m_is_subtract && i < joined_col_cnt; ++i) {
 | 
			
		||||
                m_is_subtract = !found[t_cols[i]] && (t_cols[i] == neg_cols[i]);
 | 
			
		||||
                found[t_cols[i]] = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,9 +239,8 @@ void derivation::exist_skolemize(expr* fml, app_ref_vector &vars, expr_ref &res)
 | 
			
		|||
        vars.shrink(j);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TRACE("spacer", tout << "Skolemizing: ";
 | 
			
		||||
          for (auto v : vars) tout << " " << mk_pp(v, m) << " ";
 | 
			
		||||
          tout << "\nfrom " << mk_pp(fml, m) << "\n";
 | 
			
		||||
    TRACE("spacer", tout << "Skolemizing: " << vars << "\n";
 | 
			
		||||
          tout << "from " << mk_pp(fml, m) << "\n";
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    app_ref_vector pinned(m);
 | 
			
		||||
| 
						 | 
				
			
			@ -868,7 +867,7 @@ const datalog::rule *pred_transformer::find_rule(model &model) {
 | 
			
		|||
 | 
			
		||||
const datalog::rule *pred_transformer::find_rule(model &model,
 | 
			
		||||
                                                 bool& is_concrete,
 | 
			
		||||
                                                 vector<bool>& reach_pred_used,
 | 
			
		||||
                                                 bool_vector& reach_pred_used,
 | 
			
		||||
                                                 unsigned& num_reuse_reach)
 | 
			
		||||
{
 | 
			
		||||
    // find a rule whose tag is true in the model;
 | 
			
		||||
| 
						 | 
				
			
			@ -1188,11 +1187,10 @@ expr_ref pred_transformer::get_origin_summary (model &mdl,
 | 
			
		|||
    // (skip quantified lemmas cause we can't validate them in the model)
 | 
			
		||||
    // TBD: for quantified lemmas use current instances
 | 
			
		||||
    flatten_and(summary);
 | 
			
		||||
 | 
			
		||||
    for (auto* s : summary) {
 | 
			
		||||
        if (!is_quantifier(s) && !mdl.is_true(s)) {
 | 
			
		||||
            TRACE("spacer", tout << "Summary not true in the model: "
 | 
			
		||||
                  << mk_pp(s, m) << "\n";);
 | 
			
		||||
            // return expr_ref(m);
 | 
			
		||||
            TRACE("spacer", tout << "Summary not true in the model: " << mk_pp(s, m) << "\n";);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -1209,12 +1207,10 @@ void pred_transformer::add_cover(unsigned level, expr* property, bool bg)
 | 
			
		|||
    // replace bound variables by local constants.
 | 
			
		||||
    expr_ref result(property, m), v(m), c(m);
 | 
			
		||||
    expr_substitution sub(m);
 | 
			
		||||
    proof_ref pr(m);
 | 
			
		||||
    pr = m.mk_asserted(m.mk_true());
 | 
			
		||||
    for (unsigned i = 0; i < sig_size(); ++i) {
 | 
			
		||||
        c = m.mk_const(pm.o2n(sig(i), 0));
 | 
			
		||||
        v = m.mk_var(i, sig(i)->get_range());
 | 
			
		||||
        sub.insert(v, c, pr);
 | 
			
		||||
        sub.insert(v, c);
 | 
			
		||||
    }
 | 
			
		||||
    scoped_ptr<expr_replacer> rep = mk_default_expr_replacer(m, false);
 | 
			
		||||
    rep->set_substitution(&sub);
 | 
			
		||||
| 
						 | 
				
			
			@ -1224,13 +1220,14 @@ void pred_transformer::add_cover(unsigned level, expr* property, bool bg)
 | 
			
		|||
    // add the property.
 | 
			
		||||
    expr_ref_vector lemmas(m);
 | 
			
		||||
    flatten_and(result, lemmas);
 | 
			
		||||
    for (unsigned i = 0, sz = lemmas.size(); i < sz; ++i) {
 | 
			
		||||
        add_lemma(lemmas.get(i), level, bg);
 | 
			
		||||
    for (expr * f: lemmas) {
 | 
			
		||||
        add_lemma(f, level, bg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pred_transformer::propagate_to_infinity (unsigned level)
 | 
			
		||||
{m_frames.propagate_to_infinity (level);}
 | 
			
		||||
void pred_transformer::propagate_to_infinity (unsigned level) {
 | 
			
		||||
    m_frames.propagate_to_infinity (level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// compute a conjunction of all background facts
 | 
			
		||||
void pred_transformer::get_pred_bg_invs(expr_ref_vector& out) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1274,7 +1271,9 @@ bool pred_transformer::is_blocked (pob &n, unsigned &uses_level)
 | 
			
		|||
    // XXX quic3: not all lemmas are asserted at the post-condition
 | 
			
		||||
    lbool res = m_solver->check_assumptions (post, _aux, _aux,
 | 
			
		||||
                                            0, nullptr, 0);
 | 
			
		||||
    if (res == l_false) { uses_level = m_solver->uses_level(); }
 | 
			
		||||
    if (res == l_false) { 
 | 
			
		||||
        uses_level = m_solver->uses_level(); 
 | 
			
		||||
    }
 | 
			
		||||
    return res == l_false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1298,10 +1297,9 @@ bool pred_transformer::is_qblocked (pob &n) {
 | 
			
		|||
 | 
			
		||||
    // assert all lemmas
 | 
			
		||||
    bool has_quant = false;
 | 
			
		||||
    for (unsigned i = 0, sz = frame_lemmas.size (); i < sz; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        has_quant = has_quant || is_quantifier(frame_lemmas.get(i));
 | 
			
		||||
        s->assert_expr(frame_lemmas.get(i));
 | 
			
		||||
    for (expr* f : frame_lemmas) {
 | 
			
		||||
        has_quant |= is_quantifier(f);
 | 
			
		||||
        s->assert_expr(f);
 | 
			
		||||
    }
 | 
			
		||||
    if (!has_quant) return false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1335,7 +1333,7 @@ void pred_transformer::mbp(app_ref_vector &vars, expr_ref &fml, model &mdl,
 | 
			
		|||
lbool pred_transformer::is_reachable(pob& n, expr_ref_vector* core,
 | 
			
		||||
                                     model_ref* model, unsigned& uses_level,
 | 
			
		||||
                                     bool& is_concrete, datalog::rule const*& r,
 | 
			
		||||
                                     vector<bool>& reach_pred_used,
 | 
			
		||||
                                     bool_vector& reach_pred_used,
 | 
			
		||||
                                     unsigned& num_reuse_reach)
 | 
			
		||||
{
 | 
			
		||||
    TRACE("spacer",
 | 
			
		||||
| 
						 | 
				
			
			@ -1388,14 +1386,8 @@ lbool pred_transformer::is_reachable(pob& n, expr_ref_vector* core,
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TRACE ("spacer",
 | 
			
		||||
           if (!reach_assumps.empty ()) {
 | 
			
		||||
               tout << "reach assumptions\n";
 | 
			
		||||
               for (unsigned i = 0; i < reach_assumps.size (); i++) {
 | 
			
		||||
                   tout << mk_pp (reach_assumps.get (i), m) << "\n";
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
        );
 | 
			
		||||
    CTRACE("spacer", !reach_assumps.empty(),
 | 
			
		||||
        tout << "reach assumptions\n" << reach_assumps << "\n";);
 | 
			
		||||
 | 
			
		||||
    // check local reachability;
 | 
			
		||||
    // result is either sat (with some reach assumps) or
 | 
			
		||||
| 
						 | 
				
			
			@ -1404,24 +1396,15 @@ lbool pred_transformer::is_reachable(pob& n, expr_ref_vector* core,
 | 
			
		|||
    lbool is_sat = m_solver->check_assumptions (post, reach_assumps,
 | 
			
		||||
                                               m_transition_clause, 1, &bg, 0);
 | 
			
		||||
 | 
			
		||||
    TRACE ("spacer",
 | 
			
		||||
           if (!reach_assumps.empty ()) {
 | 
			
		||||
               tout << "reach assumptions used\n";
 | 
			
		||||
               for (unsigned i = 0; i < reach_assumps.size (); i++) {
 | 
			
		||||
                   tout << mk_pp (reach_assumps.get (i), m) << "\n";
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
        );
 | 
			
		||||
    CTRACE("spacer", !reach_assumps.empty(),
 | 
			
		||||
        tout << "reach assumptions\n" << reach_assumps << "\n";);
 | 
			
		||||
 | 
			
		||||
    if (is_sat == l_true || is_sat == l_undef) {
 | 
			
		||||
        if (core) { core->reset(); }
 | 
			
		||||
        if (model && model->get()) {
 | 
			
		||||
            r = find_rule(**model, is_concrete, reach_pred_used, num_reuse_reach);
 | 
			
		||||
            TRACE ("spacer", tout << "reachable "
 | 
			
		||||
                   << "is_concrete " << is_concrete << " rused: ";
 | 
			
		||||
                   for (unsigned i = 0, sz = reach_pred_used.size (); i < sz; ++i)
 | 
			
		||||
                       tout << reach_pred_used [i];
 | 
			
		||||
                   tout << "\n";);
 | 
			
		||||
            TRACE("spacer", 
 | 
			
		||||
                tout << "reachable " << r << " is_concrete " << is_concrete << " rused: " << reach_pred_used << "\n";);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return is_sat;
 | 
			
		||||
| 
						 | 
				
			
			@ -2924,8 +2907,6 @@ expr_ref context::get_answer()
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
expr_ref context::mk_unsat_answer() const
 | 
			
		||||
{
 | 
			
		||||
    expr_ref_vector refs(m);
 | 
			
		||||
| 
						 | 
				
			
			@ -2935,7 +2916,6 @@ expr_ref context::mk_unsat_answer() const
 | 
			
		|||
    return ex.to_expr();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
proof_ref context::get_ground_refutation() const {
 | 
			
		||||
    if (m_last_result != l_true) {
 | 
			
		||||
        IF_VERBOSE(0, verbose_stream()
 | 
			
		||||
| 
						 | 
				
			
			@ -3272,7 +3252,7 @@ bool context::is_reachable(pob &n)
 | 
			
		|||
    bool is_concrete;
 | 
			
		||||
    const datalog::rule * r = nullptr;
 | 
			
		||||
    // denotes which predecessor's (along r) reach facts are used
 | 
			
		||||
    vector<bool> reach_pred_used;
 | 
			
		||||
    bool_vector reach_pred_used;
 | 
			
		||||
    unsigned num_reuse_reach = 0;
 | 
			
		||||
 | 
			
		||||
    unsigned saved = n.level ();
 | 
			
		||||
| 
						 | 
				
			
			@ -3382,7 +3362,7 @@ lbool context::expand_pob(pob& n, pob_ref_buffer &out)
 | 
			
		|||
    bool is_concrete;
 | 
			
		||||
    const datalog::rule * r = nullptr;
 | 
			
		||||
    // denotes which predecessor's (along r) reach facts are used
 | 
			
		||||
    vector<bool> reach_pred_used;
 | 
			
		||||
    bool_vector reach_pred_used;
 | 
			
		||||
    unsigned num_reuse_reach = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3694,11 +3674,7 @@ reach_fact *pred_transformer::mk_rf(pob& n, model &mdl, const datalog::rule& r)
 | 
			
		|||
    TRACE ("spacer",
 | 
			
		||||
           tout << "Reach fact, before QE:\n";
 | 
			
		||||
           tout << mk_pp (res, m) << "\n";
 | 
			
		||||
           tout << "Vars:\n";
 | 
			
		||||
           for (unsigned i = 0; i < vars.size(); ++i) {
 | 
			
		||||
               tout << mk_pp(vars.get (i), m) << "\n";
 | 
			
		||||
           }
 | 
			
		||||
        );
 | 
			
		||||
           tout << "Vars:\n" << vars << "\n";);        
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        timeit _timer1 (is_trace_enabled("spacer_timeit"),
 | 
			
		||||
| 
						 | 
				
			
			@ -3711,10 +3687,7 @@ reach_fact *pred_transformer::mk_rf(pob& n, model &mdl, const datalog::rule& r)
 | 
			
		|||
    TRACE ("spacer",
 | 
			
		||||
           tout << "Reach fact, after QE project:\n";
 | 
			
		||||
           tout << mk_pp (res, m) << "\n";
 | 
			
		||||
           tout << "Vars:\n";
 | 
			
		||||
           for (unsigned i = 0; i < vars.size(); ++i) {
 | 
			
		||||
               tout << mk_pp(vars.get (i), m) << "\n";
 | 
			
		||||
           }
 | 
			
		||||
           tout << "Vars:\n" << vars << "\n";
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    SASSERT (vars.empty ());
 | 
			
		||||
| 
						 | 
				
			
			@ -3733,7 +3706,7 @@ reach_fact *pred_transformer::mk_rf(pob& n, model &mdl, const datalog::rule& r)
 | 
			
		|||
*/
 | 
			
		||||
bool context::create_children(pob& n, datalog::rule const& r,
 | 
			
		||||
                              model &mdl,
 | 
			
		||||
                              const vector<bool> &reach_pred_used,
 | 
			
		||||
                              const bool_vector &reach_pred_used,
 | 
			
		||||
                              pob_ref_buffer &out)
 | 
			
		||||
{
 | 
			
		||||
    scoped_watch _w_ (m_create_children_watch);
 | 
			
		||||
| 
						 | 
				
			
			@ -4079,9 +4052,8 @@ inline bool pob_lt_proc::operator() (const pob *pn1, const pob *pn2) const
 | 
			
		|||
                verbose_stream()
 | 
			
		||||
                << "dup: " << n1.pt().head()->get_name()
 | 
			
		||||
                << "(" << n1.level() << ", " << n1.depth() << ") "
 | 
			
		||||
                        << p1->get_id () << "\n";
 | 
			
		||||
                << p1->get_id() << "\n";);
 | 
			
		||||
                        //<< " p1: " << mk_pp (const_cast<expr*>(p1), m) << "\n"
 | 
			
		||||
                );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // XXX see comment below on identical nodes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -487,7 +487,7 @@ public:
 | 
			
		|||
    bool is_ctp_blocked(lemma *lem);
 | 
			
		||||
    const datalog::rule *find_rule(model &mdl);
 | 
			
		||||
    const datalog::rule *find_rule(model &mev, bool& is_concrete,
 | 
			
		||||
                                   vector<bool>& reach_pred_used,
 | 
			
		||||
                                   bool_vector& reach_pred_used,
 | 
			
		||||
                                   unsigned& num_reuse_reach);
 | 
			
		||||
    expr* get_transition(datalog::rule const& r) {
 | 
			
		||||
        pt_rule *p;
 | 
			
		||||
| 
						 | 
				
			
			@ -530,7 +530,7 @@ public:
 | 
			
		|||
    lbool is_reachable(pob& n, expr_ref_vector* core, model_ref *model,
 | 
			
		||||
                       unsigned& uses_level, bool& is_concrete,
 | 
			
		||||
                       datalog::rule const*& r,
 | 
			
		||||
                       vector<bool>& reach_pred_used,
 | 
			
		||||
                       bool_vector& reach_pred_used,
 | 
			
		||||
                       unsigned& num_reuse_reach);
 | 
			
		||||
    bool is_invariant(unsigned level, lemma* lem,
 | 
			
		||||
                      unsigned& solver_level,
 | 
			
		||||
| 
						 | 
				
			
			@ -1010,7 +1010,7 @@ class context {
 | 
			
		|||
    lbool expand_pob(pob &n, pob_ref_buffer &out);
 | 
			
		||||
    bool create_children(pob& n, const datalog::rule &r,
 | 
			
		||||
                         model &mdl,
 | 
			
		||||
                         const vector<bool>& reach_pred_used,
 | 
			
		||||
                         const bool_vector& reach_pred_used,
 | 
			
		||||
                         pob_ref_buffer &out);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,8 +211,8 @@ namespace spacer_qe {
 | 
			
		|||
        expr_ref_vector  m_terms;
 | 
			
		||||
        vector<rational> m_coeffs;
 | 
			
		||||
        vector<rational> m_divs;
 | 
			
		||||
        svector<bool>    m_strict;
 | 
			
		||||
        svector<bool>    m_eq;
 | 
			
		||||
        bool_vector    m_strict;
 | 
			
		||||
        bool_vector    m_eq;
 | 
			
		||||
        scoped_ptr<contains_app> m_var;
 | 
			
		||||
 | 
			
		||||
        bool is_linear(rational const& mul, expr* t, rational& c, expr_ref_vector& ts) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ namespace datalog {
 | 
			
		|||
        rule_ref new_rule(rm);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref head(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        app_ref query(m);
 | 
			
		||||
        query = m.mk_fresh_const("Q", m.mk_bool_sort());
 | 
			
		||||
        result->set_output_predicate(query->get_decl());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ namespace datalog {
 | 
			
		|||
        expr_ref_vector revsub(m), conjs(m);
 | 
			
		||||
        rl.get_vars(m, sorts);
 | 
			
		||||
        revsub.resize(sorts.size());  
 | 
			
		||||
        svector<bool> valid(sorts.size(), true);
 | 
			
		||||
        bool_vector valid(sorts.size(), true);
 | 
			
		||||
        for (unsigned i = 0; i < sub.size(); ++i) {
 | 
			
		||||
            expr* e = sub[i];
 | 
			
		||||
            sort* s = m.get_sort(e);
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ namespace datalog {
 | 
			
		|||
        expr_ref_vector conjs1(m), conjs(m);
 | 
			
		||||
        rule_ref res(rm);
 | 
			
		||||
        bool_rewriter bwr(m);
 | 
			
		||||
        svector<bool> is_neg;
 | 
			
		||||
        bool_vector is_neg;
 | 
			
		||||
        tgt->get_vars(m, sorts1);
 | 
			
		||||
        src.get_vars(m, sorts2);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ namespace datalog {
 | 
			
		|||
        ast_manager & m;
 | 
			
		||||
        context & m_context;
 | 
			
		||||
        vector<app*> m_new_tail;
 | 
			
		||||
        svector<bool> m_new_tail_neg;
 | 
			
		||||
        bool_vector m_new_tail_neg;
 | 
			
		||||
        rule_set * bottom_up(rule_set const & source);
 | 
			
		||||
        rule_set * top_down(rule_set const & source);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ namespace datalog {
 | 
			
		|||
        m_current = r;
 | 
			
		||||
        app * new_head = r->get_head();
 | 
			
		||||
        app_ref_vector new_tail(m);
 | 
			
		||||
        svector<bool>  new_is_negated;
 | 
			
		||||
        bool_vector  new_is_negated;
 | 
			
		||||
        unsigned sz = r->get_tail_size();
 | 
			
		||||
        bool rule_modified = false;
 | 
			
		||||
        for (unsigned i = 0; i < sz; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ namespace datalog {
 | 
			
		|||
            unifier        m_unif;
 | 
			
		||||
            app_ref        m_head;
 | 
			
		||||
            app_ref_vector m_tail;
 | 
			
		||||
            svector<bool>  m_neg;
 | 
			
		||||
            bool_vector  m_neg;
 | 
			
		||||
            rule *         m_rule;
 | 
			
		||||
 | 
			
		||||
            void apply(app * a, app_ref& res);
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ namespace datalog {
 | 
			
		|||
        app_ref_vector    m_tail;
 | 
			
		||||
        expr_ref_vector   m_itail_members;
 | 
			
		||||
        expr_ref_vector   m_conj;
 | 
			
		||||
        svector<bool>     m_tail_neg;
 | 
			
		||||
        bool_vector     m_tail_neg;
 | 
			
		||||
        normalizer_cfg*   m_cfg;
 | 
			
		||||
        normalizer_rw*    m_rw;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ namespace datalog {
 | 
			
		|||
    struct matrix {
 | 
			
		||||
        vector<vector<rational> > A;
 | 
			
		||||
        vector<rational>          b;
 | 
			
		||||
        svector<bool>             eq;
 | 
			
		||||
        bool_vector             eq;
 | 
			
		||||
        unsigned size() const { return A.size(); }
 | 
			
		||||
        void reset() { A.reset(); b.reset(); eq.reset(); }
 | 
			
		||||
        matrix& operator=(matrix const& other);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ namespace datalog {
 | 
			
		|||
        rule_ref new_rule(rm);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref head(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        rule_counter& vc = rm.get_counter();
 | 
			
		||||
        for (unsigned i = 0; i < sz; ++i) {            
 | 
			
		||||
            tail.reset();
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +129,7 @@ namespace datalog {
 | 
			
		|||
        rule_ref new_rule(rm);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref head(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        for (unsigned i = 0; i < sz; ++i) {            
 | 
			
		||||
            tail.reset();
 | 
			
		||||
            neg.reset();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -187,7 +187,7 @@ namespace datalog {
 | 
			
		|||
    void mk_magic_sets::create_magic_rules(app * head, unsigned tail_cnt, app * const * tail, bool const* negated, rule_set& result) {
 | 
			
		||||
        //TODO: maybe include relevant interpreted predicates from the original rule
 | 
			
		||||
        ptr_vector<app> new_tail;
 | 
			
		||||
        svector<bool> negations;
 | 
			
		||||
        bool_vector negations;
 | 
			
		||||
        new_tail.push_back(create_magic_literal(head));
 | 
			
		||||
        new_tail.append(tail_cnt, tail);
 | 
			
		||||
        negations.push_back(false);
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ namespace datalog {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        ptr_vector<app> new_tail;
 | 
			
		||||
        svector<bool> negations;
 | 
			
		||||
        bool_vector negations;
 | 
			
		||||
        while (new_tail.size()!=processed_tail_len) {
 | 
			
		||||
            bool intentional = false;
 | 
			
		||||
            int curr_index = pop_bound(exten_tails, r, bound_vars);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ namespace datalog {
 | 
			
		|||
        rule_ref new_rule(rm);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref head(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        for (unsigned i = 0; i < sz; ++i) {            
 | 
			
		||||
            rule & r = *source.get_rule(i);
 | 
			
		||||
            unsigned utsz = r.get_uninterpreted_tail_size();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ namespace datalog {
 | 
			
		|||
        func_decl_ref_vector    m_new_funcs;
 | 
			
		||||
        vector<expr_ref_vector> m_subst;
 | 
			
		||||
        vector<sort_ref_vector> m_sorts;
 | 
			
		||||
        vector<svector<bool> >  m_bound;
 | 
			
		||||
        vector<bool_vector >  m_bound;
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        void get_units(obj_map<expr, bool>& units) override { units.reset(); }
 | 
			
		||||
 | 
			
		||||
        void insert(func_decl* old_p, func_decl* new_p, expr_ref_vector& sub, sort_ref_vector& sorts, svector<bool> const& bound) {
 | 
			
		||||
        void insert(func_decl* old_p, func_decl* new_p, expr_ref_vector& sub, sort_ref_vector& sorts, bool_vector const& bound) {
 | 
			
		||||
            m_old_funcs.push_back(old_p);
 | 
			
		||||
            m_new_funcs.push_back(new_p);
 | 
			
		||||
            m_subst.push_back(sub);
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ namespace datalog {
 | 
			
		|||
                func_decl* q = m_old_funcs[i].get();
 | 
			
		||||
                expr_ref_vector const& sub = m_subst[i];
 | 
			
		||||
                sort_ref_vector const& sorts = m_sorts[i];
 | 
			
		||||
                svector<bool> const& is_bound  = m_bound[i];
 | 
			
		||||
                bool_vector const& is_bound  = m_bound[i];
 | 
			
		||||
                func_interp* f = old_model->get_func_interp(p);
 | 
			
		||||
                expr_ref body(m);
 | 
			
		||||
                unsigned arity_q = q->get_arity();
 | 
			
		||||
| 
						 | 
				
			
			@ -177,7 +177,7 @@ namespace datalog {
 | 
			
		|||
        func_decl* new_p = nullptr;
 | 
			
		||||
        if (!m_old2new.find(old_p, new_p)) {
 | 
			
		||||
            expr_ref_vector sub(m), vars(m);
 | 
			
		||||
            svector<bool> bound;
 | 
			
		||||
            bool_vector bound;
 | 
			
		||||
            sort_ref_vector domain(m), sorts(m);
 | 
			
		||||
            expr_ref arg(m);
 | 
			
		||||
            for (unsigned i = 0; i < sz; ++i) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,7 +91,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
    void rule_unifier::apply(
 | 
			
		||||
        rule const& r, bool is_tgt, unsigned skipped_index,
 | 
			
		||||
        app_ref_vector& res, svector<bool>& res_neg) {
 | 
			
		||||
        app_ref_vector& res, bool_vector& res_neg) {
 | 
			
		||||
        unsigned rule_len = r.get_tail_size();
 | 
			
		||||
        for (unsigned i = 0; i < rule_len; i++) {
 | 
			
		||||
            if (i != skipped_index) { //i can never be UINT_MAX, so we'll never skip if we're not supposed to
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ namespace datalog {
 | 
			
		|||
        SASSERT(m_ready);
 | 
			
		||||
        app_ref new_head(m);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        svector<bool> tail_neg;
 | 
			
		||||
        bool_vector tail_neg;
 | 
			
		||||
        rule_ref simpl_rule(m_rm);
 | 
			
		||||
        apply(tgt.get_head(), true, new_head);
 | 
			
		||||
        apply(tgt, true,  tail_index, tail, tail_neg);
 | 
			
		||||
| 
						 | 
				
			
			@ -647,8 +647,8 @@ namespace datalog {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    void mk_rule_inliner::add_rule(rule_set const& source, rule* r, unsigned i) {
 | 
			
		||||
        svector<bool>& can_remove = m_head_visitor.can_remove();
 | 
			
		||||
        svector<bool>& can_expand = m_head_visitor.can_expand();
 | 
			
		||||
        bool_vector& can_remove = m_head_visitor.can_remove();
 | 
			
		||||
        bool_vector& can_expand = m_head_visitor.can_expand();
 | 
			
		||||
        app* head = r->get_head();
 | 
			
		||||
        func_decl* headd = head->get_decl();
 | 
			
		||||
        m_head_visitor.add_position(head, i);
 | 
			
		||||
| 
						 | 
				
			
			@ -705,8 +705,8 @@ namespace datalog {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        // set up unification index.
 | 
			
		||||
        svector<bool>& can_remove = m_head_visitor.can_remove();
 | 
			
		||||
        svector<bool>& can_expand = m_head_visitor.can_expand();
 | 
			
		||||
        bool_vector& can_remove = m_head_visitor.can_remove();
 | 
			
		||||
        bool_vector& can_expand = m_head_visitor.can_expand();
 | 
			
		||||
 | 
			
		||||
        for (unsigned i = 0; i < sz; ++i) {
 | 
			
		||||
            add_rule(*rules, acc[i].get(), i);
 | 
			
		||||
| 
						 | 
				
			
			@ -727,7 +727,7 @@ namespace datalog {
 | 
			
		|||
        m_subst.reserve_vars(max_var+1);
 | 
			
		||||
        m_subst.reserve_offsets(std::max(m_tail_index.get_approx_num_regs(), 2+m_head_index.get_approx_num_regs()));
 | 
			
		||||
 | 
			
		||||
        svector<bool> valid;
 | 
			
		||||
        bool_vector valid;
 | 
			
		||||
        valid.reset();
 | 
			
		||||
        valid.resize(sz, true);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ namespace datalog {
 | 
			
		|||
           unless skipped_index is equal to UINT_MAX
 | 
			
		||||
        */        
 | 
			
		||||
        void apply(rule const& r, bool is_tgt, unsigned skipped_index, app_ref_vector& res, 
 | 
			
		||||
                   svector<bool>& res_neg);
 | 
			
		||||
                   bool_vector& res_neg);
 | 
			
		||||
        
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -85,15 +85,15 @@ namespace datalog {
 | 
			
		|||
        class visitor : public st_visitor {
 | 
			
		||||
            context& m_context;
 | 
			
		||||
            unsigned_vector m_unifiers;
 | 
			
		||||
            svector<bool> m_can_remove, m_can_expand;
 | 
			
		||||
            bool_vector m_can_remove, m_can_expand;
 | 
			
		||||
            obj_map<expr, unsigned_vector> m_positions;
 | 
			
		||||
        public:
 | 
			
		||||
            visitor(context& c, substitution & s): st_visitor(s), m_context(c) { (void) m_context; }
 | 
			
		||||
            bool operator()(expr* e) override;
 | 
			
		||||
            void         reset() { m_unifiers.reset(); }
 | 
			
		||||
            void         reset(unsigned sz);
 | 
			
		||||
            svector<bool>& can_remove() { return m_can_remove; }
 | 
			
		||||
            svector<bool>& can_expand() { return m_can_expand; }
 | 
			
		||||
            bool_vector& can_remove() { return m_can_remove; }
 | 
			
		||||
            bool_vector& can_expand() { return m_can_expand; }
 | 
			
		||||
            unsigned_vector const& add_position(expr* e, unsigned j);
 | 
			
		||||
            unsigned_vector const& del_position(expr* e, unsigned j);
 | 
			
		||||
            unsigned_vector const& get_unifiers() { return m_unifiers; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,7 @@ namespace datalog {
 | 
			
		|||
        rule_ref new_rule(rm);
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref head(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        ptr_vector<sort> vars;
 | 
			
		||||
        ref<scale_model_converter> smc;
 | 
			
		||||
        if (m_ctx.get_model_converter()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ namespace datalog {
 | 
			
		|||
        unsigned tsz  = r.get_tail_size();
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        app_ref p(m);
 | 
			
		||||
        svector<bool> neg;
 | 
			
		||||
        bool_vector neg;
 | 
			
		||||
        for (unsigned i = 0; i < ptsz; ++i) {
 | 
			
		||||
            tail.push_back(r.get_tail(i));
 | 
			
		||||
            neg.push_back(false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,10 +35,10 @@ namespace datalog {
 | 
			
		|||
        context&      m_ctx;
 | 
			
		||||
        ast_manager&  m;
 | 
			
		||||
        rule_manager& rm;
 | 
			
		||||
        svector<bool>   m_input;
 | 
			
		||||
        svector<bool>   m_output;
 | 
			
		||||
        bool_vector   m_input;
 | 
			
		||||
        bool_vector   m_output;
 | 
			
		||||
        expr_ref_vector m_solved_vars;
 | 
			
		||||
        svector<bool>   m_var_is_sliceable;
 | 
			
		||||
        bool_vector   m_var_is_sliceable;
 | 
			
		||||
        obj_map<func_decl, func_decl*>  m_predicates;        
 | 
			
		||||
        obj_map<func_decl, bit_vector> m_sliceable;
 | 
			
		||||
        ast_ref_vector  m_pinned;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ namespace datalog {
 | 
			
		|||
        app_ref head(r->get_head(), m);
 | 
			
		||||
 | 
			
		||||
        app_ref_vector tail(m);
 | 
			
		||||
        svector<bool> tail_neg;
 | 
			
		||||
        bool_vector tail_neg;
 | 
			
		||||
 | 
			
		||||
        for(unsigned i=0; i<u_len; i++) {
 | 
			
		||||
            app * tail_atom = r->get_tail(i);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ namespace datalog {
 | 
			
		|||
        app_ref replacing = product_application(apps);
 | 
			
		||||
 | 
			
		||||
        ptr_vector<app> new_tail;
 | 
			
		||||
        svector<bool> new_tail_neg;
 | 
			
		||||
        bool_vector new_tail_neg;
 | 
			
		||||
        unsigned n = r.get_tail_size() - apps.size() + 1;
 | 
			
		||||
        unsigned tail_idx = 0;
 | 
			
		||||
        new_tail.resize(n);
 | 
			
		||||
| 
						 | 
				
			
			@ -176,7 +176,7 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
    void mk_synchronize::add_rec_tail(vector< ptr_vector<app> > & recursive_calls,
 | 
			
		||||
                                      app_ref_vector & new_tail,
 | 
			
		||||
                                      svector<bool> & new_tail_neg,
 | 
			
		||||
                                      bool_vector & new_tail_neg,
 | 
			
		||||
                                      unsigned & tail_idx) {
 | 
			
		||||
        unsigned max_sz = 0;
 | 
			
		||||
        for (auto &rc : recursive_calls)
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +200,7 @@ namespace datalog {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    void mk_synchronize::add_non_rec_tail(rule & r, app_ref_vector & new_tail,
 | 
			
		||||
                                          svector<bool> & new_tail_neg,
 | 
			
		||||
                                          bool_vector & new_tail_neg,
 | 
			
		||||
                                          unsigned & tail_idx) {
 | 
			
		||||
        for (unsigned i = 0, sz = r.get_positive_tail_size(); i < sz; ++i) {
 | 
			
		||||
            app* tail = r.get_tail(i);
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ namespace datalog {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        app_ref_vector new_tail(m);
 | 
			
		||||
        svector<bool> new_tail_neg;
 | 
			
		||||
        bool_vector new_tail_neg;
 | 
			
		||||
        new_tail.resize(product_tail_length);
 | 
			
		||||
        new_tail_neg.resize(product_tail_length);
 | 
			
		||||
        unsigned tail_idx = -1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,9 +109,9 @@ namespace datalog {
 | 
			
		|||
 | 
			
		||||
        void add_rec_tail(vector< ptr_vector<app> > & recursive_calls,
 | 
			
		||||
                          app_ref_vector & new_tail,
 | 
			
		||||
                          svector<bool> & new_tail_neg, unsigned & tail_idx);
 | 
			
		||||
                          bool_vector & new_tail_neg, unsigned & tail_idx);
 | 
			
		||||
        void add_non_rec_tail(rule & r, app_ref_vector & new_tail,
 | 
			
		||||
                              svector<bool> & new_tail_neg,
 | 
			
		||||
                              bool_vector & new_tail_neg,
 | 
			
		||||
                              unsigned & tail_idx);
 | 
			
		||||
 | 
			
		||||
        rule_ref product_rule(rule_ref_vector const & rules);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ namespace datalog {
 | 
			
		|||
        SASSERT(dtail_args.size()==dtail_pred->get_arity());
 | 
			
		||||
        app_ref dtail(m.mk_app(dtail_pred, dtail_args.size(), dtail_args.c_ptr()), m);
 | 
			
		||||
 | 
			
		||||
        svector<bool> tails_negated;
 | 
			
		||||
        bool_vector tails_negated;
 | 
			
		||||
        app_ref_vector tails(m);
 | 
			
		||||
        unsigned tail_len = r->get_tail_size();
 | 
			
		||||
        for (unsigned i = 0; i < tail_len; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ namespace nlsat {
 | 
			
		|||
    */
 | 
			
		||||
    class assignment : public polynomial::var2anum {
 | 
			
		||||
        scoped_anum_vector m_values;
 | 
			
		||||
        svector<bool>      m_assigned;
 | 
			
		||||
        bool_vector      m_assigned;
 | 
			
		||||
    public:
 | 
			
		||||
        assignment(anum_manager & _m):m_values(_m) {}
 | 
			
		||||
        virtual ~assignment() {}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -258,7 +258,7 @@ namespace nlsat {
 | 
			
		|||
           \brief Add literal p != 0 into m_result.
 | 
			
		||||
        */
 | 
			
		||||
        ptr_vector<poly>  m_zero_fs;
 | 
			
		||||
        svector<bool>     m_is_even;
 | 
			
		||||
        bool_vector     m_is_even;
 | 
			
		||||
        void add_zero_assumption(polynomial_ref & p) {
 | 
			
		||||
            // If p is of the form p1^n1 * ... * pk^nk,
 | 
			
		||||
            // then only the factors that are zero in the current interpretation needed to be considered.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,10 +114,10 @@ namespace nlsat {
 | 
			
		|||
        unsigned_vector        m_levels;       // bool_var -> level
 | 
			
		||||
        svector<justification> m_justifications;
 | 
			
		||||
        vector<clause_vector>  m_bwatches;     // bool_var (that are not attached to atoms) -> clauses where it is maximal
 | 
			
		||||
        svector<bool>          m_dead;         // mark dead boolean variables
 | 
			
		||||
        bool_vector          m_dead;         // mark dead boolean variables
 | 
			
		||||
        id_gen                 m_bid_gen;
 | 
			
		||||
 | 
			
		||||
        svector<bool>          m_is_int;     // m_is_int[x] is true if variable is integer
 | 
			
		||||
        bool_vector          m_is_int;     // m_is_int[x] is true if variable is integer
 | 
			
		||||
        vector<clause_vector>  m_watches;    // var -> clauses where variable is maximal
 | 
			
		||||
        interval_set_vector    m_infeasible; // var -> to a set of interval where the variable cannot be assigned to.
 | 
			
		||||
        atom_vector            m_var2eq;     // var -> to asserted equality
 | 
			
		||||
| 
						 | 
				
			
			@ -497,7 +497,7 @@ namespace nlsat {
 | 
			
		|||
            SASSERT(m_is_int.size() == m_inv_perm.size());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        svector<bool> m_found_vars;
 | 
			
		||||
        bool_vector m_found_vars;
 | 
			
		||||
        void vars(literal l, var_vector& vs) {                
 | 
			
		||||
            vs.reset();
 | 
			
		||||
            atom * a = m_atoms[l.var()];
 | 
			
		||||
| 
						 | 
				
			
			@ -835,7 +835,7 @@ namespace nlsat {
 | 
			
		|||
                    ineq_atom& ia = *to_ineq_atom(a);
 | 
			
		||||
                    unsigned sz = ia.size();
 | 
			
		||||
                    ptr_vector<poly> ps;
 | 
			
		||||
                    svector<bool> is_even;
 | 
			
		||||
                    bool_vector is_even;
 | 
			
		||||
                    for (unsigned i = 0; i < sz; ++i) {
 | 
			
		||||
                        ps.push_back(ia.p(i));
 | 
			
		||||
                        is_even.push_back(ia.is_even(i));
 | 
			
		||||
| 
						 | 
				
			
			@ -2400,7 +2400,7 @@ namespace nlsat {
 | 
			
		|||
                new_inv_perm[ext_x] = p[m_inv_perm[ext_x]];
 | 
			
		||||
                m_perm.set(new_inv_perm[ext_x], ext_x);
 | 
			
		||||
            }
 | 
			
		||||
            svector<bool> is_int;
 | 
			
		||||
            bool_vector is_int;
 | 
			
		||||
            is_int.swap(m_is_int);
 | 
			
		||||
            for (var x = 0; x < sz; x++) {
 | 
			
		||||
                m_is_int.setx(p[x], is_int[x], false);
 | 
			
		||||
| 
						 | 
				
			
			@ -2698,7 +2698,7 @@ namespace nlsat {
 | 
			
		|||
 | 
			
		||||
            u_map<literal> b2l;
 | 
			
		||||
            scoped_literal_vector lits(m_solver);
 | 
			
		||||
            svector<bool> even;
 | 
			
		||||
            bool_vector even;
 | 
			
		||||
            unsigned num_atoms = m_atoms.size();
 | 
			
		||||
            for (unsigned j = 0; j < num_atoms; ++j) {
 | 
			
		||||
                atom* a = m_atoms[j];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ namespace opt {
 | 
			
		|||
        svector<symbol>  m_labels;
 | 
			
		||||
        //const expr_ref_vector  m_soft;
 | 
			
		||||
        //vector<rational> m_weights;
 | 
			
		||||
        //svector<bool>    m_assignment;       // truth assignment to soft constraints
 | 
			
		||||
        //bool_vector    m_assignment;       // truth assignment to soft constraints
 | 
			
		||||
        params_ref       m_params;           // config
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ namespace opt {
 | 
			
		|||
        vector<inf_eps>     m_objective_values;
 | 
			
		||||
        sref_vector<model>  m_models;
 | 
			
		||||
        expr_ref_vector     m_objective_terms;
 | 
			
		||||
        svector<bool>       m_valid_objectives;
 | 
			
		||||
        bool_vector       m_valid_objectives;
 | 
			
		||||
        bool                m_dump_benchmarks;
 | 
			
		||||
        static unsigned     m_dump_count;
 | 
			
		||||
        statistics          m_stats;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,8 +108,8 @@ namespace smt {
 | 
			
		|||
        rational         m_penalty;      // current penalty of soft constraints
 | 
			
		||||
        rational         m_best_penalty;
 | 
			
		||||
        vector<unsigned_vector>  m_hard_occ, m_soft_occ;  // variable occurrence
 | 
			
		||||
        svector<bool>    m_assignment;   // current assignment.
 | 
			
		||||
        svector<bool>    m_best_assignment;
 | 
			
		||||
        bool_vector    m_assignment;   // current assignment.
 | 
			
		||||
        bool_vector    m_best_assignment;
 | 
			
		||||
        expr_ref_vector  m_trail;
 | 
			
		||||
        obj_map<expr, unsigned> m_decl2var; // map declarations to Boolean variables.
 | 
			
		||||
        ptr_vector<expr> m_var2decl;        // reverse map
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ namespace smt {
 | 
			
		|||
            IF_VERBOSE(1, verbose_stream() << "(pb.sls initial penalty: " << m_best_penalty << ")\n";
 | 
			
		||||
                       verbose_stream() << "(pb.sls violated: " << m_hard_false.num_elems()
 | 
			
		||||
                       << " penalty: " << m_penalty << ")\n";);
 | 
			
		||||
            svector<bool> assignment(m_assignment);
 | 
			
		||||
            bool_vector assignment(m_assignment);
 | 
			
		||||
            for (unsigned round = 0; round < 40; ++round) {
 | 
			
		||||
                init_max_flips();
 | 
			
		||||
                while (m_max_flips > 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -415,7 +415,7 @@ namespace qe {
 | 
			
		|||
        expr_ref_vector  m_trail;          // trail for generated terms
 | 
			
		||||
        expr_ref_vector  m_args; 
 | 
			
		||||
        ptr_vector<expr> m_todo;           // stack of formulas to visit
 | 
			
		||||
        svector<bool>    m_pols;           // stack of polarities
 | 
			
		||||
        bool_vector    m_pols;           // stack of polarities
 | 
			
		||||
        bool_rewriter    m_rewriter;
 | 
			
		||||
        
 | 
			
		||||
    public:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -244,7 +244,7 @@ namespace qe {
 | 
			
		|||
     */
 | 
			
		||||
    app_ref_vector uflia_mbi::get_arith_vars(expr_ref_vector const& lits) {
 | 
			
		||||
        app_ref_vector avars(m); 
 | 
			
		||||
        svector<bool> seen;
 | 
			
		||||
        bool_vector seen;
 | 
			
		||||
        arith_util a(m);
 | 
			
		||||
        for (expr* e : subterms(lits)) {
 | 
			
		||||
            if ((m.is_eq(e) && a.is_int_real(to_app(e)->get_arg(0))) || a.is_arith_expr(e)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -295,7 +295,7 @@ namespace sat {
 | 
			
		|||
        bool                      m_clause_removed;
 | 
			
		||||
        bool                      m_constraint_removed;
 | 
			
		||||
        literal_vector            m_roots;
 | 
			
		||||
        svector<bool>             m_root_vars;
 | 
			
		||||
        bool_vector             m_root_vars;
 | 
			
		||||
        unsigned_vector           m_weights;
 | 
			
		||||
        svector<wliteral>         m_wlits;
 | 
			
		||||
        bool subsumes(card& c1, card& c2, literal_vector& comp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -742,7 +742,7 @@ namespace sat {
 | 
			
		|||
     * Assume only the first definition for a node is used for all cuts.
 | 
			
		||||
     */
 | 
			
		||||
    void aig_cuts::cut2clauses(on_clause_t& on_clause, unsigned v, cut const& c) {
 | 
			
		||||
        svector<bool> visited(m_aig.size(), false);
 | 
			
		||||
        bool_vector visited(m_aig.size(), false);
 | 
			
		||||
        for (unsigned u : c) visited[u] = true;
 | 
			
		||||
        unsigned_vector todo;
 | 
			
		||||
        todo.push_back(v);
 | 
			
		||||
| 
						 | 
				
			
			@ -797,7 +797,7 @@ namespace sat {
 | 
			
		|||
        reslimit lim;
 | 
			
		||||
        solver s;
 | 
			
		||||
        unsigned_vector vars;
 | 
			
		||||
        svector<bool>   is_var;
 | 
			
		||||
        bool_vector   is_var;
 | 
			
		||||
 | 
			
		||||
        validator(aig_cuts& t):t(t),s(p, lim) {
 | 
			
		||||
            p.set_bool("cut_simplifier", false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,12 +66,12 @@ namespace sat {
 | 
			
		|||
 | 
			
		||||
        solver&        s;
 | 
			
		||||
        config         m_config;
 | 
			
		||||
        svector<bool>  m_relevant;
 | 
			
		||||
        bool_vector  m_relevant;
 | 
			
		||||
        stats          m_stats;
 | 
			
		||||
        statistics     m_st;
 | 
			
		||||
        unsigned_vector m_eval_cache;
 | 
			
		||||
        unsigned        m_eval_ts;
 | 
			
		||||
        svector<bool>   m_used_for_evaluation;
 | 
			
		||||
        bool_vector   m_used_for_evaluation;
 | 
			
		||||
 | 
			
		||||
        void clauses2anf(pdd_solver& solver);
 | 
			
		||||
        void anf2clauses(pdd_solver& solver);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ namespace sat {
 | 
			
		|||
        CASSERT("asymm_branch", s.check_invariant());
 | 
			
		||||
        TRACE("asymm_branch_detail", s.display(tout););
 | 
			
		||||
        report rpt(*this);
 | 
			
		||||
        svector<bool> saved_phase(s.m_phase);
 | 
			
		||||
        bool_vector saved_phase(s.m_phase);
 | 
			
		||||
 | 
			
		||||
        bool change = true;
 | 
			
		||||
        unsigned counter = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,8 +43,8 @@ namespace sat {
 | 
			
		|||
        svector<bclause>  m_L, m_R, m_live_clauses, m_new_L;
 | 
			
		||||
        clause_vector     m_bin_clauses;
 | 
			
		||||
        svector<uint64_t> m_rbits;
 | 
			
		||||
        svector<bool>     m_marked;
 | 
			
		||||
        svector<bool>     m_removed; // set of clauses removed (not considered in clause set during BCE)
 | 
			
		||||
        bool_vector     m_marked;
 | 
			
		||||
        bool_vector     m_removed; // set of clauses removed (not considered in clause set during BCE)
 | 
			
		||||
 | 
			
		||||
        void init(use_list& ul);
 | 
			
		||||
        void register_clause(clause* cls);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ namespace sat {
 | 
			
		|||
        random_gen&            m_rand;
 | 
			
		||||
        unsigned               m_num_vars;
 | 
			
		||||
        vector<literal_vector> m_dag;
 | 
			
		||||
        svector<bool>          m_roots;
 | 
			
		||||
        bool_vector          m_roots;
 | 
			
		||||
        svector<int>           m_left, m_right;
 | 
			
		||||
        literal_vector         m_root, m_parent;
 | 
			
		||||
        bool                   m_learned;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ namespace sat {
 | 
			
		|||
        unsigned                             m_stopped_at;
 | 
			
		||||
        vector<clause_vector>                m_use_list;
 | 
			
		||||
        unsigned                             m_limit1, m_limit2;
 | 
			
		||||
        svector<bool>                        m_mark, m_mark2;
 | 
			
		||||
        bool_vector                        m_mark, m_mark2;
 | 
			
		||||
        literal_vector                       m_must_candidates, m_may_candidates;
 | 
			
		||||
        unsigned                             m_state;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ namespace sat {
 | 
			
		|||
            pbcoeff(unsigned id, unsigned coeff):
 | 
			
		||||
                m_constraint_id(id), m_coeff(coeff) {}
 | 
			
		||||
        };
 | 
			
		||||
        typedef svector<bool> bool_vector;
 | 
			
		||||
        typedef bool_vector bool_vector;
 | 
			
		||||
        typedef svector<pbcoeff> coeff_vector;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +139,7 @@ namespace sat {
 | 
			
		|||
        local_search_config m_config;        
 | 
			
		||||
        
 | 
			
		||||
        vector<var_info>    m_vars;                      // variables
 | 
			
		||||
        svector<bool>       m_best_phase;                // best value in round
 | 
			
		||||
        bool_vector       m_best_phase;                // best value in round
 | 
			
		||||
        svector<bool_var>   m_units;                     // unit clauses
 | 
			
		||||
        vector<constraint>  m_constraints;               // all constraints
 | 
			
		||||
        literal_vector      m_assumptions;               // temporary assumptions
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2082,7 +2082,7 @@ namespace sat {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool lookahead::backtrack(literal_vector& trail, svector<bool> & is_decision) {
 | 
			
		||||
    bool lookahead::backtrack(literal_vector& trail, bool_vector & is_decision) {
 | 
			
		||||
        m_cube_state.m_backtracks++;
 | 
			
		||||
        while (inconsistent()) {
 | 
			
		||||
            if (trail.empty()) return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ namespace sat {
 | 
			
		|||
 | 
			
		||||
        struct cube_state {
 | 
			
		||||
            bool           m_first;
 | 
			
		||||
            svector<bool>  m_is_decision;
 | 
			
		||||
            bool_vector  m_is_decision;
 | 
			
		||||
            literal_vector m_cube;
 | 
			
		||||
            double         m_freevars_threshold;
 | 
			
		||||
            double         m_psat_threshold;
 | 
			
		||||
| 
						 | 
				
			
			@ -540,7 +540,7 @@ namespace sat {
 | 
			
		|||
        void assign(literal l);
 | 
			
		||||
        void propagated(literal l);
 | 
			
		||||
        bool backtrack(literal_vector& trail);
 | 
			
		||||
        bool backtrack(literal_vector& trail, svector<bool> & is_decision);
 | 
			
		||||
        bool backtrack(literal_vector& trail, bool_vector & is_decision);
 | 
			
		||||
        lbool search();
 | 
			
		||||
        void init_model();
 | 
			
		||||
        std::ostream& display_binary(std::ostream& out) const;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ namespace sat {
 | 
			
		|||
            clause_filter(unsigned f, clause* cp):
 | 
			
		||||
                m_filter(f), m_clause(cp) {}
 | 
			
		||||
        };
 | 
			
		||||
        typedef svector<bool> bool_vector;
 | 
			
		||||
        typedef bool_vector bool_vector;
 | 
			
		||||
        unsigned                m_max_lut_size;
 | 
			
		||||
        vector<svector<clause_filter>>   m_clause_filters;  // index of clauses.
 | 
			
		||||
        uint64_t                m_combination;              // bit-mask of parities that have been found
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ namespace sat {
 | 
			
		|||
    private:
 | 
			
		||||
        vector<entry>          m_entries;           // entries accumulated during SAT search
 | 
			
		||||
        unsigned               m_exposed_lim;       // last entry that was exposed to model converter.
 | 
			
		||||
        svector<bool>          m_mark;              // literals that are used in asserted clauses.
 | 
			
		||||
        bool_vector          m_mark;              // literals that are used in asserted clauses.
 | 
			
		||||
        solver const*          m_solver;
 | 
			
		||||
        elim_stackv            m_elim_stack;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ namespace sat {
 | 
			
		|||
            unsigned        m_size;
 | 
			
		||||
            unsigned        m_tail;
 | 
			
		||||
            unsigned_vector m_heads;
 | 
			
		||||
            svector<bool>   m_at_end;
 | 
			
		||||
            bool_vector   m_at_end;
 | 
			
		||||
            void next(unsigned& index);
 | 
			
		||||
            unsigned get_owner(unsigned index) const { return m_vectors[index]; }
 | 
			
		||||
            unsigned get_length(unsigned index) const { return m_vectors[index+1]; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ namespace sat {
 | 
			
		|||
        clause_allocator m_alloc;
 | 
			
		||||
        clause_vector    m_clause_db;     
 | 
			
		||||
        svector<clause_info> m_clauses;
 | 
			
		||||
        svector<bool>    m_values, m_best_values;
 | 
			
		||||
        bool_vector    m_values, m_best_values;
 | 
			
		||||
        unsigned         m_best_min_unsat;
 | 
			
		||||
        vector<unsigned_vector> m_use_list;
 | 
			
		||||
        unsigned_vector  m_flat_use_list;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1002,7 +1002,7 @@ namespace sat {
 | 
			
		|||
        literal_vector m_intersection;                // current resolution intersection
 | 
			
		||||
        literal_vector m_tautology;                   // literals that are used in blocking tautology
 | 
			
		||||
        literal_vector m_new_intersection;
 | 
			
		||||
        svector<bool>  m_in_intersection;
 | 
			
		||||
        bool_vector  m_in_intersection;
 | 
			
		||||
        unsigned       m_ala_qhead;
 | 
			
		||||
        clause_wrapper m_clause;
 | 
			
		||||
        unsigned       m_ala_cost;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,11 +118,11 @@ namespace sat {
 | 
			
		|||
        vector<watch_list>      m_watches;
 | 
			
		||||
        svector<lbool>          m_assignment;
 | 
			
		||||
        svector<justification>  m_justification; 
 | 
			
		||||
        svector<bool>           m_decision;
 | 
			
		||||
        svector<bool>           m_mark;
 | 
			
		||||
        svector<bool>           m_lit_mark;
 | 
			
		||||
        svector<bool>           m_eliminated;
 | 
			
		||||
        svector<bool>           m_external;
 | 
			
		||||
        bool_vector             m_decision;
 | 
			
		||||
        bool_vector             m_mark;
 | 
			
		||||
        bool_vector             m_lit_mark;
 | 
			
		||||
        bool_vector             m_eliminated;
 | 
			
		||||
        bool_vector             m_external;
 | 
			
		||||
        unsigned_vector         m_touched;
 | 
			
		||||
        unsigned                m_touch_index;
 | 
			
		||||
        literal_vector          m_replay_assign;
 | 
			
		||||
| 
						 | 
				
			
			@ -137,9 +137,9 @@ namespace sat {
 | 
			
		|||
        int                     m_action;
 | 
			
		||||
        double                  m_step_size;
 | 
			
		||||
        // phase
 | 
			
		||||
        svector<bool>           m_phase; 
 | 
			
		||||
        svector<bool>           m_best_phase;
 | 
			
		||||
        svector<bool>           m_prev_phase;
 | 
			
		||||
        bool_vector             m_phase; 
 | 
			
		||||
        bool_vector             m_best_phase;
 | 
			
		||||
        bool_vector             m_prev_phase;
 | 
			
		||||
        svector<char>           m_assigned_since_gc;
 | 
			
		||||
        search_state            m_search_state; 
 | 
			
		||||
        unsigned                m_search_unsat_conflicts;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ namespace sat {
 | 
			
		|||
        solver&           s;
 | 
			
		||||
        local_search      m_ls;
 | 
			
		||||
        random_gen        m_rand;
 | 
			
		||||
        svector<bool>     m_phase;
 | 
			
		||||
        bool_vector     m_phase;
 | 
			
		||||
        svector<ema>      m_phase_tf;
 | 
			
		||||
        var_priority      m_priorities;
 | 
			
		||||
        unsigned          m_luby_index;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ namespace sat {
 | 
			
		|||
            clause_filter(unsigned f, clause* cp):
 | 
			
		||||
                m_filter(f), m_clause(cp) {}
 | 
			
		||||
        };
 | 
			
		||||
        typedef svector<bool> bool_vector;
 | 
			
		||||
        typedef bool_vector bool_vector;
 | 
			
		||||
        unsigned                m_max_xor_size;
 | 
			
		||||
        vector<svector<clause_filter>>   m_clause_filters;      // index of clauses.
 | 
			
		||||
        unsigned                m_combination;  // bit-mask of parities that have been found
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1385,7 +1385,7 @@ public:
 | 
			
		|||
    template<typename Functor>
 | 
			
		||||
    bool find_shortest_path_aux(dl_var source, dl_var target, unsigned timestamp, Functor & f, bool zero_edge) {
 | 
			
		||||
        svector<bfs_elem> bfs_todo;
 | 
			
		||||
        svector<bool>     bfs_mark;
 | 
			
		||||
        bool_vector     bfs_mark;
 | 
			
		||||
        bfs_mark.resize(m_assignment.size(), false);
 | 
			
		||||
        
 | 
			
		||||
        bfs_todo.push_back(bfs_elem(source, -1, null_edge_id));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -334,7 +334,7 @@ void expr_strong_context_simplifier::simplify_basic(expr* fml, expr_ref& result)
 | 
			
		|||
 | 
			
		||||
    ptr_vector<expr> todo;
 | 
			
		||||
    ptr_vector<expr> names;
 | 
			
		||||
    svector<bool>    is_checked;
 | 
			
		||||
    bool_vector    is_checked;
 | 
			
		||||
    svector<unsigned> parent_ids, self_ids;
 | 
			
		||||
    expr_ref_vector  fresh_vars(m);
 | 
			
		||||
    expr_ref_vector trail(m);
 | 
			
		||||
| 
						 | 
				
			
			@ -484,7 +484,7 @@ void expr_strong_context_simplifier::simplify_model_based(expr* fml, expr_ref& r
 | 
			
		|||
 | 
			
		||||
    ptr_vector<expr> todo;
 | 
			
		||||
    ptr_vector<expr> names;
 | 
			
		||||
    svector<bool>    is_checked;
 | 
			
		||||
    bool_vector    is_checked;
 | 
			
		||||
    svector<unsigned> parent_ids, self_ids;
 | 
			
		||||
    expr_ref_vector  fresh_vars(m);
 | 
			
		||||
    expr_ref_vector trail(m);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -797,7 +797,7 @@ namespace {
 | 
			
		|||
        code_tree *             m_tree;
 | 
			
		||||
        unsigned                m_num_choices;
 | 
			
		||||
        bool                    m_is_tmp_tree;
 | 
			
		||||
        svector<bool>           m_mp_already_processed;
 | 
			
		||||
        bool_vector           m_mp_already_processed;
 | 
			
		||||
        obj_map<expr, unsigned> m_matched_exprs;
 | 
			
		||||
 | 
			
		||||
        struct pcheck_checked {
 | 
			
		||||
| 
						 | 
				
			
			@ -3106,10 +3106,10 @@ namespace {
 | 
			
		|||
 | 
			
		||||
        // m_is_plbl[f] is true, then when f(c_1, ..., c_n) becomes relevant,
 | 
			
		||||
        //  for each c_i. c_i->get_root()->lbls().insert(lbl_hash(f))
 | 
			
		||||
        svector<bool>               m_is_plbl;
 | 
			
		||||
        bool_vector               m_is_plbl;
 | 
			
		||||
        // m_is_clbl[f] is true, then when n=f(c_1, ..., c_n) becomes relevant,
 | 
			
		||||
        //  n->get_root()->lbls().insert(lbl_hash(f))
 | 
			
		||||
        svector<bool>               m_is_clbl;    // children labels
 | 
			
		||||
        bool_vector               m_is_clbl;    // children labels
 | 
			
		||||
 | 
			
		||||
        // auxiliary field used to update data-structures...
 | 
			
		||||
        typedef ptr_vector<func_decl> func_decls;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3989,7 +3989,7 @@ namespace smt {
 | 
			
		|||
 | 
			
		||||
#ifdef Z3DEBUG
 | 
			
		||||
            expr_ref_vector expr_lits(m);
 | 
			
		||||
            svector<bool>   expr_signs;
 | 
			
		||||
            bool_vector   expr_signs;
 | 
			
		||||
            for (unsigned i = 0; i < num_lits; i++) {
 | 
			
		||||
                literal l = lits[i];
 | 
			
		||||
                if (get_assignment(l) != l_false) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1200,7 +1200,7 @@ namespace smt {
 | 
			
		|||
 | 
			
		||||
        bool is_relevant_core(expr * n) const { return m_relevancy_propagator->is_relevant(n); }
 | 
			
		||||
 | 
			
		||||
        svector<bool>  m_relevant_conflict_literals;
 | 
			
		||||
        bool_vector  m_relevant_conflict_literals;
 | 
			
		||||
        void record_relevancy(unsigned n, literal const* lits);
 | 
			
		||||
        void restore_relevancy(unsigned n, literal const* lits);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ namespace smt {
 | 
			
		|||
            ast_manager &        m_manager;
 | 
			
		||||
            bool                 m_conservative;
 | 
			
		||||
            unsigned             m_num_vars;
 | 
			
		||||
            svector<bool>        m_already_found;     // mapping from var_idx -> bool
 | 
			
		||||
            bool_vector        m_already_found;     // mapping from var_idx -> bool
 | 
			
		||||
            vector<enode_set>    m_candidates;        // mapping from var_idx -> set of candidates
 | 
			
		||||
            vector<enode_set>    m_tmp_candidates;    // auxiliary mapping from var_idx -> set of candidates
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ namespace smt {
 | 
			
		|||
        void get_descendants(node_id start, svector<node_id> & descendants);
 | 
			
		||||
        
 | 
			
		||||
        virtual void update(edge_id enter_id, edge_id leave_id);                
 | 
			
		||||
        void get_path(node_id start, node_id end, svector<edge_id> & path, svector<bool> & against);              
 | 
			
		||||
        void get_path(node_id start, node_id end, svector<edge_id> & path, bool_vector & against);              
 | 
			
		||||
        bool in_subtree_t2(node_id child);
 | 
			
		||||
 | 
			
		||||
        bool check_well_formed();        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ namespace smt {
 | 
			
		|||
        virtual void get_descendants(node_id start, svector<node_id> & descendants) = 0;
 | 
			
		||||
        
 | 
			
		||||
        virtual void update(edge_id enter_id, edge_id leave_id) = 0;
 | 
			
		||||
        virtual void get_path(node_id start, node_id end, svector<edge_id> & path, svector<bool> & against) = 0;
 | 
			
		||||
        virtual void get_path(node_id start, node_id end, svector<edge_id> & path, bool_vector & against) = 0;
 | 
			
		||||
        virtual bool in_subtree_t2(node_id child) = 0;
 | 
			
		||||
 | 
			
		||||
        virtual bool check_well_formed() = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ namespace smt {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    template<typename Ext>
 | 
			
		||||
    void thread_spanning_tree<Ext>::get_path(node_id start, node_id end, svector<edge_id> & path, svector<bool> & against) {
 | 
			
		||||
    void thread_spanning_tree<Ext>::get_path(node_id start, node_id end, svector<edge_id> & path, bool_vector & against) {
 | 
			
		||||
        node_id join = get_common_ancestor(start, end);
 | 
			
		||||
        path.reset();
 | 
			
		||||
        while (start != join) {
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +282,7 @@ namespace smt {
 | 
			
		|||
 | 
			
		||||
        // Check that m_thread traverses each node.
 | 
			
		||||
        // This gets checked using union-find as well.
 | 
			
		||||
        svector<bool> found(m_thread.size(), false);
 | 
			
		||||
        bool_vector found(m_thread.size(), false);
 | 
			
		||||
        found[root] = true;
 | 
			
		||||
        for (node_id x = m_thread[root]; x != root; x = m_thread[x]) {
 | 
			
		||||
            SASSERT(x != m_thread[x]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1850,7 +1850,7 @@ namespace smt {
 | 
			
		|||
        if (get_context().inconsistent())
 | 
			
		||||
            return true; // property is only valid if the context is not in a conflict.
 | 
			
		||||
        if (is_root(v) && is_bv(v)) {
 | 
			
		||||
            svector<bool> bits[2];
 | 
			
		||||
            bool_vector bits[2];
 | 
			
		||||
            unsigned      num_bits = 0;
 | 
			
		||||
            unsigned      bv_sz    = get_bv_size(v);
 | 
			
		||||
            bits[0].resize(bv_sz, false);
 | 
			
		||||
| 
						 | 
				
			
			@ -1878,7 +1878,7 @@ namespace smt {
 | 
			
		|||
 | 
			
		||||
            zero_one_bits const & _bits = m_zero_one_bits[v];
 | 
			
		||||
            SASSERT(_bits.size() == num_bits);
 | 
			
		||||
            svector<bool> already_found;
 | 
			
		||||
            bool_vector already_found;
 | 
			
		||||
            already_found.resize(bv_sz, false);
 | 
			
		||||
            for (auto & zo : _bits) {
 | 
			
		||||
                SASSERT(find(zo.m_owner) == v);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ namespace smt {
 | 
			
		|||
        atoms                 m_bv2atoms;
 | 
			
		||||
        edges                 m_edges;  // list of asserted edges
 | 
			
		||||
        matrix                m_matrix;
 | 
			
		||||
        svector<bool>         m_is_int;
 | 
			
		||||
        bool_vector         m_is_int;
 | 
			
		||||
        vector<cell_trail>    m_cell_trail;
 | 
			
		||||
        svector<scope>        m_scopes;
 | 
			
		||||
        bool                  m_non_diff_logic_exprs;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ namespace smt {
 | 
			
		|||
        ptr_vector<eq_prop_info>       m_eq_prop_infos;
 | 
			
		||||
 | 
			
		||||
        app_ref_vector                 m_terms;
 | 
			
		||||
        svector<bool>                  m_signs;
 | 
			
		||||
        bool_vector                  m_signs;
 | 
			
		||||
 | 
			
		||||
        ptr_vector<atom>               m_atoms;
 | 
			
		||||
        ptr_vector<atom>               m_asserted_atoms;   // set of asserted atoms
 | 
			
		||||
| 
						 | 
				
			
			@ -337,7 +337,7 @@ namespace smt {
 | 
			
		|||
 | 
			
		||||
        virtual void new_diseq_eh(theory_var v1, theory_var v2, justification& j);
 | 
			
		||||
 | 
			
		||||
        bool decompose_linear(app_ref_vector& args, svector<bool>& signs);
 | 
			
		||||
        bool decompose_linear(app_ref_vector& args, bool_vector& signs);
 | 
			
		||||
 | 
			
		||||
        bool is_sign(expr* n, bool& sign);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -399,7 +399,7 @@ void theory_diff_logic<Ext>::del_atoms(unsigned old_size) {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
template<typename Ext>
 | 
			
		||||
bool theory_diff_logic<Ext>::decompose_linear(app_ref_vector& terms, svector<bool>& signs) {
 | 
			
		||||
bool theory_diff_logic<Ext>::decompose_linear(app_ref_vector& terms, bool_vector& signs) {
 | 
			
		||||
    for (unsigned i = 0; i < terms.size(); ++i) {
 | 
			
		||||
        app* n = terms.get(i);
 | 
			
		||||
        bool sign;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -356,9 +356,9 @@ namespace smt {
 | 
			
		|||
        literal_vector    m_antecedents;
 | 
			
		||||
        tracked_uint_set  m_active_var_set;
 | 
			
		||||
        expr_ref_vector   m_antecedent_exprs;
 | 
			
		||||
        svector<bool>     m_antecedent_signs;
 | 
			
		||||
        bool_vector     m_antecedent_signs;
 | 
			
		||||
        expr_ref_vector   m_cardinality_exprs;
 | 
			
		||||
        svector<bool>     m_cardinality_signs;
 | 
			
		||||
        bool_vector     m_cardinality_signs;
 | 
			
		||||
 | 
			
		||||
        void normalize_active_coeffs();
 | 
			
		||||
        void inc_coeff(literal l, int offset);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1033,7 +1033,7 @@ namespace smt {
 | 
			
		|||
        unsigned sz = g.get_num_nodes();
 | 
			
		||||
        svector<dl_var> nodes;
 | 
			
		||||
        num_children.resize(sz, 0);
 | 
			
		||||
        svector<bool> processed(sz, false);
 | 
			
		||||
        bool_vector processed(sz, false);
 | 
			
		||||
        for (unsigned i = 0; i < sz; ++i) nodes.push_back(i);
 | 
			
		||||
        while (!nodes.empty()) {
 | 
			
		||||
            dl_var v = nodes.back();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ namespace smt {
 | 
			
		|||
    /**
 | 
			
		||||
       \brief return the complement of variables that are currently assigned.
 | 
			
		||||
    */
 | 
			
		||||
    void theory_wmaxsat::get_assignment(svector<bool>& result) {
 | 
			
		||||
    void theory_wmaxsat::get_assignment(bool_vector& result) {
 | 
			
		||||
        result.reset();
 | 
			
		||||
        
 | 
			
		||||
        if (!m_found_optimal) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,12 +53,12 @@ namespace smt {
 | 
			
		|||
        bool                     m_can_propagate;
 | 
			
		||||
        bool                     m_normalize; 
 | 
			
		||||
        rational                 m_den;         // lcm of denominators for rational weights.
 | 
			
		||||
        svector<bool>            m_assigned, m_enabled;
 | 
			
		||||
        bool_vector            m_assigned, m_enabled;
 | 
			
		||||
        stats                    m_stats;
 | 
			
		||||
    public:
 | 
			
		||||
        theory_wmaxsat(ast_manager& m, generic_model_converter& mc);
 | 
			
		||||
        ~theory_wmaxsat() override;
 | 
			
		||||
        void get_assignment(svector<bool>& result);
 | 
			
		||||
        void get_assignment(bool_vector& result);
 | 
			
		||||
        expr* assert_weighted(expr* fml, rational const& w);
 | 
			
		||||
        void  disable_var(expr* var);
 | 
			
		||||
        bool_var register_var(app* var, bool attach);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -202,7 +202,7 @@ class diff_neq_tactic : public tactic {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        svector<bool>  m_forbidden;
 | 
			
		||||
        bool_vector  m_forbidden;
 | 
			
		||||
        
 | 
			
		||||
        // make sure m_forbidden.size() > max upper bound
 | 
			
		||||
        void init_forbidden() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ Revision History:
 | 
			
		|||
 | 
			
		||||
static void tst1() {
 | 
			
		||||
    bit_vector     v1;
 | 
			
		||||
    svector<bool> v2;
 | 
			
		||||
    bool_vector v2;
 | 
			
		||||
    unsigned n = rand()%10000;
 | 
			
		||||
    for (unsigned i = 0; i < n; i++) {
 | 
			
		||||
        int op = rand()%6;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ static void tst2() {
 | 
			
		|||
    ENSURE(!g.is_feasible());
 | 
			
		||||
    TRACE("diff_logic", g.display(tout););
 | 
			
		||||
    struct proc {
 | 
			
		||||
        svector<bool> found;
 | 
			
		||||
        bool_vector found;
 | 
			
		||||
        proc():
 | 
			
		||||
            found(7, false) {
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue