首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coq中两种不相等值的比较

coq中两种不相等值的比较
EN

Stack Overflow用户
提问于 2016-10-01 22:57:59
回答 1查看 74关注 0票数 0

我在证明这个引理:

代码语言:javascript
复制
Require Import compcert.lib.Coqlib.
Require Import compcert.lib.Integers.
Require Import compcert.common.Values.

Lemma test: forall (val1 val2: int), ((Vint val1) <> (Vint val2)) -> (Some (Val.cmp Ceq (Vint val1) (Vint val2)) = Some Vfalse).
Proof.

Admitted.

我尝试过展开not, Val.cmp, ...,并在H上使用rewrite,但没有去任何地方。任何帮助都是非常感谢的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-01 23:31:16

不幸的是,你原来的定理是错误的。问题是,如果比较值之一不是整数,Val.cmp返回Vundef。检查cmpcmp_bool 这里的定义。

你所拥有的新定理是正确的,但不是以一种非常有用的形式表述的。最好这样说:

代码语言:javascript
复制
forall val1 val2, val1 <> val2 -> Val.cmp Ceq (Vint val1) (Vint val2) = Vfalse

在等式附近使用VintSome构造函数并不会改变定理的真值,但会使其更难在大多数具体设置中应用。这个结果应该是展开Val.cmpVal.cmp_boolInt.cmp,然后用Int.eq_false重写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39812245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档