Z3的Prove()方法?

问题描述 投票:2回答:1

Z3有一个prove()方法,可以证明两个公式的等价性。

但是,我找不到这个prove()方法的技术文档。 prove()在幕后使用的“等价”的定义是什么?这是“部分等价”(在“回归验证”论文中提出),还是更强大的东西?

提醒一下,“部分等价”保证两个公式在给定相同输入时是等价的,它们产生相同的输出。

z3
1个回答
3
投票

在“回归验证”中,我们检查程序的较新版本是否产生与前一版本相同的输出。也就是说,它是一种检查程序等效性的方法。在这种方法中,使用诸如Z3的定理证明器(SMT求解器)。话虽这么说,我们不应该在一阶逻辑中混淆程序等价与公式等价。 Z3处理一阶逻辑公式。 First-order logic有明确定义的语义。关键概念是可满足性。例如,公式p or q是可以满足的,因为我们可以通过将pq赋值为true来使其成立。另一方面,p and (not p)是不可满足的。我们可以在this section of the Z3 tutorial找到更多信息。

Z3 API提供了检查一阶公式可满足性的过程。 Z3 Python接口有一个prove程序。它表明一个公式是有效的,表明它的否定是不可满足的。这是一个基于Z3 API构建的简单功能。 Here is a link到其文档。文档是从代码中的PyDoc注释自动生成的。

请注意,prove(F)正在检查公式F是否有效。因此,我们可以使用prove(F == G)来试图证明两个一阶公式FG是等价的。也就是说,我们基本上表明F iff G是一个有效的公式。

© www.soinside.com 2019 - 2024. All rights reserved.