mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	change model evaluator to respect resource limits (#5184)
This commit is contained in:
		
							parent
							
								
									7f8e2a9f75
								
							
						
					
					
						commit
						21e59f7c6e
					
				
					 3 changed files with 6 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -616,7 +616,6 @@ struct model_evaluator::imp : public rewriter_tpl<mev::evaluator_cfg> {
 | 
			
		|||
                                    false, // no proofs for evaluator
 | 
			
		||||
                                    m_cfg),
 | 
			
		||||
        m_cfg(md.get_manager(), md, p) {
 | 
			
		||||
        set_cancel_check(false);
 | 
			
		||||
    }
 | 
			
		||||
    void expand_stores(expr_ref &val) {m_cfg.expand_stores(val);}
 | 
			
		||||
    void reset() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,13 +162,13 @@ namespace smt {
 | 
			
		|||
       The variables are replaced by skolem constants. These constants are stored in sks.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    void model_checker::assert_neg_q_m(quantifier * q, expr_ref_vector & sks) {
 | 
			
		||||
    bool model_checker::assert_neg_q_m(quantifier * q, expr_ref_vector & sks) {
 | 
			
		||||
        expr_ref tmp(m);
 | 
			
		||||
        
 | 
			
		||||
        TRACE("model_checker", tout << "curr_model:\n"; model_pp(tout, *m_curr_model););
 | 
			
		||||
 | 
			
		||||
        if (!m_curr_model->eval(q->get_expr(), tmp, true)) {
 | 
			
		||||
            return;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        TRACE("model_checker", tout << "q after applying interpretation:\n" << mk_ismt2_pp(tmp, m) << "\n";);
 | 
			
		||||
        ptr_buffer<expr> subst_args;
 | 
			
		||||
| 
						 | 
				
			
			@ -191,6 +191,7 @@ namespace smt {
 | 
			
		|||
        r = m.mk_not(sk_body);
 | 
			
		||||
        TRACE("model_checker", tout << "mk_neg_q_m:\n" << mk_ismt2_pp(r, m) << "\n";);
 | 
			
		||||
        m_aux_context->assert_expr(r);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool model_checker::add_instance(quantifier * q, model * cex, expr_ref_vector & sks, bool use_inv) {
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +334,8 @@ namespace smt {
 | 
			
		|||
        TRACE("model_checker", tout << "model checking:\n" << expr_ref(flat_q->get_expr(), m) << "\n";);
 | 
			
		||||
        expr_ref_vector sks(m);
 | 
			
		||||
 | 
			
		||||
        assert_neg_q_m(flat_q, sks);
 | 
			
		||||
        if (!assert_neg_q_m(flat_q, sks))
 | 
			
		||||
            return false;
 | 
			
		||||
        TRACE("model_checker", tout << "skolems:\n" << sks << "\n";);
 | 
			
		||||
 | 
			
		||||
        flet<bool> l(m_aux_context->get_fparams().m_array_fake_support, true);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ namespace smt {
 | 
			
		|||
        expr * get_type_compatible_term(expr * val);
 | 
			
		||||
        expr_ref replace_value_from_ctx(expr * e);
 | 
			
		||||
        void restrict_to_universe(expr * sk, obj_hashtable<expr> const & universe);
 | 
			
		||||
        void assert_neg_q_m(quantifier * q, expr_ref_vector & sks);
 | 
			
		||||
        bool assert_neg_q_m(quantifier * q, expr_ref_vector & sks);
 | 
			
		||||
        bool add_blocking_clause(model * cex, expr_ref_vector & sks);
 | 
			
		||||
        bool check(quantifier * q);
 | 
			
		||||
        void check_quantifiers(bool& found_relevant, unsigned& num_failures);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue