在z3公式中替换函数符号

时间:2013-03-05 23:54:07

标签: z3

在公式中替换函数符号(使用其他函数)的最佳方法是什么? Z3py的substitute似乎只适用于表达式,我现在所做的是尝试猜测可以应用该函数的所有可能的consts / vars组合,然后用另一个函数的应用程序替换它们。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:3)

我们可以实现一个简单的自下而上的重写器,它给出一个术语s,一个函数f和一个术语t将替换每个f - 应用程序{{1} } f(r_1, ..., r_n)s。我使用符号t[r_1, ..., r_n]来表示通过使用t[r_1, ..., r_n],...,t替换r_1中的自由变量而获得的术语。

重写器可以实现Z3 API。我使用r_n来缓存结果,并使用AstMap列表来存储仍需要处理的表达式。

以下是一个简单示例,用todo替换f - f(t)表单与g(t+1)的应用程序。

s

这是代码和更多示例。请注意,我只在一小组示例中测试了代码。

x = Var(0, IntSort())
print rewrite(s, f, g(x + 1))