有没有办法使用 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
找到一个合适的值来选择一个具体的操作。您可以从模型中获取具体值。
您可以重复此方法以按顺序应用多个操作。
我是 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
找到一个合适的值来选择一个具体的操作。您可以从模型中获取具体值。
您可以重复此方法以按顺序应用多个操作。