我看到了一个非常奇怪的语法:(名称:type1)类型中的type2和表达式中的[name:type] expr,看起来像是Pi和Lambda的替代语法,但几个小时后我在文档中找不到任何内容搜索,都是徒劳。
它的含义是什么?它的定义在哪里? (抱歉,我丢失了示例用法的链接)
答案 0 :(得分:4)
你一直在阅读为旧版Coq编写的理论。语法与V8.0进行了重大改革。 V8.0附带了一个工具,将V7理论转化为V8,效果非常好;该工具已从后续版本中删除。
您可以在论文Translation from Coq V7 to V8中查看对更改的评论。
特别是,(a:b) c
是一种通用量化,现在写成forall a:b, c
; [a:b] c
是一个lambda抽象,现在写成fun a:b => c
。阅读旧理论时另一个重要的事情是函数应用程序需要括号并且优先级较低:最高为V7,(f x = y)
表示(f (x=y))
而([x:nat]y z)
表示(([x:nat]y) z)
。