mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	fix scope accounting for dom simplifier
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									4e92caa553
								
							
						
					
					
						commit
						448cf8c31d
					
				
					 4 changed files with 26 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -80,6 +80,7 @@ public:
 | 
			
		|||
            m_trail_lim.resize(new_sz); 
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    unsigned scope_level() const { return m_trail_lim.size(); }
 | 
			
		||||
    bool empty() const { return m_subst.empty(); }
 | 
			
		||||
    expr* find(expr * e) { proof* pr; expr* d = 0; if (find(e, d, pr)) return d; else return e; }
 | 
			
		||||
    bool find(expr * s, expr * & def, proof * & def_pr) { return m_subst.find(s, def, def_pr); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@ Abstract:
 | 
			
		|||
 | 
			
		||||
Author:
 | 
			
		||||
 | 
			
		||||
    Nikolaj Bjorner (nbjorner) 2016-2-12
 | 
			
		||||
    Nuno Lopes (nlopes) 2016-2-12
 | 
			
		||||
 | 
			
		||||
    Nikolaj Bjorner (nbjorner) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--*/
 | 
			
		||||
| 
						 | 
				
			
			@ -650,11 +652,11 @@ namespace {
 | 
			
		|||
                        return false;
 | 
			
		||||
                    if (old == intr)
 | 
			
		||||
                        return true;
 | 
			
		||||
                    m_scopes.insert(undo_bound(t1, old, false));
 | 
			
		||||
                    m_scopes.push_back(undo_bound(t1, old, false));
 | 
			
		||||
                    old = intr;
 | 
			
		||||
                } else {
 | 
			
		||||
                    m_bound.insert(t1, b);
 | 
			
		||||
                    m_scopes.insert(undo_bound(t1, interval(), true));
 | 
			
		||||
                    m_scopes.push_back(undo_bound(t1, interval(), true));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -801,6 +803,10 @@ namespace {
 | 
			
		|||
            return alloc(dom_bv_bounds_simplifier, m, m_params);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual unsigned scope_level() const {
 | 
			
		||||
            return m_scopes.size();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,8 @@ Abstract:
 | 
			
		|||
 | 
			
		||||
Author:
 | 
			
		||||
 | 
			
		||||
    Nikolaj Bjorner (nbjorner) 2016-2-12
 | 
			
		||||
    Nuno Lopes (nlopes) 2016-2-12
 | 
			
		||||
    Nikolaj Bjorner (nbjorner)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--*/
 | 
			
		||||
| 
						 | 
				
			
			@ -21,8 +22,15 @@ Author:
 | 
			
		|||
 | 
			
		||||
tactic * mk_bv_bounds_tactic(ast_manager & m, params_ref const & p = params_ref());
 | 
			
		||||
 | 
			
		||||
tactic * mk_dom_bv_bounds_tactic(ast_manager & m, params_ref const & p = params_ref());
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  ADD_TACTIC("propagate-bv-bounds", "propagate bit-vector bounds by simplifying implied or contradictory bounds.", "mk_bv_bounds_tactic(m, p)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  ADD_TACTIC("propagate-bv-bounds-new", "propagate bit-vector bounds by simplifying implied or contradictory bounds.", "mk_dom_bv_bounds_tactic(m, p)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,8 @@ class dom_simplifier {
 | 
			
		|||
    virtual void pop(unsigned num_scopes) = 0;
 | 
			
		||||
    
 | 
			
		||||
    virtual dom_simplifier * translate(ast_manager & m) = 0;
 | 
			
		||||
 | 
			
		||||
    virtual unsigned scope_level() const = 0;
 | 
			
		||||
    
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -116,9 +118,9 @@ class dom_simplify_tactic : public tactic {
 | 
			
		|||
    ptr_vector<expr> const & tree(expr * e);
 | 
			
		||||
    expr* idom(expr *e) const { return m_dominators.idom(e); }
 | 
			
		||||
 | 
			
		||||
    unsigned scope_level() { return m_scope_level; }
 | 
			
		||||
    void pop(unsigned n) { SASSERT(n <= m_scope_level); m_scope_level -= n; m_simplifier->pop(n); }
 | 
			
		||||
    bool assert_expr(expr* f, bool sign) { m_scope_level++; return m_simplifier->assert_expr(f, sign); }
 | 
			
		||||
    unsigned scope_level() { return m_simplifier->scope_level(); }
 | 
			
		||||
    void pop(unsigned n) { SASSERT(n <= m_simplifier->scope_level()); m_simplifier->pop(n); }
 | 
			
		||||
    bool assert_expr(expr* f, bool sign) { return m_simplifier->assert_expr(f, sign); }
 | 
			
		||||
 | 
			
		||||
    bool init(goal& g);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -169,6 +171,8 @@ public:
 | 
			
		|||
    
 | 
			
		||||
    virtual void pop(unsigned num_scopes) { m_scoped_substitution.pop(num_scopes); }
 | 
			
		||||
    
 | 
			
		||||
    virtual unsigned scope_level() const { return m_scoped_substitution.scope_level(); }
 | 
			
		||||
 | 
			
		||||
    virtual dom_simplifier * translate(ast_manager & m) {
 | 
			
		||||
        SASSERT(m_subst.empty());
 | 
			
		||||
        return alloc(expr_substitution_simplifier, m);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue