mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	trace reason for undef in arithmetic, enable model generation on THEORY incompleteness, but retain undef result
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									4995ce1fde
								
							
						
					
					
						commit
						9412890c63
					
				
					 4 changed files with 11 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -3945,7 +3945,7 @@ namespace smt {
 | 
			
		|||
              m_fingerprints.display(tout); 
 | 
			
		||||
              );
 | 
			
		||||
        failure fl = get_last_search_failure();
 | 
			
		||||
        if (fl == TIMEOUT || fl == MEMOUT || fl == CANCELED || fl == NUM_CONFLICTS || fl == THEORY) {
 | 
			
		||||
        if (fl == TIMEOUT || fl == MEMOUT || fl == CANCELED || fl == NUM_CONFLICTS) {
 | 
			
		||||
            // don't generate model.
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1274,8 +1274,10 @@ namespace smt {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        while (m_final_check_idx != old_idx);
 | 
			
		||||
        if (result == FC_DONE && m_found_unsupported_op)
 | 
			
		||||
        if (result == FC_DONE && m_found_unsupported_op) {
 | 
			
		||||
            TRACE("arith", tout << "Found unsupported operation\n";);
 | 
			
		||||
            result = FC_GIVEUP;
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1294,8 +1294,10 @@ namespace smt {
 | 
			
		|||
              }
 | 
			
		||||
              tout << "max: " << max << ", min: " << min << "\n";);
 | 
			
		||||
 | 
			
		||||
        if (m_params.m_arith_ignore_int)
 | 
			
		||||
        if (m_params.m_arith_ignore_int) {
 | 
			
		||||
            TRACE("arith", tout << "Ignore int: give up\n";);
 | 
			
		||||
            return FC_GIVEUP;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!gcd_test())
 | 
			
		||||
            return FC_CONTINUE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2314,13 +2314,15 @@ namespace smt {
 | 
			
		|||
            return FC_DONE;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!m_params.m_nl_arith)
 | 
			
		||||
        if (!m_params.m_nl_arith) {
 | 
			
		||||
            TRACE("non_linear", tout << "Non-linear is not enabled\n";);
 | 
			
		||||
            return FC_GIVEUP;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        TRACE("process_non_linear", display(tout););
 | 
			
		||||
 | 
			
		||||
        if (m_nl_rounds > m_params.m_nl_arith_rounds) {
 | 
			
		||||
            TRACE("non_linear", tout << "GIVE UP non linear problem...\n";);
 | 
			
		||||
            TRACE("non_linear", tout << "GIVEUP non linear problem...\n";);
 | 
			
		||||
            IF_VERBOSE(3, verbose_stream() << "Max. non linear arithmetic rounds. Increase threshold using NL_ARITH_ROUNDS=<limit>\n";);
 | 
			
		||||
            return FC_GIVEUP;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue