1

这个问题已经困扰我太多次了。有没有办法在 Coq 中打印模块类型的每个元素的签名。

例如:

Print Orders.OrderedType.

Module Type Orders.OrderedType = Sig
                               Parameter t
                               Parameter eq
                               Parameter eq_equiv
                               Parameter lt
                               Parameter lt_strorder
                               Parameter lt_compat
                               Parameter compare
                               Parameter compare_spec
                               Parameter eq_dec
                             End

Print Module Type Orders.OrderedType.

Module Type Orders.OrderedType = Sig
                               Parameter t
                               Parameter eq
                               Parameter eq_equiv
                               Parameter lt
                               Parameter lt_strorder
                               Parameter lt_compat
                               Parameter compare
                               Parameter compare_spec
                               Parameter eq_dec
                             End

About Orders.OrderedType.

Module Type Coq.Structures.Orders.OrderedType

所有这些都是无用的,因为它们不会让我想起每个元素的类型......

而且我什至不能使用错误消息来提醒我,因为它们很愚蠢:

Error: Signature components for label eq do not match.

确定错误信息,不要告诉我预期的类型...

我不知道这是否已在 8.4 中修复,但我真的很想有一种方法不必寻找它的定义位置,以便提醒它是如何定义的。有这样的事吗?:(


特别是,找出定义只是沿着一个可笑的长链模块组合追逐......说真的:

Module Type OrderedType <: DecidableType := DecStrOrder <+ HasEqDec.

是的,谢谢...

Module Type DecStrOrder := StrOrder <+ HasCompare.

继续...

Module Type StrOrder := EqualityType <+ HasLt <+ IsStrOrder.

...

Module Type EqualityType := Eq <+ IsEq.

当然...

Module Type Eq := Typ <+ HasEq.

好的...

Module Type Typ.
  Parameter Inline(10) t : Type.
End Typ.

最后,我知道了的类型t!\o/

4

1 回答 1

0

作为部分答案,在过去的一个月中,这似乎已在后备箱中修复。参照。

http://www.lix.polytechnique.fr/coq/bugs/show_bug.cgi?id=1572

http://www.lix.polytechnique.fr/coq/bugs/show_bug.cgi?id=2466

于 2013-03-26T22:28:39.410 回答