Types Coq中是否有(->;)的显式类型构造函数?

Types Coq中是否有(->;)的显式类型构造函数?,types,coq,partial-application,Types,Coq,Partial Application,我试图定义一个提供标识和组合的类。除了其他有用的实例(带有nil和concatenation的List;与identity和composition的关系;-)之外,我还希望有一个函数的实例 给定 我希望能够定义如下内容 Instance Cat (->) := { ... }. 但是Coq的操作员不是这样工作的。首先,我假设->是一个符号,但定位“->”声称这是一个未知符号。使用funab=>a->b有点有效,但之后类型看起来很有趣 > Check (identity nat).

我试图定义一个提供标识和组合的类。除了其他有用的实例(带有nil和concatenation的List;与identity和composition的关系;-)之外,我还希望有一个函数的实例

给定

我希望能够定义如下内容

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