Quelles fonctions le système F ne peut-il pas calculer?

28

Dans cet article de wikipedia sur l'exhaustivité de Turing, il déclare que:

Le calcul lambda non typé est Turing complet, mais de nombreux calculs lambda typés, y compris le système F, ne le sont pas. La valeur des systèmes dactylographiés est basée sur leur capacité à représenter la plupart des programmes informatiques typiques tout en détectant plus d'erreurs.

Quel est un exemple d'une fonction calculable totale non calculable par le système F ?

De plus, puisque hindley-milner est:

Une restriction du système F

à cause du fait que:

la vérification de type est indécidable pour une variante de style Curry du système F, c'est-à-dire qui manque d'annotations de frappe explicites.

Est-ce à dire que le calcul lambda sous-jacent aux systèmes de type hindley-milner n'est pas aussi complet?

Si cela est vrai, étant donné que haskell est clairement complet et que nous savons que sa base est le calcul lambda et le système de type hindley-milner, quelles fonctionnalités qui ne sont pas présentes dans le calcul lambda sont ajoutées afin de compléter la turing haskell?

Mike HR
la source
Un exemple de fonctionnalité qui rend Turing Haskell complet est l'interface de code natif.
Trismegistos
@cody merci pour votre commentaire. Je ne connais pas le système T. Ai-je raison de supposer que c'est le système T mentionné ici ? comment le système T se compare-t-il et contraste-t-il avec le système F?
Mike HR
REMARQUE, lors de la recherche sur Google, system T vs. system Fj'ai trouvé quelque chose qui répond à ma dernière sous -
Mike HR
1
Je pense que @Trismegistos soulève une question philosophique intéressante: qu'est-ce que Haskell exactement, où sont ses limites?
Martin Berger

Réponses:

45

FNNNX. X(XX)XNNHA2

TFeval:NNtFt. La preuve implique une variante de l'astuce de diagonalisation utilisée pour l'indécidabilité du problème d'arrêt. Andrej l'explique magnifiquement ici .

λF λ

YY

Notez qu'il existe d'autres fonctionnalités qui rendent Haskell Turing complet, mais elles ne sont généralement pas considérées comme faisant partie du langage de base, par exemple des références à des fonctions, des types de données illimités, etc.

cody
la source
1
Wow, c'est une réponse incroyable et répond parfaitement à tout. Merci!
Mike HR
"Comme pour tout langage de programmation total ..." Ce n'est pas tout à fait correct. Il y a quelques auto-interprètes pour toutes les langues qui fonctionnent en excluant les programmes non terminés comme mal typés, à ma connaissance. Voir cet article
jmite
@jmite comme indiqué, ma réclamation est correcte. Ce document est mentionné dans la discussion liée, et Andrej a quelques remarques de suivi sur son blog: math.andrej.com/2016/01/04/…
cody
11

Il est quelque peu trompeur de dire que le système de frappe de Haskell est "le système de type hinley-milner". Les types de Haskell sont beaucoup plus puissants, y compris, entre autres, les types de type supérieur. En effet, le système de frappe est si puissant que vous pouvez intégrer des langages de programmation complets de Turing dans le système de frappe, voir ici . Ce n'est pas la seule raison du pouvoir de Haskell, Cody en a mentionné d'autres.

Martin Berger
la source
Merci. ma principale exposition à hindley-milner a été par le biais de haskell, donc je suppose que j'ai pu supposer que les types de type supérieur en faisaient partie. Hindley-milner fait-il simplement référence à l'inférence de type (donc l'algorithme le plus probable W)? ou est-ce quelque chose de plus? Je comprends qu'il y a une base mathématique dans le calcul lambda, j'essaie juste de comprendre où les limites logiques entre le puissant système de type de haskell et ce que serait une mise en œuvre minimale d'un "système de type hindley-milner".
Mike HR du
NB Si quelqu'un s'intéresse à la puissance du système de type haskell, je recommanderais la vidéo d'Edward Kmett sur le hask , qui approfondit la théorie des catégories en utilisant le système de type haskell.
Mike HR
1
λW