Z3C代码适用于某些循环计数,而不适用于其他循环计数

Z3C代码适用于某些循环计数,而不适用于其他循环计数,z3,c-api,Z3,C Api,我已经编写了一个Z3程序(从test_capi.c开始),它在一些数字“参数”上循环,并为每个循环添加约束,这些约束依赖于前一个循环的约束。其思想是,每个周期选择2个项目a、d,这些项目可能是指针a、指针d从有序列表u、指针a、指针d中拾取的相同的旧a、d或新a、d 该代码适用于某些循环计数,而不适用于其他循环计数(给出sat与分段错误)。更奇怪的是,代码工作的循环计数在更改代码时会发生变化。所以下面的代码是SAT(我已经选择了n_ABCD=check3),但它只给出了“参数”从2到10的结果,

我已经编写了一个Z3程序(从test_capi.c开始),它在一些数字“参数”上循环,并为每个循环添加约束,这些约束依赖于前一个循环的约束。其思想是,每个周期选择2个项目a、d,这些项目可能是指针a、指针d从有序列表u、指针a、指针d中拾取的相同的旧a、d或新a、d

该代码适用于某些循环计数,而不适用于其他循环计数(给出sat与分段错误)。更奇怪的是,代码工作的循环计数在更改代码时会发生变化。所以下面的代码是SAT(我已经选择了n_ABCD=check3),但它只给出了“参数”从2到10的结果,除了6,参数=8、16、32,可能是其他一些数字,但我至少尝试了这些数字;它在31、33、64、128和512都不起作用。当我将循环分为两个循环时,一个用于指针a[]和指针d[]约束,另一个用于检查v操作,代码对“参数”起作用,最大为9,然后是12、14、17和27,我没有幸运地得到其他更大的数字。目标是将其运行到参数=1024或更高

有没有解释为什么代码只能针对某些数字运行,而不能针对其他数字运行?它是否与选择被评估的任意术语的工作方式有关?(使_var_可行,更新_和_pivot…如下面的gdb跟踪中所示)

charcated_字符串[20];
对于(int i=0;i
尝试使用gdb运行失败的实例时,会显示以下消息:

Program received signal SIGSEGV, Segmentation fault.
0x00001blaab9fff68 in mpn_manager::div_normalize(unsigned int const*, unsigned long, unsigned int const*, unsigned long, mpn_manager::mpn_sbuffer&, mpn_manager::mpn_sbuffer&) const () from /lib/libz3.so
(gdb) backtrace
#0  0x00001blaab9ffd68 in mpn_manager::div_normalize(unsigned int const*, unsigned long, unsigned int const*, unsigned long, mpn_manager::mpn_sbuffer&, mpn_manager::mpn_sbuffer&) const () from /lib/libz3.so
#1  0x00001blaab9ffaf9 in mpn_manager::div(unsigned int const*, unsigned long, unsigned int const*, unsigned long, unsigned int*, unsigned int*) () from /lib/libz3.so
#2  0x00001blaab9e387e in void mpz_manager<true>::quot_rem_core<1>(mpz const&, mpz const&, mpz&, mpz&) () from /lib/libz3.so
#3  0x00001blaab9e4216 in mpz_manager<true>::rem(mpz const&, mpz const&, mpz&) () from /lib/libz3.so
#4  0x00001blaab9e4b71 in mpz_manager<true>::gcd(mpz const&, mpz const&, mpz&) () from /lib/libz3.so
#5  0x00001blaabdef04f in mpq_manager<true>::div(mpq const&, mpq const&, mpq&) () from /lib/libz3.so
#6  0x00001blaab139a0e in smt::theory_arith<smt::mi_ext>::update_and_pivot(int, int, rational const&, inf_rational const&) () from /lib/libz3.so
#7  0x00001blaab13a996 in smt::theory_arith<smt::mi_ext>::make_var_feasible(int) () from /lib/libz3.so
#8  0x00001blaab135aca in smt::theory_arith<smt::mi_ext>::make_feasible() () from /lib/libz3.so
#9  0x00001blaab136b13 in smt::theory_arith<smt::mi_ext>::propagate_core() () from /lib/libz3.so
#10 0x00001blaab22d9ad in smt::context::propagate() () from /lib/libz3.so
#11 0x00001blaab2328c0 in smt::context::bounded_search() () from /lib/libz3.so
#12 0x00001blaab231cd8 in smt::context::search() () from /lib/libz3.so
#13 0x00001blaab231b72 in smt::context::setup_and_check(bool) () from /lib/libz3.so
#14 0x00001blaaa10143f in smt_tactic::operator()(ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#15 0x00001blaab665115 in and_then_tactical::operator()(ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#16 0x00001blaab65a333 in exec(tactic&, ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#17 0x00001blaab65a5ad in check_sat(tactic&, ref<goal>&, ref<model>&, obj_ref<app, ast_manager>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&, std::string&) () from /lib/libz3.so
#18 0x00001blaab539703 in tactic2solver::check_sat_core(unsigned int, expr* const*) () from /lib/libz3.so
#19 0x00001blaab54208b in solver_na2as::check_sat(unsigned int, expr* const*) () from /lib/libz3.so
#20 0x00001blaab53d519 in combined_solver::check_sat(unsigned int, expr* const*) () from /lib/libz3.so
#21 0x00001blaaad73f8e in Z3_solver_check () from /lib/libz3.so
#22 0x0000000000402ce4 in check (ctx=0x622f48, s=0x66d948, expected_result=Z3_L_TRUE) at example.c:210
#23 0x0000000000405830 in main () at example.c:1129
程序接收信号SIGSEGV,分段故障。
mpn_管理器中的0x00001blaab9fff68::div_规格化(无符号int-const*、无符号long、无符号int-const*、无符号long、mpn_管理器中的0x00001blaab9fff68::mpn_-sbuffer&)、mpn_-sbuffer&)const()来自/lib/libz3.so
(gdb)回溯
#mpn_管理器中的0 0x00001blaab9ffd68::div_规格化(unsigned int const*、unsigned long、unsigned int const*、unsigned long、mpn_管理器中的0 0x00001blaab9ffd68::mpn_sbuffer&)const()来自/lib/libz3.so
#1 0x00001blaab9ffaf9在mpn_管理器::div(unsigned int const*、unsigned long、unsigned int const*、unsigned long、unsigned int*、unsigned int*)中,来自/lib/libz3.so
#2 0x00001blaab9e387e无效mpz_管理器::引用/lib/libz3.so中的“rem_核心(mpz常量&,mpz常量&,mpz&,mpz&)()
#3 0x00001blaab9e4216在mpz_管理器中::rem(mpz const&,mpz const&,mpz&)from/lib/libz3.so
#mpz_管理器中的4 0x00001blaab9e4b71::gcd(来自/lib/libz3.so的mpz常量&,mpz常量&,mpz&)()
#mpq_manager::div(mpq const&,mpq const&,mpq&)中的5 0x00001blaabdef04f来自/lib/libz3.so
#smt中的6 0x00001blaab139a0e::理论运算::更新和透视(int,int,rational const&,inf_rational const&)()来自/lib/libz3.so
#smt中的7 0x00001blaab13a996::理论算法::从/lib/libz3.so使变量可行(int)()
#8 0x00001blaab135aca在smt::theory_arith::make_exability()()中来自/lib/libz3.so
#smt::theory_arith::propagate_core()()中的9 0x00001blaab136b13来自/lib/libz3.so
#来自/lib/libz3.so的smt::context::propagate()()中的10 0x00001BLAABB22D9AD
#smt::context::bounded_search()()中的11 0x00001blaab2328c0来自/lib/libz3.so
#smt::contex中的12 0x00001blaab231cd8
Program received signal SIGSEGV, Segmentation fault.
0x00001blaab9fff68 in mpn_manager::div_normalize(unsigned int const*, unsigned long, unsigned int const*, unsigned long, mpn_manager::mpn_sbuffer&, mpn_manager::mpn_sbuffer&) const () from /lib/libz3.so
(gdb) backtrace
#0  0x00001blaab9ffd68 in mpn_manager::div_normalize(unsigned int const*, unsigned long, unsigned int const*, unsigned long, mpn_manager::mpn_sbuffer&, mpn_manager::mpn_sbuffer&) const () from /lib/libz3.so
#1  0x00001blaab9ffaf9 in mpn_manager::div(unsigned int const*, unsigned long, unsigned int const*, unsigned long, unsigned int*, unsigned int*) () from /lib/libz3.so
#2  0x00001blaab9e387e in void mpz_manager<true>::quot_rem_core<1>(mpz const&, mpz const&, mpz&, mpz&) () from /lib/libz3.so
#3  0x00001blaab9e4216 in mpz_manager<true>::rem(mpz const&, mpz const&, mpz&) () from /lib/libz3.so
#4  0x00001blaab9e4b71 in mpz_manager<true>::gcd(mpz const&, mpz const&, mpz&) () from /lib/libz3.so
#5  0x00001blaabdef04f in mpq_manager<true>::div(mpq const&, mpq const&, mpq&) () from /lib/libz3.so
#6  0x00001blaab139a0e in smt::theory_arith<smt::mi_ext>::update_and_pivot(int, int, rational const&, inf_rational const&) () from /lib/libz3.so
#7  0x00001blaab13a996 in smt::theory_arith<smt::mi_ext>::make_var_feasible(int) () from /lib/libz3.so
#8  0x00001blaab135aca in smt::theory_arith<smt::mi_ext>::make_feasible() () from /lib/libz3.so
#9  0x00001blaab136b13 in smt::theory_arith<smt::mi_ext>::propagate_core() () from /lib/libz3.so
#10 0x00001blaab22d9ad in smt::context::propagate() () from /lib/libz3.so
#11 0x00001blaab2328c0 in smt::context::bounded_search() () from /lib/libz3.so
#12 0x00001blaab231cd8 in smt::context::search() () from /lib/libz3.so
#13 0x00001blaab231b72 in smt::context::setup_and_check(bool) () from /lib/libz3.so
#14 0x00001blaaa10143f in smt_tactic::operator()(ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#15 0x00001blaab665115 in and_then_tactical::operator()(ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#16 0x00001blaab65a333 in exec(tactic&, ref<goal> const&, sref_buffer<goal, 16u>&, ref<model_converter>&, ref<proof_converter>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&) () from /lib/libz3.so
#17 0x00001blaab65a5ad in check_sat(tactic&, ref<goal>&, ref<model>&, obj_ref<app, ast_manager>&, obj_ref<dependency_manager<ast_manager::expr_dependency_config>::dependency, ast_manager>&, std::string&) () from /lib/libz3.so
#18 0x00001blaab539703 in tactic2solver::check_sat_core(unsigned int, expr* const*) () from /lib/libz3.so
#19 0x00001blaab54208b in solver_na2as::check_sat(unsigned int, expr* const*) () from /lib/libz3.so
#20 0x00001blaab53d519 in combined_solver::check_sat(unsigned int, expr* const*) () from /lib/libz3.so
#21 0x00001blaaad73f8e in Z3_solver_check () from /lib/libz3.so
#22 0x0000000000402ce4 in check (ctx=0x622f48, s=0x66d948, expected_result=Z3_L_TRUE) at example.c:210
#23 0x0000000000405830 in main () at example.c:1129