回到过去(即去年),我们曾经能够使用理论插件作为黑客来实现自定义简化器。 Z3 doc甚至包含an example of "procedural attachments"。
我的问题非常简单;是否有任何方法可以实现与Z3 4.x相同的目标?
特别是,我对为Z3提供外部计算的地面术语评估感兴趣。
答案 0 :(得分:4)
理论插件目前在Z3 4.x中被标记为已弃用。因此,尽管它们仍可用于实现自定义简化器,但用户将被迫使用已弃用的API。
在Z3 4.x中,自定义简化器应该实现为Tactics。新的构建系统使得扩展可用策略集非常容易。 我将尝试编写一个关于如何在Z3代码库中编写策略的教程。 当然,在这种方法中,我们必须编写C ++代码。主要优点是策略将在所有前端(C,C ++,。Net,Java,Python,OCaml,SMT2)中提供。此外,外部开发人员可以将他们的策略贡献给Z3代码库,并且它们将适用于所有Z3用户。
我们还计划支持API,用于根据用户提供的回调创建简化策略。该API允许用户用他们喜欢的编程语言编写“自定义简化器”。这个新的API在概念上很简单,但是需要在每个前端(C ++,。Net,Java,Python,OCaml)中提供许多“黑客”。如果一些外部开发人员有兴趣实现和维护此功能,那将是很好的。我相信它会让很多用户受益。