From 7c9f930ef18f15bdf7376d48ad7b0296bbe04087 Mon Sep 17 00:00:00 2001 From: Lev Nachmanson Date: Thu, 12 Mar 2026 16:38:06 -1000 Subject: [PATCH] Add arith.nl.nra_check_assignment_max_fail parameter Replace hardcoded failure threshold with configurable parameter (default 10). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/math/lp/nla_core.cpp | 2 +- src/params/smt_params_helper.pyg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/math/lp/nla_core.cpp b/src/math/lp/nla_core.cpp index a05975d8a..96f18ccf3 100644 --- a/src/math/lp/nla_core.cpp +++ b/src/math/lp/nla_core.cpp @@ -1330,7 +1330,7 @@ lbool core::check(unsigned level) { return l_false; } - if (no_effect() && params().arith_nl_nra_check_assignment() && m_check_assignment_fail_cnt < 10) { + if (no_effect() && params().arith_nl_nra_check_assignment() && m_check_assignment_fail_cnt < params().arith_nl_nra_check_assignment_max_fail()) { scoped_limits sl(m_reslim); sl.push_child(&m_nra_lim); ret = m_nra.check_assignment(); diff --git a/src/params/smt_params_helper.pyg b/src/params/smt_params_helper.pyg index 7ea231f55..6cb7d315d 100644 --- a/src/params/smt_params_helper.pyg +++ b/src/params/smt_params_helper.pyg @@ -61,6 +61,7 @@ def_module_params(module_name='smt', ('arith.nl', BOOL, True, '(incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2'), ('arith.nl.nra', BOOL, True, 'call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6'), ('arith.nl.nra_check_assignment', BOOL, True, 'call check_assignment in nra_solver to verify current assignment against nlsat constraints'), + ('arith.nl.nra_check_assignment_max_fail', UINT, 10, 'maximum consecutive check_assignment failures before disabling it'), ('arith.nl.branching', BOOL, True, 'branching on integer variables in non linear clusters'), ('arith.nl.expensive_patching', BOOL, False, 'use the expensive of monomials'), ('arith.nl.rounds', UINT, 1024, 'threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2'),