Turing-komplett

I informatikk og logikk sies et formelt system å være komplett i betydningen Turing eller Turing-complete (etter lag av engelsk Turing-complete ) hvis det har en uttrykkskraft som minst tilsvarer den for Turing-maskiner . I et slikt system er det derfor mulig å programmere hvilken som helst Turing-maskin.

Denne forestillingen blir gjort relevant av Kirkens avhandling , som postulerer eksistensen av en naturlig forestilling om beregbarhet. Dermed sammenfaller den uttrykksfulle kraften til Turing-maskiner med den for rekursive funksjoner , lambdakalkulator eller til og med tellemaskiner .

Selv om visse beregningsmodeller, kalt hyperkomputere , er strengere uttrykksfulle enn Turing-maskiner, er disse modellene gjenstander for spekulasjoner (som for eksempel krever å utføre et uendelig antall operasjoner, eller å beregne på tallsettet. Reell ), og det er ikke kjent om de er fysisk gjennomførbare. Under disse forholdene antar Kirkens avhandling universaliteten til beregningsmodellen for Turing-maskinen: ethvert Turing-komplett system ville faktisk være ekvivalent med Turing-maskiner.

Turing-komplette programmeringsspråk

I likhet med en beregningsmodell sies det at et dataspråk er Turing-komplett hvis det tillater at alle beregningsfunksjoner blir representert i betydningen Turing og Church (til tross for endeligheten i dataminnet).

Noen forfattere tar denne egenskapen for definisjonen av et programmeringsspråk , men andre definisjoner kan velges.

De vanlige programmeringsspråkene ( C , Java ...) er Turing-komplette fordi de har alle ingrediensene som er nødvendige for simulering av en universell Turing-maskin (tell, sammenlign, les, skriv osv.). C ++ -språket er også Turing-komplett, og delsettet som tillater generell programmering ( maler ) er også .

SQL- språket , opprinnelig ufullstendig i Turings forstand, ble slik med SQL: 1999-standarden slik at det kunne skrive rekursive spørsmål .

LaTeX- språket (fra TeX ), ment for dokumentkomposisjon, er også Turing-komplett.

HTML- språket alene er ikke Turing-komplett, men det er bevist at CSS- språket (i versjon 3) gjør det mulig å bygge den elementære mobilautomaten til kode 110 (se regel 110  (en) ), kjent for å være universell. følelse av Turing. Disse to språkene er ofte uatskillelige, vi kan konkludere med at HTML + CSS er Turing-komplett, og denne tilknytningen gjør det derfor teoretisk til et programmeringsspråk.

Et Turing-komplett språk arver egenskapene til en Turing-maskin. For eksempel avslutningsproblemet er undecidable , så det er umulig å skrive et program som sier om et vilkårlig program gitt til det ender eller ikke.

Språk som ikke er Turing-komplette

Noen språk dedikert til å håndtere spesifikke problemer er ikke Turing-komplette. System F , en lambda calculus formalisme er et eksempel. Dessuten - etter design - er totale språk  (en) , der alle beregninger nødvendigvis slutter (som Gallina- språket til Coq- bevis assistent ), heller ikke Turing-komplette. Imidlertid er sistnevnte i praksis i stand til å beregne alt som er av interesse, med andre ord de kan implementere alle funksjonene vi måtte trenge i det praktiske livet; beregningene som unnslipper dem, har enten en kompleksitet utover det man kan tenke seg og det som kan realiseres, eller slutter ikke. Sammensetningen må da demonstrere avslutningen av programmene, eller kreve interaksjon med programmereren for noen demonstrasjoner, men dette er prisen å betale for kodekvalitet som er riktig ved konstruksjon.

Eksempler utenfor programmeringsspråk

Noen spill og programvare er Turing-komplette ved et uhell, uten at forfatterne deres ønsker eller vurderer det:

Relaterte artikler

Merknader og referanser

Merknader

  1. En datamaskin har begrenset minne, Turings maskinmodell har ubegrenset minne.

Referanser

  1. Oversettelsesbyrå , TERMIUM Plus-databaseregistrering , på termiumplus.gc.ca ,2. februar 2017(åpnet 23. mai 2019 )
  2. (in) John C. Mitchell, Concepts in Programming Languages , Cambridge University Press ,2003( les online ) , s.  14 :

    Det faktum at alle standard programmeringsspråk uttrykker nøyaktig klassen av delvis rekursive funksjoner, blir ofte oppsummert av utsagnet om at alle programmeringsspråk er fullstendig Turing.  "

  3. (in) Bruce J. MacLennan, prinsipper for programmeringsspråk , Oxford University Press ,1999, Innledning: Hva er et programmeringsspråk? :

    “  Et programmeringsspråk er et språk som er ment for uttrykk for dataprogrammer og som er i stand til å uttrykke ethvert dataprogram. Dette er ikke en vag forestilling. Det er en presis teoretisk måte å bestemme om et dataspråk kan brukes til å uttrykke et hvilket som helst program, nemlig ved å vise at det tilsvarer en universell Turing-maskin.  "

  4. (in) "  Regnes ikke Turing-komplette språk i det hele tatt som programmeringsspråk?  » , On Stack Exchange På det stilte spørsmålet vurderer et valgt svar at Turing-fullstendighet ikke er nødvendig for å betrakte et språk som et programmeringsspråk.
  5. Eksempel på implementering av en Turing Machine i C: (en) Juan Pablo Rinaldi (juampi), "  En implementering av en Turing Machine i C  " , på GitHub ,13. januar 2014(åpnet 21. mai 2019 ) .
  6. "  LaTeX er mer kraftfull enn du tror - å beregne Fibonacci-tallene og fullføre Turing - ShareLaTeX, Online LaTeX Editor  " , på fr.sharelatex.com (åpnet 2. juni 2017 ) .
  7. (in) Eli & Jonas, "  CSS3 bevist å være" Turing komplett "  "Accodinging to you (åpnet 17. mai 2019 ) .
  8. "  Om viktigheten av Turing-fullstendighet  "Lambda the Ultimate  (in) .
  9. Benjamin Werner, “  Sett i typer, typer i sett  ”, Proceedings of TACS'97 ,1997.
  10. "Man bruker verdens vanskeligste dataspill for å lage ... en fungerende turingmaskin" ( Internet Archive versjon 27. juni 2015 ) , på www.themarysue.com ,16. april 2010.
  11. Paul Rendell , "A Turing Machine in Conway's Game of Life" ( Internet Archive versjon 8. juli 2009 ) , på rendell-attic.org ,12. januar 2005.
  12. (i) Alex Churchill , "Magic: The Gathering is Turing completeeness" (versjon datert 7. mai 2019 på internettarkivet ) , fra Cornell University ,23. april 2019.
  13. (in) Gunivers, "  Data Pack - Universal Turing Machine  " , på YouTube ,17. juli 2019(åpnet 6. mai 2020 ) .
  14. (i) Tom Wildenhain, "  On the Turing Completeness of MS PowerPoint  "https://www.andrew.cmu.edu/user/twildenh/ ,16. mars 2017(åpnet 10. juli 2020 )
  15. (in) Habbo (@Habbo), "  Vi vet at det er talentfulle Noen Habbos der ute tar sikte på at denne bare kan ta kaken! En av spillerne våre @sirjonasxx tok utfordringen med å lage en fungerende Turing-maskin i spillet, og de lyktes! La oss sjekke det ut.  » , På Twitter ,9. november 2020(åpnet 30. november 2020 )

Vedlegg

Relaterte artikler