Coq中的产品类型

Coq中的产品类型,coq,cartesian-product,Coq,Cartesian Product,在coq中将参数传递给产品类型时遇到问题。我有一个定义,看起来像 Definition bar (a:Type) := a->Type. 我需要定义一个函数,它接收“a”和“bar a”生成的东西,并输出它们的产品/订购对。所以我尝试了以下方法 Definition foo (a:Type)(b:bar a):= prod a b. 这给了我一个错误 术语“b”的类型为“bar a”,而预期的类型为“type” 真正让人困惑的是 Definition foo (

在coq中将参数传递给产品类型时遇到问题。我有一个定义,看起来像

    Definition bar (a:Type) := a->Type.
我需要定义一个函数,它接收“a”和“bar a”生成的东西,并输出它们的产品/订购对。所以我尝试了以下方法

    Definition foo (a:Type)(b:bar a):= prod a b.
这给了我一个错误

术语“b”的类型为“bar a”,而预期的类型为“type”

真正让人困惑的是

    Definition foo (a:Type) := prod a (bar a). 

很好用。很明显,“BarA”有“type”类型,所以我不确定如何修复我原来的定义。我怀疑我没有正确地传递变量。

若要查看错误,请在
foo
定义中展开
bar a

Definition foo (a:Type)(b:a->Type):= prod a b.
现在应该很清楚,
b
不是一个类型,它是从
a
类型的函数

由于您从未获得类型为
a
的对象,因此无法将
b
应用于任何对象,也无法从中获得类型为
的对象

对于第二个定义,请再次展开以了解其工作原理:

Definition foo (a:Type) := prod a (a->Type).

a
a->Type
对于产品来说都是有效的
Type

我明白了。非常感谢。