Coq:展开类实例

时间:2014-06-08 23:08:28

标签: typeclass coq

如何在Coq中展开类实例?只有当实例不包含证据或其他内容时,似乎才有可能。考虑一下:

Class C1 (t:Type) := {v1:t}.
Class C2 (t:Type) := {v2:t;c2:v2=v2}.

Instance C1_nat: C1 nat:= {v1:=4}.

Instance C2_nat: C2 nat:= {v2:=4}.
trivial.
Qed.

Theorem thm1 : v1=4.
unfold v1.
unfold C1_nat.
trivial.
Qed.

Theorem thm2 : v2=4.
unfold v2.
unfold C2_nat.
trivial.
Qed.

thm1已被证实,但我无法证明thm2;它在unfold C2_nat的{​​{1}}步骤中抱怨。

发生了什么?如何获得Error: Cannot coerce C2_nat to an evaluable reference.C2_nat的定义?

1 个答案:

答案 0 :(得分:7)

您使用C2_nat结束了Qed的定义。以Qed结尾的定义是不透明的,无法展开。写下以下内容

Instance C2_nat: C2 nat:= {v2:=4}.
  trivial.
Defined.

并且你的证明没有问题就完成了。