3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 17:45:32 +00:00

take shortcuts during binary search length testing when length is known from integer theory

This commit is contained in:
Murphy Berzish 2017-10-13 11:39:33 -04:00
parent ec7ea8a763
commit 7b536e910e

View file

@ -10216,6 +10216,16 @@ namespace smt {
}
refresh_theory_var(firstTester);
{
rational freeVar_len_value;
if (get_len_value(freeVar, freeVar_len_value)) {
TRACE("str", tout << "special case: length of freeVar is known to be " << freeVar_len_value << std::endl;);
midPoint = freeVar_len_value;
upperBound = midPoint * 2;
windowSize = upperBound;
}
}
binary_search_len_tester_stack[freeVar].push_back(firstTester);
m_trail_stack.push(binary_search_trail<theory_str>(binary_search_len_tester_stack, freeVar));
binary_search_info new_info(lowerBound, midPoint, upperBound, windowSize);
@ -10244,7 +10254,6 @@ namespace smt {
expr * theory_str::gen_len_val_options_for_free_var(expr * freeVar, expr * lenTesterInCbEq, zstring lenTesterValue) {
ast_manager & m = get_manager();
context & ctx = get_context();
TRACE("str", tout << "gen for free var " << mk_ismt2_pp(freeVar, m) << std::endl;);