我是SMT求解器的初学者,我正在尝试将它们用于程序合成的变体。无论如何,问题归结为找到一系列应用操作(先前定义的函数的组合),对于给定的输入,它给出了所请求的输出。
是否存在使用SMT求解器查找以何种顺序组成函数以达到特定输出的实践?如果您有任何阅读材料,我很乐意阅读。
我开始使用Z3完成任务,但如果有任何理由选择其他SMT解算器,请拍摄!
感谢。
答案 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
找到合适的值来选择一个具体的操作。您可以从模型中获取具体值。
您可以迭代此方法以按顺序应用多个操作。