mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	
							parent
							
								
									a71b4fab23
								
							
						
					
					
						commit
						e5892e5e97
					
				
					 4 changed files with 25 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -93,8 +93,16 @@ namespace bv {
 | 
			
		|||
        } while (curr != v);
 | 
			
		||||
 | 
			
		||||
        zero_one_bits const& _bits = m_zero_one_bits[v];
 | 
			
		||||
        if (_bits.size() != num_bits)
 | 
			
		||||
            std::cout << v << " " << _bits.size() << " " << num_bits << "\n";
 | 
			
		||||
        if (_bits.size() != num_bits) {
 | 
			
		||||
            std::cout << "v" << v << " " << _bits.size() << " " << num_bits << "\n";
 | 
			
		||||
            std::cout << "true: " << mk_true() << "\n";
 | 
			
		||||
            do {
 | 
			
		||||
                std::cout << "v" << curr << ": " << m_bits[curr] << "\n";
 | 
			
		||||
                curr = m_find.next(curr);
 | 
			
		||||
            }
 | 
			
		||||
            while (curr != v);
 | 
			
		||||
        }
 | 
			
		||||
        SASSERT(_bits.size() == num_bits);
 | 
			
		||||
        VERIFY(_bits.size() == num_bits);
 | 
			
		||||
        bool_vector already_found;
 | 
			
		||||
        already_found.resize(bv_sz, false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -664,7 +664,7 @@ namespace bv {
 | 
			
		|||
        result->set_solver(&ctx.s());
 | 
			
		||||
        for (theory_var i = 0; i < static_cast<theory_var>(get_num_vars()); ++i)
 | 
			
		||||
            if (find(i) != i)
 | 
			
		||||
                result->m_find.merge(i, find(i));
 | 
			
		||||
                result->m_find.set_root(i, find(i));
 | 
			
		||||
        result->m_prop_queue.append(m_prop_queue);
 | 
			
		||||
        for (unsigned i = 0; i < m_bool_var2atom.size(); ++i) {
 | 
			
		||||
            atom* a = m_bool_var2atom[i];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,6 +102,9 @@ namespace bv {
 | 
			
		|||
            unsigned   m_is_true:1;
 | 
			
		||||
            zero_one_bit(theory_var v = euf::null_theory_var, unsigned idx = UINT_MAX, bool is_true = false):
 | 
			
		||||
                m_owner(v), m_idx(idx), m_is_true(is_true) {}
 | 
			
		||||
            std::ostream& display(std::ostream& out) const {
 | 
			
		||||
                return out << "v" << m_owner << " @ " << m_idx << " " << (m_is_true?"T":"F");
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        typedef svector<zero_one_bit> zero_one_bits;
 | 
			
		||||
| 
						 | 
				
			
			@ -367,9 +370,12 @@ namespace bv {
 | 
			
		|||
        typedef std::pair<solver const*, theory_var> pp_var;
 | 
			
		||||
        pp_var pp(theory_var v) const { return pp_var(this, v); }
 | 
			
		||||
 | 
			
		||||
        friend std::ostream& operator<<(std::ostream& out, solver::zero_one_bit const& zo) { return zo.display(out); }
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    inline std::ostream& operator<<(std::ostream& out, solver::pp_var const& p) { return p.first->display(out, p.second); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,6 +134,14 @@ public:
 | 
			
		|||
        CASSERT("union_find", check_invariant());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_root(unsigned v, unsigned root) {
 | 
			
		||||
        TRACE("union_find", tout << "merging " << v << " " << root << "\n";);
 | 
			
		||||
        SASSERT(v != root);
 | 
			
		||||
        m_find[v] = root;
 | 
			
		||||
        m_size[root] += m_size[v];
 | 
			
		||||
        std::swap(m_next[root], m_next[v]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // dissolve equivalence class of v
 | 
			
		||||
    // this method cannot be used with backtracking.
 | 
			
		||||
    void dissolve(unsigned v) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue