在 z3 中表示推理规则

Representing inference rules in z3

我一直在阅读和研究几份文档,但我仍然不清楚如何在 z3 中表示我的推理规则。

假设我有以下 2 个推理规则:

我的z3规则是这么简单吗:

一个。 (a ^ b) => c
b. (a ^ b) => c

或者,我认为更正确的是,我是否必须声明数据类型(记录、标量等)。

从那里,java 实施看起来相当直接阅读文档。

这只是从类型系统的推理规则到命题逻辑的初始转换让我挂了。

我认为我缺少推理规则(ab)与在 z3 中表示它们之间的一些联系;当我继续阅读文档时,对于如何体现这些规则仍然不明朗。

Z3 将是这项任务的不错选择,尽管很难准确理解您的问题是什么。 (要点 ab 完全相同,这是故意的吗?)但本质上推理规则是蕴涵,因此从命题和它们之间的蕴涵来考虑它们就可以了.

此外,您的规则可能会有一个 Horn 结构(如 Prolog 中的 Horn 子句,请参阅此处:https://en.wikipedia.org/wiki/Horn_clause),并且 Z3 有一个数据记录引擎,可以使此类问题的编码更加容易.

请参阅此处以获得非常好的介绍:http://rise4fun.com/z3/tutorialcontent/fixedpoints 我认为可以相对轻松地将其应用于您的用例。