You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Z3无法证明相等关系传递性等价表达式问题咨询

问题原因及解决方案

为什么会生成反例

你当前的代码试图证明两个合取表达式逻辑等价,但你实际的需求是验证相等关系的传递性,二者并不匹配:

  • 你给出的等价式左右两边在逻辑上本身是等值的,你拿到的反例[c=1, b=0, a=0]代入代码计算时,左右两边结果都为False,等值判断结果为True,并不构成有效反例,大概率是你书写待验证表达式时出现了笔误(比如漏写了右侧的某个合取项,或者错误把传递性的蕴含逻辑写成了等价逻辑)。
  • 如果你原本想写的是证明((a == b) and (b == c)) == (a == c),这个命题本身就不成立:当a=1, b=2, c=1时,左边计算结果为False,右边计算结果为True,自然会返回反例。

正确的验证写法

相等关系的传递性是蕴含关系,而非等价关系:只要满足a==b且b==c,就一定能推出a==c,不需要反向成立。正确的验证代码如下:

from z3 import *
a = Int("a")
b = Int("b")
c = Int("c")
# 用Implies表示蕴含关系
prove(Implies(And(a == b, b == c), a == c))

运行上述代码会输出proved,符合预期。

内容的提问来源于stack exchange,提问作者Daniil Iaitskov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:24:02