Comment montrer qu'un type dans un système avec des types dépendants n'est pas habité (ie formule non prouvable)?


15

Pour les systèmes sans types dépendants, comme le système de type Hindley-Milner, les types correspondent à des formules de logique intuitionniste. Là, nous savons que ses modèles sont des algèbres de Heyting, et en particulier, pour réfuter une formule, nous pouvons nous limiter à une algèbre de Heyting où chaque formule est représentée par un sous-ensemble ouvert de .R

Par exemple, si nous voulons montrer que n'est pas habité, nous construisons un mappage partir de formules pour ouvrir des sous-ensembles de en définissant: \ begin {align} \ phi (\ alpha) & = (- \ infty, 0) \ end {align} Ensuite \ begin {align} \ phi (\ alpha \ rightarrow \ bot) & = \ mbox {int} ([ 0, \ infty)) \\ & = (0, \ infty) \\ \ phi (\ alpha \ lor (\ alpha \ rightarrow \ bot)) & = (- \ infty, 0) \ cup (0, \ infty ) \\ & = \ mathbb {R} \ setminus {0}. \ end {align} Cela montre que la formule originale ne peut pas être prouvable, car nous avons un modèle où ce n'est pas vrai, ou de manière équivalente (par isomorphisme de Curry-Howard) le type ne peut pas être habité.ϕ R ϕ ( α )α.α(α)ϕRϕ ( α )

ϕ(α)=(-,0)
ϕ(α)=int([0,))=(0,)ϕ(α(α))=(-,0)(0,)=R0.

Une autre possibilité serait d'utiliser des trames Kriepke .


Existe-t-il des méthodes similaires pour les systèmes de types dépendants? Comme une généralisation des algèbres de Heyting ou des cadres Kripke?

Remarque: je ne demande pas de procédure de décision, je sais qu'il ne peut y en avoir. Je demande juste un mécanisme qui permette de constater l'improvisibilité d'une formule - pour convaincre quelqu'un qu'elle n'est pas prouvable.

Réponses:


13

Qu'une formule ne soit pas prouvable peut essentiellement se faire de deux manières. Avec un peu de chance, nous pourrons peut-être montrer dans la théorie des types que la formule implique une formule qui est déjà connue pour ne pas être prouvable. L'autre façon est de trouver un modèle dans lequel la formule n'est pas valide, et cela peut être assez difficile. Par exemple, il a fallu beaucoup de temps pour trouver le modèle groupoïde de la théorie des types dépendants, qui a été le premier à invalider l' unicité des preuves d'identité .

La question "qu'est-ce qu'un modèle de théorie des types dépendants?" a une réponse quelque peu compliquée. Si vous ignorez certaines propriétés de substitution, un modèle est une catégorie fermée localement cartésienne , et cela pourrait être la réponse la plus simple. Si vous voulez un "vrai" modèle, alors il y a plusieurs options, voir la page nLab sur les modèles catégoriels de la théorie des types dépendants . Dans tous les cas, la réponse est toujours un peu compliquée car la théorie des types dépendants est un système formel assez complexe.

Si je devais suggérer un seul article sur le sujet, je recommanderais probablement l'article original de Robert Seely, "Les catégories fermées localement cartésiennes et la théorie des types" . Si je devais en suggérer un autre, ce serait probablement celui qui expliquerait ce qui doit être corrigé dans l'article de Seely, par exemple, "Sur l'interprétation de la théorie des types dans les catégories fermées localement cartésiennes" de Martin Hoffman .

Une avancée importante récente dans ce domaine est la prise de conscience que les modèles théoriques de l'homotopie sont également des modèles de la théorie des types dépendants, voir les références homotopytypetheory.org . Cela offre une multitude de possibilités, mais il faut maintenant apprendre la théorie de l'homotopie pour mettre la main sur les modèles.


2
Cette réponse est plutôt sympa, même si elle ignore peut-être le moyen le plus simple de prouver qu'un type n'est pas habité: l'induction sur des formes normales! En particulier, il est facile de prouver que le milieu exclu ne peut pas être habité dans le calcul des constructions par une telle induction. Bien sûr, vous devez ensuite montrer que chaque terme peut être mis sous une forme normale du même type, et cela implique une construction de modèle ...
cody

@cody: bon point, les formes normales peuvent être très utiles.
Andrej Bauer

@cody: "vous devez ensuite montrer que chaque terme peut être mis dans une forme normale du même type": n'est-ce pas une partie standard de la métathéorie pour un "bon" système de type (tant que vous ne le faites pas ont des axiomes), ou une "bonne" logique (où il s'agit de l'élimination des coupures)? Vous pouvez donc simplement réutiliser la preuve existante, non?
Blaisorblade

@Blaisorblade: bien sûr, il vous suffit de prouver une fois l'élimination des coupures. Le point peut être que l'utilisation de l'induction sur des formes normales au lieu de constructions de modèles était un moyen de poser la question: vous construisez déjà un modèle pour montrer que chaque terme peut être mis sous une forme normale. Dans un certain sens, vous travaillez dans le "modèle de forme normale", plutôt que de faire un travail strictement syntaxique.
cody

Je vois - je pensais à «l'effort de preuve», alors que je suppose que vous raisonnez sur la façon dont la preuve entière est implémentée. Mais vous m'avez encore fait remettre en question la distinction entre approches syntaxiques et sémantiques, compte tenu de constructions telles que les modèles de termes. J'ai donc posé une question distincte à ce sujet: cstheory.stackexchange.com/q/21534/989
Blaisorblade
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.