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

Is there a way to use SMT solvers for finding out how to compose functions?

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

是否有使用 SMT 求解器找出以何种顺序组合函数以达到特定输出的现有实践?如果你对我有任何阅读material,我很乐意阅读。

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

谢谢。

您需要定义常量来描述要应用的操作。首先,定义一个复合操作,根据使用什么操作来切换:

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

构建什么表达式的非常粗略的伪代码。 ?: 运算符映射到 Z3.

中的 ITE

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

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