这个问题一直困扰我太多次了。有没有办法在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 /
答案 0 :(得分: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