Turing-complet

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Turing.

En informatique ou en logique, un système Turing-complet[note 1] est un système formel ayant une puissance de calcul au moins équivalente à celle des machines de Turing. Dans un tel système, il est possible de programmer n'importe quelle machine de Turing, mais également tout ce que l'on peut programmer dans une machine de Turing. Si de plus ce système peut être codé par celui des machines de Turing, on dit qu'il est équivalent aux machines de Turing.

Cas des langages de programmation[modifier | modifier le code]

Ainsi un langage informatique est dit Turing-complet s'il permet de représenter toutes les fonctions calculables au sens de Turing et Church (nonobstant la finitude de la mémoire des ordinateurs).

Certains auteurs prennent cette propriété pour définition d’un langage de programmation[1],[2], mais d'autres définitions peuvent être choisies[3].

Les langages de programmation usuels (C, Java, Python…) sont Turing-complets. Le langage TeX, dédié à la composition de documents, est également Turing-complet[4]. En revanche, ce n'est pas le cas de certains langages dédiés au traitement de problèmes spécifiques (comme le langage SQL qui n'est devenu complet qu'à partir de 1999 quand il a été possible d'écrire des requêtes récursives), ni — par conception — des langages totaux (en) où tous les calculs terminent nécessairement (comme le langage de l'assistant de preuve Coq). Cependant, ces derniers sont en pratique capables de calculer tout ce qui est intéressant[évasif][5],[6]. La compilation doit alors prouver la terminaison des programmes et peut donc devenir longue, ou nécessiter un apport du programmeur pour certaines démonstrations.

Un langage Turing-complet hérite des caractéristiques d'une machine de Turing. Par exemple, le problème de l'arrêt est indécidable, donc il est impossible de montrer automatiquement pour un programme écrit dans le langage qu'il se termine systématiquement.

Notes et références[modifier | modifier le code]

Notes[modifier | modifier le code]

  1. En toute rigueur on devrait dire complet au sens de Turing, mais c'est la traduction littérale (et le calque syntaxique aussi) de l'expression anglo-saxonne Turing complete qui a prévalu.

Références[modifier | modifier le code]

  1. (en) John C. Mitchell ,Concepts in programming languages, Cambridge University Press, 2003, p.14 [1] «The fact that all standard programming languages express precisely the class of partial recursive functions is often summarized by the statement that all programming languages are Turing complete.»
  2. (en) Bruce J.MacLennan, Principles of Programming Languages, Introduction : What is a programming language?, Oxford University Press, 1999. «A programming language is a language that is intended for the expression of computer programs and that is capable of expressing any computer program. This is not a vague notion. There is a precise theorical way of determining whether a computer language can be used to express any program, namely, by showing that is equivalent to a universal Turing machine.»
  3. « Are non Turing-complete languages considered programming languages at all? », sur http://programmers.stackexchange.com
    exemple de la question posée sur un forum de question/réponse sur l’informatique populaire, une réponse sélectionnée considère que la Turing Complétude n’est pas requise pour considérer un langage comme langage de programmation
  4. Latex is more powerfull than you think, Post du blog ScribTex avec démonstrations, preuves et sources complémentaires
  5. « On the importance of Turing completeness », sur Lambda the Ultimate (en)
  6. Benjamin Werner, « Sets in Types, Types in Sets », Proceedings of TACS'97,‎

Annexes[modifier | modifier le code]

Articles connexes[modifier | modifier le code]