有没有办法使用SMT求解器来找出如何组成函数?

时间:2016-05-14 19:56:15

标签: z3 smt theorem-proving

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

是否存在使用SMT求解器查找以何种顺序组成函数以达到特定输出的实践?如果您有任何阅读材料,我很乐意阅读。

我开始使用Z3完成任务,但如果有任何理由选择其他SMT解算器,请拍摄!

感谢。

1 个答案:

答案 0 :(得分:1)

您需要定义描述要应用哪些操作的常量。首先,根据要使用的操作定义复合操作:

int operation; //constant, constrain it to [0, 2]
Expr result =
 operation == 0 ? applyFunction0(inputExpr) :
 operation == 1 ? applyFunction1(inputExpr) :
 applyFunction2(inputExpr);

非常粗略的伪代码,用于构建什么表达式。 ?:运算符在Z3中映射到ITE

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

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