C'est une illusion que les règles de calcul "définissent" ou "construisent" les objets dont elles parlent. Vous avez correctement observé que l'équation pour ne la "définit" pas, mais vous n'avez pas observé que la même chose est également vraie dans d'autres cas. Considérons le principe d'induction pour l'unité de type 1 , qui semble particulièrement évidemment "déterminé". Selon la section 1.5 du livre HoTT, nous avons
i n d 1 : ∏ C : 1 → T y p e C ( ⋆ ) → ∏ x : 1 Pind=A1
avec l'équation
i n d 1 ( C , c , ⋆ ) = c .
Est-ce que cela "définit" ou "construit" i n d 1 dans le sens où il ne laisse aucun doute sur ce que i n d 1 "fait"? Par exemple, posons C ( x ) = N et a = 42 , et considérons ce que nous pourrions dire sur
i n d 1 ( C , 42 ,
ind1:∏C:1→TypeC(⋆)→∏x:1P(x)
ind1(C,c,⋆)=c.
ind1ind1C(x)=Na=42
pour une expression
e donnéede type
1 . Votre première pensée pourrait être que nous pouvons réduire cela à
42 car "
⋆ est le seul élément de
1 ". Mais pour être tout à fait précis, l'équation pour
i n d 1 n'est applicable que si nous montrons
e ≡ ⋆ , ce qui est impossible lorsque
e est une variable, par exemple. Nous pouvons essayer de sortir de cela et dire que nous ne sommes intéressés que par le calcul avec des termes fermés, donc
e devrait être fermé.
ind1(C,42,e)
e142⋆1ind1e≡⋆ee
N'est-il pas vrai que chaque terme fermé de type 1 est égal au jugement à ⋆ ? Cela dépend en fait de détails désagréables et de preuves compliquées de normalisation. Dans le cas de HoTT, la réponse est "non" car e pourrait contenir des instances de l'Axiome Univalence, et on ne sait pas quoi faire à ce sujet (c'est le problème ouvert dans HoTT).e1⋆e
Nous pouvons contourner le problème avec univalance en considérant une version de la théorie de type qui ne possède de bonnes propriétés de sorte que chaque terme fermé de type est égal à judgmentally ⋆ . Dans ce cas , il est juste de dire que nous ne savons comment calculer avec i n d 1 , mais:1⋆ind1
Il en va de même pour le type d'identité, car chaque terme fermé d'un type d'identité sera, de manière jugée, égal à quelque , et donc l'équation pour i n d = A nous dira comment calculer.refl(a)ind=A
Tout simplement parce que nous savons calculer avec des termes fermés d'un type, cela ne signifie pas que nous ayons réellement défini quoi que ce soit parce qu'il y a plus dans un type que ses termes fermés , comme j'ai essayé de l'expliquer une fois.
Par exemple, la théorie des types de Martin-Löf (sans les types d'identité) peut être interprétée théoriquement par le domaine de telle manière que contient deux éléments ⊥ et ⊤ , où ⊤ correspond à ⋆ et ⊥ à la non-terminaison. Hélas, puisqu'il n'y a aucun moyen d'écrire une expression non terminale dans la théorie des types, ⊥ ne peut pas être nommé. Par conséquent, l'équation pour i n d 1 ne pas nous dire comment calculer le ⊥ (les deux choix évidents étant « avec impatience » et « paresseuse »).1⊥⊤⊤⋆⊥⊥ind1⊥
En termes de génie logiciel, je dirais que nous avons une confusion entre la spécification et la mise en œuvre . Les axiomes HoTT pour les types d'identité sont une spécification . L'équation ne nous dit pas comment calculer avec ou comment construire i n d = C , mais plutôt que cependant je nind=C(C,c,x,x,refl(x))≡c(x)ind=C est "implémenté", nous exigeons qu'il satisfasse l'équation. Il s'agit d'une question distincte de savoir si un tel i n d = C peut être obtenu de manière constructive.ind=Cind=C
Enfin, je suis un peu las de la façon dont vous utilisez le mot «constructif». Il semble que vous pensiez que "constructif" est le même que "défini". Selon cette interprétation, l'oracle Halting est constructif, car son comportement est défini par l'exigence que nous lui imposons (à savoir qu'il génère 1 ou 0 selon que la machine donnée s'arrête). Il est parfaitement possible de décrire des objets qui n'existent que dans un cadre non constructif. Inversement, il est parfaitement possible de parler de manière constructive de propriétés et d'autres choses qui ne peuvent pas réellement être calculées. En voici une: la relation définie par
H ( n , d )H⊆N×{0,1}
est constructif, c'est-à-dire qu'il n'y a rien de mal à cette définition d'un point de vue constructif. Il se trouve que constructivement on ne peut pas montrer que H est une relation totale, et sa carte caractéristique χ H : N × { 0 , 1 } → P r o p ne factorise pas par b o o l
H(n,d)⟺(d=1⇒n-th machine halts)∧(d=0⇒n-th machine diverges)
HχH:N×{0,1}→Propbool, nous ne pouvons donc pas "calculer" ses valeurs.
Addendum: Le titre de votre question est "L'induction de chemin est-elle constructive?" Après avoir éclairci la différence entre "constructif" et "défini", nous pouvons répondre à la question. Oui, l'induction de chemin est connue pour être constructive dans certains cas:
Si nous nous limitons à la théorie des types sans Univalence afin de pouvoir montrer une forte normalisation, alors l'induction de chemin et tout le reste est constructif car il existe des algorithmes qui effectuent la procédure de normalisation.
Il existe des modèles de réalisabilité de la théorie des types, qui expliquent comment chaque terme fermé de la théorie des types correspond à une machine de Turing. Cependant, ces modèles satisfont l'Axiom K de Streicher, ce qui exclut l'Univalence.
Il y a une traduction de la théorie des types (là encore sans univalence) en théorie des ensembles constructifs CZF. Encore une fois, cela valide l'axiome K. de Streicher
Il existe un modèle groupoïde à l'intérieur des modèles de réalisabilité qui nous permet d'interpréter la théorie des types sans le K. de Streicher. Il s'agit d'un travail préliminaire de Steve Awodey et de moi-même.
Nous devons vraiment trier le statut constructif de l'Univalence.