Classification des calculs lambda typés / non typés

18

Quelqu'un peut-il expliquer brièvement (si c'est possible!) Ou me renvoyer à une référence, résumant les différences entre le calcul lambda non typé et les calculs lambda typés plus courants?

Je recherche en particulier des énoncés de leur puissance expressive, des équivalences avec des systèmes logiques / arithmétiques ou des méthodes de calcul, et des analogies avec les langages de programmation, le cas échéant.

Bien que j'aie certainement l'intention de lire, quelque chose comme un tableau de référence décrivant les calculs et leurs équivalences / différences / place dans la hiérarchie serait une référence ÉNORME pour m'aider à les trier.

Ne pas dire que ce qui suit est correct, juste essayer d'esquisser ensemble certaines des impressions que je dois voir si elles servent au moins de point de départ (ou quelque chose à corriger!)

Calcul lambda non typé - éq. à la logique du premier ordre - ne peut pas faire X

Calcul lambda simplement tapé - égal à ... logique, lié à Lisp?

Calc lambda 'polymorphe' - etc.

Calcul des constructions - logique intutionniste?

Logique combinatoire - comparable à ??? calcul lambda typé, lié aux types de langages APL / J

Si cela rejoint le cube lambda et ses trois axes, tant mieux.

Bien que je sois familier avec les bases du calcul lambda et de la programmation avec des langages fonctionnels, je n'ai jamais tourné la tête ou établi de liens significatifs avec les systèmes de types impliqués et les différentes saveurs des calculs lambda (et peut-être pi?).

Lorsque j'essaie de rechercher cela, je ne peux pas aider, mais je me retrouve distrait, ouvrant de nombreux onglets de navigateur et se ramifiant dans tant de directions que je n'entre jamais dans aucun d'entre eux avec une profondeur!

Je ne sais pas si ce que je demande est raisonnable, mais j'espère au moins avoir suffisamment peint une image pour suggérer une lecture qui peut expliquer ce que je cherche?

jon_darkstar
la source
1
une visualisation du cube lambda, si peut-être y faire référence peut aider à l'explication rbjones.com/rbjpub/logic/cl/tlc001.htm
jon_darkstar
3
Une histoire personnelle: quand j'ai appris pour la première fois le calcul lambda typé et non typé, j'étais toujours confus par la raison pour laquelle je devais me soucier des calculs complets non Turing typés. Cela m'a souvent fait perdre tout intérêt. D'un autre côté, cela ne m'a jamais dérangé en pensant à la complexité et au calcul efficace. Finalement, quelqu'un a connecté les deux volets pour moi dans cette réponse et maintenant je peux mieux comprendre pourquoi tant de temps a été passé à m'apprendre le calcul lambda tapé.
Artem Kaznatcheev
je vois un lo.logictag a été ajouté. probablement une question stupide, mais qu'est-ce que cela signifie exactement?
jon_darkstar
"Quand j'essaie de rechercher cela, je ne peux pas aider mais je me retrouve dérouté, ouvrant de nombreux onglets de navigateur et se ramifiant dans tellement de directions que je n'entre jamais dans aucun d'entre eux avec une profondeur!" <- C'est moi, tout le temps! Merci d'avoir demandé ce à quoi je pensais ...
agam

Réponses:

26

Votre table est un peu confuse; en voici une meilleure.

  • Calcul lambda non typé - pas d'interprétation logique, comme le note Andrej
  • Calcul lambda simplement tapé - logique propositionnelle intuitionniste
  • Calcul lambda polymorphe - logique pure du second ordre (c'est-à-dire sans quantificateurs du premier ordre)
  • Types dépendants - généralisation de la logique du premier ordre
  • Calcul des constructions - généralisation de la logique d'ordre supérieur

La dépendance de type est plus générale que la quantification de premier ordre, car elle transforme les preuves en objets sur lesquels vous pouvez quantifier. Il existe des calculs lambda correspondant aux FOL intuitionnistes ordinaires, mais ils ne sont pas assez largement utilisés pour avoir un nom spécial - les gens ont tendance à aller directement aux types dépendants.

Vous pouvez également associer la forme syntaxique d'un calcul à des systèmes logiques.

  • Calculs de combinateurs (par exemple, combinateurs SKI) - systèmes de style Hilbert
  • Forme A-normale - calcul séquentiel
  • Calcul lambda typé ordinaire - déduction naturelle
Neel Krishnaswami
la source
fantastique! Merci. m'aide à réaliser la motivation / distinction pour ces différents calculs, et m'aidera certainement à garder une compréhension de base lorsque
j'en
Je voudrais également inclure des calculs lambda typés sans interprétation logique, tels que PCF. En outre, il existe de nombreux lambda-calculs sympas qui correspondent à d'autres logiques, comme le calcul lambda linéaire.
Sam Tobin-Hochstadt
@Sam: Bon point. "Aucune interprétation logique" est vraiment trop fort, car cela signifie vraiment "autoréférence illimitée autorisée", ce qui, combiné à une réutilisation variable, conduit à une incohérence. Mais certaines théories établies basées sur une logique linéaire prennent en charge des schémas de compréhension naïfs sans aucune incohérence.
Neel Krishnaswami
certainement, de certaines façons, vous pouvez ajouter des choses au calcul lambda sans être incohérent. Mais il existe de nombreux calculs lambda intéressants, typés, sans interprétation logique au sens exact du calcul lambda non typé.
Sam Tobin-Hochstadt
20

λλλnatλ0T . Il calcule uniquement les fonctions récursives primitives (et elles sont toutes totales).

λλ

λλ

λλλUlambda : U -> (U -> U)gamma : (U -> U) -> UλUλC(si ma mémoire est bonne, c'est la division idempotente de ), telle que laUU[Cop,Set]UUU

Les références:

Andrej Bauer
la source