需要找到超过 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 = 256
和 t = 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
,它与你的引理有很大不同,因为 x
和 y
属于 int
,而不属于 Z
:
Check eq_false
: forall x y : int, x <> y -> eq x y = false
希望这对您有所帮助。
我有以下引理但无法证明:
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 = 256
和 t = 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
,它与你的引理有很大不同,因为 x
和 y
属于 int
,而不属于 Z
:
Check eq_false
: forall x y : int, x <> y -> eq x y = false
希望这对您有所帮助。