我正在研究一个给定here的例子:
Notation step_normal_form := (normal_form step).
Definition stuck (t:tm) : Prop :=
step_normal_form t /\ ~ value t.
Example some_term_is_stuck :
exists t, stuck t.
我在步骤1(问题8.4pl6)中定义unfold
时遇到问题step_normal_form
。我可以在CoqIDE中Check
其内容:
normal_form
: relation ?23 -> ?23 -> Prop
value
: tm -> Prop
但是当我展开step_normal_form
时:
Example some_term_is_stuck :
exists t, stuck t.
Proof.
unfold stuck. unfold step_normal_form.
我收到错误:
Error: step_normal_form is bound to a notation that does not denote a reference.
有谁知道为什么会发生这种情况以及如何解决?
顺便说一句,我试图通过手动执行unfold
并重新定义来解决这个问题:
Definition stuck' (t:tm) : Prop :=
normal_form step t /\ ~ value t.
并改为使用stuck'
。但Coq似乎会自动将stuck'
的内容折叠为step_normal_form
,然后拒绝unfold
,同样会出错。
答案 0 :(得分:1)
由于step_normal_form
只是(normal_form step)
的注释,您可以unfold normal_form.
有时候,符号和漂亮的印刷隐藏了真正存在的东西。使用Set Printing All.
与make Coq print the term in clear。