需要找到超过 Int.lt 的正确策略

Need finding the right tactic over Int.lt

我有以下引理但无法证明:

Lemma my_comp2: forall i t:Z,
t<i -> Int.ltu (Int.repr i) (Int.repr t) = false.
Proof.
....

我找到了相等策略 (link) 但找不到 lt/ltu 或 gt/gtu:

Theorem eq_false: forall x y, x <> y -> eq x y = false.

任何帮助将不胜感激!

谢谢,

这个引理无法证明,因为它是错误的。这是 wordsize = 8 位情况下的反例(我会把概括留给你)。

我们以 i = 256t = 255 为例。显然,引理的前提为真 (t < i)。然后,(Int.repr i) = 0 因为整数环绕。 (Int.repr t) = 255,因为在这种情况下没有溢出,但是对于上述值,ltu 将 return true,而不是引理所述的 false

Definition i := 256.
Definition t := 255.

Eval compute in ltu (repr i) (repr t).  (* returns true *)


至于定理 eq_false,它与你的引理有很大不同,因为 xy 属于 int,而不属于 Z:

Check eq_false
 : forall x y : int, x <> y -> eq x y = false

希望这对您有所帮助。