2016-05-22 5 views
3

Ich habe Probleme, einen Parameter an einen Produkttyp in Coq übergeben. Ich habe eine Definition, wie,Produkttyp in Coq

Definition bar (a:Type) := a->Type. 

ich eine Funktion definieren müssen sieht, die in ‚a‘ und das Ding gemacht von ‚bar‘ und gibt ihr Produkt/geordnetes Paar nimmt. Also habe ich folgendes versucht.

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

Was mich den Fehler

Der Begriff „b“ gibt hat Typ „Bar ein“, während erwartet wird, Typ „Typ“ haben.

, was wirklich hier verwirrend ist, dass diese,

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

funktioniert gut. Offensichtlich hat "bar a" den Typ "Type", daher weiß ich nicht, wie ich meine ursprüngliche Definition korrigieren soll. Ich vermute, ich übergebe Variablen nicht richtig.

Antwort

3

Um einen Fehler zu sehen, erweitert bar a in Ihrer foo Definition:

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

Nun sollte es klar sein, dass b kein Typ ist, ist es eine Funktion a-Type.

Und wie Sie nie ein Objekt vom Typ a erhalten, können Sie nicht b auf alles anwenden, und kann keine Type von ihm erhalten.

Für die zweite Definition, erweitern Sie wieder zu sehen, warum es funktioniert:

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

Beide a und a->Type gelten Type ‚s für ein Produkt.

+0

Ich sehe. Vielen Dank. – aaron