Je pensais avoir bien compris la saisie dépendante (DT), mais la réponse à cette question: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-intuitionistic-type-theory m'a fait penser le contraire.
Après avoir lu sur DT et essayé de comprendre ce qu'ils sont, j'essaie de me demander, que gagnons-nous à cette notion de DT? Ils semblent être plus flexibles et plus puissants que le calcul lambda simplement tapé (STLC), bien que je ne puisse pas comprendre exactement "comment / pourquoi".
Que pouvons-nous faire avec les DT qui ne peuvent pas être réalisés avec STLC? On dirait que l'ajout de DT rend la théorie plus compliquée, mais quel est l'avantage?
De la réponse à la question ci-dessus:
Les types dépendants ont été proposés par de Bruijn et Howard qui voulaient étendre la correspondance Curry-Howard de la logique propositionnelle au premier ordre.
Cela semble logique à un certain niveau, mais je ne parviens toujours pas à saisir la vue d'ensemble du «comment / pourquoi»? Peut-être qu'un exemple montre explicitement que cette extension de la correspondance CH à la logique FO pourrait aider à comprendre le problème avec les DT? Je ne suis pas sûr de comprendre cela aussi bien que je le devrais.
la source
Réponses:
Élargir mon commentaire: les types dépendants peuvent taper plus de programmes. "Plus" signifie simplement que l'ensemble des programmes typables avec des types dépendants est un surensemble approprié des programmes typables dans le -calculus simplement-typé (STLC). Un exemple serait , les listes de longueur , portant des éléments de type . L'expression est à la fois un programme et une partie d'un type. Vous ne pouvez pas le faire dans le STLC.L i s t 2 ∗ 3 + 4 ( α ) 10 α 2 ∗ 3 + 4λ List2∗3+4(α) 10 α 2∗3+4
La règle clé qui distingue les types dépendants des types non dépendants est l'application:
Sur la gauche, vous avez le STLC, où les programmes dans les locaux ne «coulent» que dans le programme de la conclusion. En revanche, dans la règle d'application dépendante à droite, le programme de la prémisse de droite «coule» dans le type dans la conclusion .N 1
Afin de pouvoir paramétrer les types par des programmes, la syntaxe des types dépendants doit être plus riche, et pour s'assurer que les types sont bien formés, nous utilisons un deuxième «système de typage» appelé types qui contraint les types. Ce système de tri est essentiellement le STLC, mais "un niveau supérieur".
Il existe de nombreuses explications sur les types dépendants. Quelques exemples.
la source
Considérez les déclarations de type comme rien de plus que des assertions. Actuellement, tout ce que vous pouvez dire est des choses comme isInt32 (), isCharPtr (), etc. Ces différentes assertions sont choisies pour être vérifiables au moment de la compilation. Mais ce concept peut être étendu à des choses comme: isCharPtr () && isNotNull (). Les pointeurs nulles sont un énorme problème. Les pointeurs ne doivent pas être annulables comme position par défaut, les pointeurs annulables étant un type qui n'est pas déréférençable sans savoir s'il est nul ou non. Des problèmes similaires sont des choses comme: isPositiveInteger (), ou isEvenNaturalNumber ().
la source