2017-06-26 4 views
2

Je transcris en Coq les définitions (informelles) du 2008 PHOAS paper, section 2.1.PHOAS dans Coq: incompatibilité de type

Inductive tm' {V : Set} : Set := 
| Var : V -> tm' 
| App : tm' -> tm' -> tm' 
| Abs : (V -> tm') -> tm'. 

Definition tm := forall X, @tm' X. 

Fail Example id : tm := Abs Var. 

Sortie:

The term "Abs Var" has type "tm'" while it is expected to have type "tm". 

C'est plutôt désagréable. Comment puis-je faire ce type de code-vérifier?

Répondre

2

Voici le code qui fonctionne:

Example id : tm := fun _ => Abs Var. 

Le problème est que vous essayez de construire une fonction (quelque chose du type forall) sans lambda (fun).

0
Example id : tm := fun (X : Set) => Abs Var. 
+0

Veuillez utiliser le lien modifier de votre question pour ajouter des informations supplémentaires. Le bouton Post-réponse ne doit être utilisé que pour les réponses complètes à la question. - [De l'examen] (/ review/low-quality-posts/16533671) –

+1

Comme vous pouvez le voir sur la réponse de Jason Gross, c'est en effet une réponse complète. –