【发布时间】:2019-06-05 06:52:53
【问题描述】:
我最近开始使用带有 c++ 绑定的 z3 API。我的任务是获取 表达式中的单个元素
示例:(x || !z) && (y || !z) && (!x || !y || z)
如何通过使用函数 arg(i) 对每个位置进行索引来获取单个变量?
在给定示例的情况下,arg(1) 应返回变量“X”。 z3 中是否还有其他功能可以提供我想要的输出?
这是我尝试过的代码,但输出不是单个变量:
#include<iostream>
#include<string>
#include "z3++.h"
using namespace z3;
int main()
{
context c;
expr x = c.bool_const("x");
expr y = c.bool_const("y");
expr z = c.bool_const("z");
expr prove = (x || !z) && (y || !z) && (!x || !y || z);
solver s(c);
expr argument = prove.arg(1);
std::cout<<argument;
}
输出:
(or (not x) (not y) z)(base)
我基本上需要创建一个自动化系统来索引表达式中的每个位置,并检查它是运算符还是操作数,然后插入到数据结构中。所以我想我会创建一个循环并索引表达式中的每个位置。但是 arg(i) 并没有给我我想要的输出。
【问题讨论】: