Turing-kompletní

V informatice a logice se říká , že formální systém je úplný ve smyslu Turingova nebo Turingova-úplného (sledováním anglického Turingova-úplného ), pokud má expresivní sílu přinejmenším rovnocennou s výkonem Turingových strojů . V takovém systému je proto možné naprogramovat jakýkoli Turingův stroj.

Tato představa je relevantní z církevní teze , která předpokládá existenci přirozené představy o vypočítatelnosti. Expresivní síla Turingových strojů se tedy shoduje s expresivní silou rekurzivních funkcí , lambda kalkulu nebo dokonce počítacích strojů .

Ačkoli jsou určité modely výpočtu, nazývané hyperpočítače , přísněji expresivnější než Turingovy stroje, jsou tyto modely spekulací (vyžadujících například provádět nekonečný počet operací nebo počítat na množině čísel. Skutečné) a to není známo, zda jsou fyzicky proveditelné. Za těchto podmínek Churchova teze předpokládá univerzálnost výpočetního modelu Turingova stroje: jakýkoli systém Turing-Complete by byl ve skutečnosti ekvivalentem Turingových strojů.

Turing-kompletní programovací jazyky

Stejně jako výpočetní model se říká , že počítačový jazyk je Turingův úplný, pokud umožňuje reprezentovat všechny vypočítatelné funkce ve smyslu Turinga a Církve (bez ohledu na konečnost počítačové paměti).

Někteří autoři berou tuto vlastnost pro definici programovacího jazyka , ale lze zvolit i jiné definice.

Obvyklé programovací jazyky ( C , Java …) jsou Turingovy úplné, protože obsahují všechny ingredience nezbytné pro simulaci univerzálního Turingova stroje (počítat, porovnávat, číst, psát atd.). Jazyk C ++ je také Turingův úplný a podmnožina umožňující generické programování ( šablony ) je také .

Jazyk SQL , původně neúplný v Turingově smyslu, se stal standardem SQL: 1999, který mu umožňoval psát rekurzivní dotazy .

Jazyk LaTeX (od TeXu ), určený pro skládání dokumentů, je také Turing-complete.

Samotný jazyk HTML není Turingův úplný, bylo však prokázáno, že jazyk CSS (ve verzi 3) umožňuje stavět základní buněčný automat kódu 110 (viz pravidlo 110  (en) ), o kterém se ví, že je univerzální. smysl pro Turing. Tyto dva jazyky jsou často neoddělitelné, můžeme dojít k závěru, že HTML + CSS je Turing-complete, a toto spojení proto z něj teoreticky dělá programovací jazyk.

Jazyk Turing-Complete zdědil vlastnosti stroje Turing. Například problém s vypínáním je nerozhodnutelný , takže je nemožné napsat program, který říká, zda libovolný program, který mu byl udělen, končí nebo ne.

Jazyky, které nejsou Turingovy úplné

Některé jazyky určené k řešení konkrétních problémů nejsou Turingovy úplnosti. Příkladem je systém F , lambda kalkulus. Turing-complete navíc - podle návrhu - nejsou ani jazyky Total  (en) , kde všechny výpočty nutně končí (jako jazyk Gallina asistentky Coq proof ). Ty druhé jsou však v praxi schopné vypočítat vše, co nás zajímá, jinými slovy, mohou implementovat všechny funkce, které bychom v praktickém životě mohli potřebovat; výpočty, které jim uniknou, mají buď složitost za hranicí představitelnosti a realizovatelnosti, nebo nekončí. Kompilace pak musí demonstrovat ukončení programů nebo vyžadovat interakci s programátorem pro některé ukázky, ale toto je cena za kvalitu kódu, která je správná z hlediska konstrukce.

Příklady mimo programovací jazyky

Některé hry a software jsou Turing-Complete náhodou, aniž by to jejich autoři chtěli nebo zvážili:

Související články

Poznámky a odkazy

Poznámky

  1. Počítač má omezenou paměť, Turingův model stroje má neomezenou paměť.

Reference

  1. Translation Bureau , záznam databáze TERMIUM Plus , na termiumplus.gc.ca ,2. února 2017(zpřístupněno 23. května 2019 )
  2. (in) John C. Mitchell, Concepts in Programming Languages , Cambridge University Press ,2003( číst online ) , s.  14 :

    „  Skutečnost, že všechny standardní programovací jazyky přesně vyjadřují třídu částečných rekurzivních funkcí, je často shrnuta tvrzením, že všechny programovací jazyky jsou Turingovy úplné.  "

  3. (in) Bruce J. MacLennan, Principles of Programming Languages , Oxford University Press ,1999, Úvod: Co je programovací jazyk? :

    „  Programovací jazyk je jazyk, který je určen k vyjádření počítačových programů a je schopen vyjádřit jakýkoli počítačový program. To není vágní představa. Existuje přesný teoretický způsob, jak určit, zda lze počítačový jazyk použít k vyjádření jakéhokoli programu, konkrétně tím, že se ukáže, že je ekvivalentní univerzálnímu Turingovu stroji.  "

  4. (in) „  Nejsou Turing-Complete jazyky vůbec považovány za programovací jazyky?  » , Na výměně zásobníku Na položenou otázku se vybraná odpověď domnívá, že Turingova úplnost není nutná, aby se jazyk považoval za programovací jazyk.
  5. Příklad implementace Turingova stroje v C: (en) Juan Pablo Rinaldi (juampi), „  Implementace Turingova stroje v C  “ , na GitHubu ,13. ledna 2014(zpřístupněno 21. května 2019 ) .
  6. „  LaTeX je výkonnější, než si myslíte - výpočet čísel Fibonacci a úplnost Turinga - ShareLaTeX, online editor LaTeX  “ , na fr.sharelatex.com (přístup 2. června 2017 ) .
  7. (in) Eli & Jonas, „  CSS3 se ukázal jako„ Turing complete “  “ v Accodeing to you (přístup 17. května 2019 ) .
  8. „  O důležitosti Turingovy úplnosti  “ na Lambda the Ultimate  (in) .
  9. Benjamin Werner, „  Soupravy v typech, Typy v sadách  “, Sborník TACS'97 ,1997.
  10. „Člověk používá nejobtížnější počítačovou hru na světě k vytvoření… fungujícího Turingova stroje“ ( internetový archiv verze 27. června 2015 ) , na adrese www.themarysue.com ,16. dubna 2010.
  11. Paul Rendell , „Turingův stroj ve hře Conwayovy hry o život“ ( Internet Archive verze 8. července 2009 ) , na adrese rendell-attic.org ,12. ledna 2005.
  12. (in) Alex Churchill , „Magic: The Gathering is Turing úplnost“ (verze ze 7. května 2019 v internetovém archivu ) , Cornell University ,23. dubna 2019.
  13. (in) Gunivers, „  Data Pack - Universal Turing Machine  “ , na YouTube ,17. července 2019(zpřístupněno 6. května 2020 ) .
  14. (in) Tom Wildenhain, „  O Turingově úplnosti MS PowerPoint  “ na https://www.andrew.cmu.edu/user/twildenh/ ,16. března 2017(zpřístupněno 10. července 2020 )
  15. (in) Habbo (@Habbo), „  Víme, že jsou talentovaní Někteří Habbosové mají za cíl, že by si tenhle mohl vzít dort! Jeden z našich hráčů @sirjonasxx přijal výzvu vytvořit ve hře fungující stroj Turing a uspěli! Pojďme to zkontrolovat.  » , Na Twitteru ,9. listopadu 2020(zpřístupněno 30. listopadu 2020 )

Dodatky

Související články