在 z3 中表示推理规则
Representing inference rules in z3
我一直在阅读和研究几份文档,但我仍然不清楚如何在 z3 中表示我的推理规则。
假设我有以下 2 个推理规则:
我的z3规则是这么简单吗:
一个。 (a ^ b) => c
b. (a ^ b) => c
或者,我认为更正确的是,我是否必须声明数据类型(记录、标量等)。
从那里,java 实施看起来相当直接阅读文档。
这只是从类型系统的推理规则到命题逻辑的初始转换让我挂了。
我认为我缺少推理规则(a
和 b
)与在 z3 中表示它们之间的一些联系;当我继续阅读文档时,对于如何体现这些规则仍然不明朗。
Z3 将是这项任务的不错选择,尽管很难准确理解您的问题是什么。 (要点 a
和 b
完全相同,这是故意的吗?)但本质上推理规则是蕴涵,因此从命题和它们之间的蕴涵来考虑它们就可以了.
此外,您的规则可能会有一个 Horn 结构(如 Prolog 中的 Horn 子句,请参阅此处:https://en.wikipedia.org/wiki/Horn_clause),并且 Z3 有一个数据记录引擎,可以使此类问题的编码更加容易.
请参阅此处以获得非常好的介绍:http://rise4fun.com/z3/tutorialcontent/fixedpoints 我认为可以相对轻松地将其应用于您的用例。
我一直在阅读和研究几份文档,但我仍然不清楚如何在 z3 中表示我的推理规则。
假设我有以下 2 个推理规则:
我的z3规则是这么简单吗:
一个。 (a ^ b) => c
b. (a ^ b) => c
或者,我认为更正确的是,我是否必须声明数据类型(记录、标量等)。
从那里,java 实施看起来相当直接阅读文档。
这只是从类型系统的推理规则到命题逻辑的初始转换让我挂了。
我认为我缺少推理规则(a
和 b
)与在 z3 中表示它们之间的一些联系;当我继续阅读文档时,对于如何体现这些规则仍然不明朗。
Z3 将是这项任务的不错选择,尽管很难准确理解您的问题是什么。 (要点 a
和 b
完全相同,这是故意的吗?)但本质上推理规则是蕴涵,因此从命题和它们之间的蕴涵来考虑它们就可以了.
此外,您的规则可能会有一个 Horn 结构(如 Prolog 中的 Horn 子句,请参阅此处:https://en.wikipedia.org/wiki/Horn_clause),并且 Z3 有一个数据记录引擎,可以使此类问题的编码更加容易.
请参阅此处以获得非常好的介绍:http://rise4fun.com/z3/tutorialcontent/fixedpoints 我认为可以相对轻松地将其应用于您的用例。