近期因为科研工作需要,将原本以python实现的z3项目以c++重写,由于缺少c++版本的相关教程,花费了较多时间,故在完成当前项目后制作该简易教程(仅包含个人理解和个人在开发过程中遇到的困难之处),供读者参考。我会将python版本(下称,python中)和c++版本(下称,cpp中)的实现做简单的对比,供读者理解。相关的配置,请参考:https://blog.csdn.net/a1010451170/article/details/129373950。c++版本的官方例子可以参考:https://github.com/Z3Prover/z3/blob/master/examples/c%2B%2B/example.cpp。
0. 初始设置
python版本需要首先安装z3-solver包,并from z3 import *。cpp版本需要#include "z3++.h",方便起见,在下面叙述中,使用:
using std::vector;
using z3::context;
using z3::solver;
using z3::expr;
using z3::optimize;
using z3::func_decl;
using z3::function;
using z3::expr_vector;
using z3::sum;
using z3::mk_and;
context 与 optimize
cpp版本中,一个核心概念是context,需要显式创建context,并且其余与z3相关的数据结构均依赖该context实体存在,而python中则不需要显示创建context。
当我们的项目需要设置优化的目标时,cpp中:
context smtContext; // 创建context实体
optimize smtOptimize(smtContext); // 创建优化器
python中:
smtOptimize = O