2017-01-22 8 views

Répondre

2

Vous cherchez quelque chose comme ça?

Set Universe Polymorphism. 
Definition [email protected]{i} x := (x : [email protected]{i}). 
Check [email protected]{Set} nat. 

Notez que la définition doit être univers-polymorphique pour que cela fonctionne.

+0

En effet, merci. Fait intéressant, la même chose ne fonctionne pas avec les notations: 'Notation" type @ {i} ": = Type @ {i}. Fail Vérifiez le type @ {Set}. (* Erreur: univers Présence non déclarée: i *) '(probablement en raison de la transparence, comme' échec Vérifier le type @ {i} .' donne la même erreur) – jaam

+0

La façon de le faire est 'Set Universe Polymorphisme. Type de notation: = Type. Vérifiez le type @ {_}. 'Je ne suis pas sûr de ce que vous entendez par transparence. Notez que les variables dans les notations sont liées dans un espace de noms complètement séparé des univers. Vous pouvez faire une demande de fonctionnalité pour quelque chose comme 'i univers', comme dans 'notation "@ type {i}": = @ Type {i} (univers i) .' –

+0

' Set Universe Polymorphism.' a été préfixée à mon Exemple. 'Set Universe Polymorphisme. Type de notation: = Type. Vérifiez le type @ {_}. 'Donne' Erreur de syntaxe: [constr: universe_level] attendu après '@ {' (dans [instance]). 'Substituer la vérification w /' Vérifier le type @ {Set} .' Le type de notation ne peut pas avoir d'instance d'univers, sa tête développée ne commence pas par une référence. Par "transparence", je voulais dire un "dépliage abrupt" de "Type @ {i}". PS. Une définition suffit pour moi ici - juste mentionné que cela ne fonctionne pas w/notations. (J'utilise Coq 8.6.1) – jaam