File tree 3 files changed +20
-1
lines changed
3 files changed +20
-1
lines changed Original file line number Diff line number Diff line change @@ -1285,7 +1285,7 @@ lbool core::incremental_linearization(bool constraint_derived) {
1285
1285
SASSERT (elists_are_consistent (true ));
1286
1286
if (search_level == 1 ) {
1287
1287
m_order.order_lemma ();
1288
- } else { // search_level == 2
1288
+ } else if ( search_level == 2 ) {
1289
1289
m_monotone. monotonicity_lemma ();
1290
1290
m_tangents.tangent_lemma ();
1291
1291
}
@@ -1370,6 +1370,21 @@ void core::update_to_refine_of_var(lpvar j) {
1370
1370
}
1371
1371
}
1372
1372
1373
+ bool core::var_is_big (lpvar j) const {
1374
+ if (var_is_int (j))
1375
+ return false ;
1376
+ return val (j).is_big ();
1377
+ }
1378
+
1379
+ bool core::has_big_num (const monic& m) const {
1380
+ if (var_is_big (var (m)))
1381
+ return true ;
1382
+ for (lpvar j : m.vars ())
1383
+ if (var_is_big (j))
1384
+ return true ;
1385
+ return false ;
1386
+ }
1387
+
1373
1388
bool core::patch_blocker (lpvar u, const monic& m) const {
1374
1389
SASSERT (m_to_refine.contains (m.var ()));
1375
1390
if (var_is_used_in_a_correct_monic (u)) {
Original file line number Diff line number Diff line change @@ -424,6 +424,8 @@ class core {
424
424
bool try_to_patch (lpvar, const rational&, const monic&);
425
425
bool to_refine_is_correct () const ;
426
426
bool patch_blocker (lpvar u, const monic& m) const ;
427
+ bool has_big_num (const monic&) const ;
428
+ bool var_is_big (lpvar) const ;
427
429
}; // end of core
428
430
429
431
struct pp_mon {
Original file line number Diff line number Diff line change @@ -37,6 +37,8 @@ void monotone::monotonicity_lemma(monic const& m) {
37
37
SASSERT (!check_monic (m));
38
38
if (c ().mon_has_zero (m.vars ()))
39
39
return ;
40
+ if (c ().has_big_num (m))
41
+ return ;
40
42
const rational prod_val = abs (c ().product_value (m));
41
43
const rational m_val = abs (var_val (m));
42
44
if (m_val < prod_val)
You can’t perform that action at this time.
0 commit comments