mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	fix unsoundness bug in axiomatization of str.at. #1067
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									6bce173248
								
							
						
					
					
						commit
						a59ee8032c
					
				
					 3 changed files with 5 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -342,6 +342,5 @@ namespace Microsoft.Z3
 | 
			
		|||
            Context.CheckContextMatch<Expr>(args);
 | 
			
		||||
            return Expr.Create(Context, this, args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1405,6 +1405,7 @@ namespace smt {
 | 
			
		|||
            switch (js.get_kind()) {
 | 
			
		||||
            case b_justification::CLAUSE: {
 | 
			
		||||
                clause * cls = js.get_clause();
 | 
			
		||||
                TRACE("unsat_core_bug", m_ctx.display_clause_detail(tout, cls););
 | 
			
		||||
                unsigned num_lits = cls->get_num_literals();
 | 
			
		||||
                unsigned i        = 0;
 | 
			
		||||
                if (consequent != false_literal) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1422,8 +1423,9 @@ namespace smt {
 | 
			
		|||
                    process_antecedent_for_unsat_core(~l);
 | 
			
		||||
                }
 | 
			
		||||
                justification * js = cls->get_justification();
 | 
			
		||||
                if (js)
 | 
			
		||||
                if (js) {
 | 
			
		||||
                    process_justification_for_unsat_core(js);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case b_justification::BIN_CLAUSE:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3567,8 +3567,8 @@ void theory_seq::add_at_axiom(expr* e) {
 | 
			
		|||
    add_axiom(~i_ge_0, i_ge_len_s, mk_eq(one, len_e, false));
 | 
			
		||||
    add_axiom(~i_ge_0, i_ge_len_s, mk_eq(i, len_x, false));
 | 
			
		||||
 | 
			
		||||
    add_axiom(i_ge_0, mk_eq(s, emp, false));
 | 
			
		||||
    add_axiom(~i_ge_len_s, mk_eq(s, emp, false));
 | 
			
		||||
    add_axiom(i_ge_0, mk_eq(e, emp, false));
 | 
			
		||||
    add_axiom(~i_ge_len_s, mk_eq(e, emp, false));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue