c++ - 在 z3 中存储 implies() 函数的参数

标签 c++ z3 smt

我想创建一个函数,可以将 implies() 函数的左右参数存储在 2 个不同的表达式变量中。 带有代码的解决方案非常值得赞赏。 谢谢。

这是我以前尝试过的。

#include<iostream>
#include<string>
#include "z3++.h"
using namespace z3;
using namespace std;

void walk(int tab, expr e)
{
    string blanks(tab, ' ');

    if(e.is_const())
    {
        cout << blanks << "ARGUMENT: " << e << endl;
    }
    else
    {
        cout << blanks << "APP: " << e.decl().name() << endl;
        for(int i = 0; i < e.num_args(); i++)
        {
            walk(tab + 5, e.arg(i));
        }
    }
}

int main()
{
    context c;
    expr x = c.bool_const("x");
    expr y = c.bool_const("y");
    expr z = c.bool_const("z");
    expr e = implies(z,(x && y));
    walk(0, e);
}

这是输出:

APP: =>
     ARGUMENT: z
     APP: and
          ARGUMENT: x
          ARGUMENT: y

最佳答案

我将通过示例明确说明我的评论:

if (e.is_implies()) {
    cout << "left side: " <<endl;
    walk(4, e.arg(0));
    cout << "right side: " <<endl;
    walk(4, e.arg(1));
}

这使用了 expr 类的 is_impliesarg 方法。 documentation

关于c++ - 在 z3 中存储 implies() 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56492939/

相关文章:

c++ - 在 C++ 中通过 tcp/ip 协议(protocol)发送 .txt 文件

c - Z3:使用C API找到所有可能的解决方案

z3 - z3::tactic 和 z3::goal 的用途

c++ - 如何使用 'bit-blast' 方法以命题逻辑形式打印给定的公式?

z3 - 如何解决 Z3 中的最小化约束?

c++ - 创建一个像工作区一样的油漆并能够移动它们

c++ - 最佳操作系统抽象?

c++ - Visual C++ 2010 速成版 : extension SDK available?

z3 - UFBV 类别的基准

Z3 模式和单射性