【发布时间】:2021-03-24 12:35:13
【问题描述】:
我正在尝试证明以下陈述:
(assert (=
(mod i n)
(mod j n)))
(assert (> n 0))
(assert (not (=
(mod (+ i 1) n)
(mod (+ j 1) n))))
(check-sat)
(get-model)
其他是:
(((i % n) + j) % n) == ((i + j) % n)((i - n + 1) % n) == ((i + 1) % n)((((a - 1) % n) + 1) % n) == (a % n)
但是 z3 在证明这些陈述时似乎并没有终止。它们是否超出了 z3/smt 求解器的能力?
如果这是唯一的方法,我不介意做更明确的证明步骤,但这些规则看起来太简单了,我不知道从哪里开始。即使在使用归纳法时,我也很快遇到了我认为是正确的情况(如最初的示例),但似乎无法用 z3 证明。
我正在使用 z3 4.8.6,物有所值。任何人都可以解释一下为什么这很难,或者可能指出我的方向是使这可行的论文/z3标志?
【问题讨论】: