Z3 有没有一种方法可以使用SMT解算器来找出如何组合函数?

Z3 有没有一种方法可以使用SMT解算器来找出如何组合函数?,z3,smt,theorem-proving,Z3,Smt,Theorem Proving,我是SMT解算器的初学者,我正在尝试将它们用于程序合成的变体。总之,问题归结为找到一系列应用的操作(由先前定义的函数组成),对于给定的输入,这些操作将给出请求的输出 是否存在使用SMT解算器来确定以何种顺序组合函数以达到特定输出的现有实践?如果你有任何阅读材料给我,我很乐意阅读 我开始使用Z3来完成这项任务,但如果有任何理由选择其他SMT解决方案,那就开枪吧 谢谢。您需要定义描述要应用哪些操作的常量。首先,定义一个复合操作,该操作根据要使用的操作进行切换: int operation; //co

我是SMT解算器的初学者,我正在尝试将它们用于程序合成的变体。总之,问题归结为找到一系列应用的操作(由先前定义的函数组成),对于给定的输入,这些操作将给出请求的输出

是否存在使用SMT解算器来确定以何种顺序组合函数以达到特定输出的现有实践?如果你有任何阅读材料给我,我很乐意阅读

我开始使用Z3来完成这项任务,但如果有任何理由选择其他SMT解决方案,那就开枪吧


谢谢。

您需要定义描述要应用哪些操作的常量。首先,定义一个复合操作,该操作根据要使用的操作进行切换:

int operation; //constant, constrain it to [0, 2]
Expr result =
 operation == 0 ? applyFunction0(inputExpr) :
 operation == 1 ? applyFunction1(inputExpr) :
 applyFunction2(inputExpr);
对于要构建的表达式,伪代码非常粗糙。
?:
操作符映射到Z3中的
站点

这样Z3就可以为
操作
找到一个合适的值来选择一个具体操作。您可以从模型中获取具体值

您可以迭代此方法以按顺序应用多个操作