在什么条件下“Eval cbv delta in”扩展了Coq中的定义?

时间:2017-07-21 23:44:12

标签: coq evaluation

在Proof General(使用Coq 8.5)中,我执行了以下操作:

Require Import Arith.
Eval cbv delta in Nat.add_comm 3 7.

输出

Nat.add_comm 3 7 : 3 + 7 = 7 + 3

然而,Print Nat.add_comm.给出了一个长而复杂的函数,它将两个nat作为输入。我希望我的代码扩展Nat.add_comm的定义,这是Eval cbv delta in _.在类似情况下的作用。作为初学者,我知道潜伏着一种天真的误解。我错过了什么?

1 个答案:

答案 0 :(得分:1)

对Daniel的评论进行了扩展,如果

cbv delta将展开一个标识符
  1. 它有一个正文(即,不是上下文变量,公理,当前模块仿函数的模块参数中的字段,绑定变量等),和
  2. 它的身体是透明的,即证明脚本是用Defined而不是Qed关闭的,或者身体是通过:=或自动义务策略给出的(对于{{ 1}})或类型类分辨率(对于没有正文的Program Definition)和
  3. 尚未通过InstanceOpaque id
  4. 标记为不透明
  5. 它不是通过“模块锁定”另一个常量创建的,即在模块(或模块仿函数)中定义的模块类型归属通过Strategy opaque [id]而不是:(例外:if模块类型本身为常量提供了主体
  6. 请注意,目前,<:可以获得3左右(统一引擎也可以,但vm_computecomputelazycbvhnf(通常),cbn(通常),simpl不能),但其他任何事都无法解决。