mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	(partial) fix #3788
Fixes a bug in computation of implicants inside spacer. The instance now returns `unknown`. The root cause is the difference in what proofs are in spacer and SMT. Spacer returns a proof of query, but horn_tactic expects a proof of FALSE.
This commit is contained in:
		
							parent
							
								
									44302f3f2a
								
							
						
					
					
						commit
						b1b77e57e1
					
				
					 2 changed files with 10 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -127,8 +127,14 @@ void ground_sat_answer_op::mk_children(frame &fr, vector<frame> &todo) {
 | 
			
		|||
    m_solver->assert_expr(fr.pt().transition());
 | 
			
		||||
    m_solver->assert_expr(fr.pt().rule2tag(&r));
 | 
			
		||||
 | 
			
		||||
    TRACE("spacer_sat",
 | 
			
		||||
          tout << "Solver in mk_children\n";
 | 
			
		||||
          m_solver->display(tout) << "\n";);
 | 
			
		||||
 | 
			
		||||
    lbool res = m_solver->check_sat(0, nullptr);
 | 
			
		||||
    (void)res;
 | 
			
		||||
    CTRACE("spacer_sat", res != l_true,
 | 
			
		||||
           tout << "Result: " << res << "\n";);
 | 
			
		||||
    VERIFY(res == l_true);
 | 
			
		||||
 | 
			
		||||
    model_ref mdl;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -496,15 +496,16 @@ namespace {
 | 
			
		|||
            SASSERT(m_todo.empty());
 | 
			
		||||
            if (m_visited.is_marked(e) || !is_app(e)) return;
 | 
			
		||||
 | 
			
		||||
            m_todo.reset();
 | 
			
		||||
            m_todo.push_back(e);
 | 
			
		||||
            for (unsigned i = 0; i < m_todo.size(); ++i) {
 | 
			
		||||
            while(!m_todo.empty()) {
 | 
			
		||||
                e = m_todo.back();
 | 
			
		||||
                m_todo.pop_back();
 | 
			
		||||
                if (!is_app(e)) continue;
 | 
			
		||||
                app* a = to_app(e);
 | 
			
		||||
                m_todo.pop_back();
 | 
			
		||||
                process_app(a, out);
 | 
			
		||||
                m_visited.mark(a, true);
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
            m_todo.reset();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue