Coq 错误:非法应用程序(非功能性构造)
我正试图使用HoTT书中的类型构造函数/消除器来证明各种demorgan定律。我已经跳过挑选相关的东西,并将其全部转储到一个.v文本文件中。我需要产品、副产品的消除/引入规则以及设置否定的方法。到目前为止,Coq 错误:非法应用程序(非功能性构造),coq,Coq,我正试图使用HoTT书中的类型构造函数/消除器来证明各种demorgan定律。我已经跳过挑选相关的东西,并将其全部转储到一个.v文本文件中。我需要产品、副产品的消除/引入规则以及设置否定的方法。到目前为止, Definition idmap {A:Type} (x:A) : A := x. Inductive prod {A B:Type} : Type := pair : A -> B -> @prod A B. Notation "x * y" := (prod x y) :
Definition idmap {A:Type} (x:A) : A := x.
Inductive prod {A B:Type} : Type := pair : A -> B -> @prod A B.
Notation "x * y" := (prod x y) : type_scope.
Section projections.
Context {A : Type} {B : Type}.
Definition fst (p: A * B ) :=
match p with
| (x , y) => x
end.
Definition snd (p:A * B ) :=
match p with
| (x , y) => y
end.
End projections.
“定义fst(p:A*B):=”上的错误为
我尝试在Coq站点上搜索错误列表,但没有找到任何内容。您的代码有两个问题:
的两个prod
参数声明为隐式Type
“x*y”
对应于prod{{u}{u}x y
,这将总是导致类型错误的术语:prod{u}{u}
是一种类型
,因此对其应用某些内容是没有意义的
解决方法是将这两个隐式参数转换为显式参数:
Inductive prod (A B:Type) : Type := pair : A -> B -> @prod A B.
- 符号
尚未声明(x,y)
prod
的定义,该定义仍然不会进行类型检查,因为Coq不知道您所说的模式(x,y)
是什么意思。您可以在节投影之前将其声明为新符号,如下所示:
Notation "x , y" := (pair _ _ x y) (at level 10).
您的代码有两个问题:
prod
的两个Type
参数声明为隐式
因此,符号“x*y”
对应于prod{{u}{u}x y
,这将总是导致类型错误的术语:prod{u}{u}
是一种类型
,因此对其应用某些内容是没有意义的
解决方法是将这两个隐式参数转换为显式参数:
Inductive prod (A B:Type) : Type := pair : A -> B -> @prod A B.
- 符号
(x,y)
尚未声明
一旦您修复了prod
的定义,该定义仍然不会进行类型检查,因为Coq不知道您所说的模式(x,y)
是什么意思。您可以在节投影之前将其声明为新符号,如下所示:
Notation "x , y" := (pair _ _ x y) (at level 10).
如果下面的答案帮助你解决了问题,那么你接受答案就好了。如果下面的答案帮助你解决了问题,那么你接受答案就好了。