Quelles sont les limites de la programmation fonctionnelle totale? Il n'est pas complet de Turing, mais prend toujours en charge un large sous-ensemble des programmes possibles. Y a-t-il des constructions importantes que vous pourriez écrire dans un langage complet de Turing, mais pas dans un langage fonctionnel total?
Et est-il exact de dire que les programmes écrits dans des langages fonctionnels totaux peuvent être complètement analysés statiquement, alors que l'analyse statique dans les langages Turing-complets est limitée par des choses comme le problème d'arrêt? Cela ne veut pas dire que dans les langages fonctionnels totaux, tout peut être déterminé statiquement, car certaines choses ne sont connues qu'au moment de l'exécution, mais je veux dire qu'en théorie, les programmes écrits dans un langage de programmation fonctionnel total idéal peuvent être analysés afin que tout ce qui pourrait en théorie être déterminé statiquement peut être déterminé statiquement. Ou y a-t-il encore des problèmes indécidables hérités dans les langages fonctionnels totaux qui rendent l'analyse statique incomplète? Certains problèmes seront toujours indécidables, quelle que soit la langue dans laquelle ils sont écrits, mais je suis intéressé par les problèmes hérités de la langue,
la source
X
, est-ce(identity X)
qu'une machine de Turing s'arrête?" Bien sûr, cela ne semble pas concerneridentity
, mais comment définissez-vous «à propos»?Le revers de la médaille, cependant, est que les limites du pouvoir expressif des langues totales sont essentiellement les limites du pouvoir expressif des mathématiques elles-mêmes . Par exemple, les fonctions définissables dans Coq (un assistant de preuve) sont celles qui peuvent être prouvées comme étant calculables en utilisant ZFC, avec un nombre innombrable de cardinaux inaccessibles. Donc, pratiquement n'importe quelle fonction que vous pourriez prouver totale à la satisfaction d'un mathématicien qui travaille est définissable dans Coq.
Le revers de la médaille est que les mathématiques sont difficiles! Il n'y a donc pas de sens facile dans lequel le total des langues est "complètement analysable" - même si vous savez qu'une fonction se termine, vous devrez peut-être encore faire beaucoup de travail créatif pour prouver qu'elle a la propriété que vous voulez. Par exemple, le simple fait de savoir qu'une fonction de listes en listes est totale ne vous permet pas de prouver qu'il s'agit d'une fonction de tri ...
la source