收缩嵌套的let语句

时间:2015-01-24 11:54:24

标签: coq

目前,我有一个这样的感应案例(截断其他信息,如引入的变量,我可以在需要时添加它):

  IHe : not_set e -> (let (a, _) := sem e c in a) = c
  ============================
   (let (a, _) := let (c0, r) := sem e c in (c0, - r) in a) = c

我还没有真正使用let关键字(事实上,我使用了一个案例match,其中Coq似乎自动为let设置了别名。但是,对我来说,声明似乎很明显:

(let (a, _) := let (c0, r) := sem e c in (c0, - r) in a)

只是使用多个间接级别对相同的值进行别名处理。也就是a=c0=c0_=-r=r,但我无法弄清楚如何减少这种情况。我已经尝试了simplauto之类的内容。我确实遇到了cbv zeta,根据我的理解,它应该简化let语句,但它没有做任何事情。

我在这里缺少什么?我考虑引入一个引理,但是根本没有契约能力,我不知道我试图证明什么相关的东西。 (意思是:如果我能证明任何有用的东西,我就不需要证明)。

1 个答案:

答案 0 :(得分:0)

您需要查看sem e c的结果。

destruct (sem e c) eqn:?. simpl in *.

也可以证明

(let (a, _) := let (c0, r) := sem e c in (c0, - r) in a) = (let (a, _) := sem e c in a),

再次通过检查该对,因为该对的第二个元素未被使用。