Types Coq中是否有(->;)的显式类型构造函数?
我试图定义一个提供标识和组合的类。除了其他有用的实例(带有nil和concatenation的List;与identity和composition的关系;-)之外,我还希望有一个函数的实例 给定 我希望能够定义如下内容Types Coq中是否有(->;)的显式类型构造函数?,types,coq,partial-application,Types,Coq,Partial Application,我试图定义一个提供标识和组合的类。除了其他有用的实例(带有nil和concatenation的List;与identity和composition的关系;-)之外,我还希望有一个函数的实例 给定 我希望能够定义如下内容 Instance Cat (->) := { ... }. 但是Coq的操作员不是这样工作的。首先,我假设->是一个符号,但定位“->”声称这是一个未知符号。使用funab=>a->b有点有效,但之后类型看起来很有趣 > Check (identity nat).
Instance Cat (->) := { ... }.
但是Coq的操作员不是这样工作的。首先,我假设->
是一个符号,但定位“->”
声称这是一个未知符号。使用funab=>a->b
有点有效,但之后类型看起来很有趣
> Check (identity nat).
identity nat
: (fun a b : Type => a -> b) nat nat
(同样适用于evalcompute in
,似乎它不会简化类型。)我更喜欢可读性更强的identity-nat:nat->nat
。(目前,对于我正在做的事情,这些类型变得不可读。)
有没有办法得到“原始”->
,或者至少说服Coq给我更好的类型
旁注:我正在构建许多表示求值语义的归纳式s,我的目标是将“普通”编程语言的子集映射到Coq上,然后再映射回来,传递安全约束并实现魔术。我被迫用不同的构造器一次又一次地证明同样的东西,希望这能让我一次又一次地证明这些东西。我相信分类是正确的抽象方法。如果我错了,也许有更好的方法可以避开整个->
问题。我只能回答部分问题->
不是像+
那样的符号,存在
和{…|…}
,它内置在解析器中,就像所有的一样。当x
在b
中不是免费的时,语法a->b
就相当于对于所有x:a,b
(我不知道它是否在所有情况下都是等效的,可能有一些用法是x
不能出现在b
中,你必须使用->
)
原因是函数抽象和应用,以及它们的类型,在Coq中是基本的,它们不是从更原始的概念派生出来的。您不能直接使用fun
、应用程序、->
或for all
,因为它们不是一流的对象
也就是说,类型类是专门处理应用程序的一种方法。我对它们不熟悉,所以我不知道是否有一种方法可以完成您想要做的事情。实际上,定义了“Notation”a->B:=(forall(:a),B):键入范围。“
> Check (identity nat).
identity nat
: (fun a b : Type => a -> b) nat nat