În informatică și logică , se spune că un sistem formal este complet în sensul Turing sau Turing-complet (prin urmărirea limbii engleze Turing-complete ) dacă are o putere expresivă cel puțin echivalentă cu cea a mașinilor Turing . Într-un astfel de sistem, este deci posibil să programați orice mașină Turing.
Această noțiune este făcută relevantă de teza Bisericii , care postulează existența unei noțiuni naturale de calculabilitate. Astfel, puterea expresivă a mașinilor Turing coincide cu cea a funcțiilor recursive , a calculului lambda sau chiar a mașinilor de numărare .
Deși unele modele de calcul, numite hipercomputatoare , sunt strict mai expresive decât mașinile Turing, aceste modele sunt obiecte de speculație (care necesită, de exemplu, efectuarea unui număr infinit de operații sau de calculat pe setul de numere. Real) și nu este cunoscut dacă sunt fezabile fizic. În aceste condiții, teza Bisericii presupune universalitatea modelului de calcul al mașinii Turing: orice sistem complet Turing ar fi de fapt echivalent cu mașinile Turing.
La fel ca un model de calcul, un limbaj de calculator se spune că este complet Turing dacă permite reprezentarea tuturor funcțiilor calculabile în sensul lui Turing și Biserică (fără a aduce atingere limitării memoriei computerului).
Unii autori iau această proprietate pentru definirea unui limbaj de programare , dar pot fi alese și alte definiții.
Limbajele obișnuite de programare ( C , Java ...) sunt complete Turing deoarece au toate ingredientele necesare pentru simularea unei mașini universale Turing (numărare, comparare, citire, scriere etc.). Limbajul C ++ este, de asemenea, complet Turing, iar subsetul care permite programarea generică ( șabloane ) este, de asemenea, .
Limbajul SQL , inițial incomplet în sensul lui Turing, a devenit așa cu standardul SQL: 1999 permițându-i să scrie interogări recursive .
Limbajul LaTeX (de la TeX ), destinat compoziției documentelor, este, de asemenea, complet Turing.
Limbajul HTML singur nu este complet Turing, deși s-a dovedit că limbajul CSS (versiunea 3) permite construirea codului automat automat celular 110 (a se vedea regula 110 (in) ), cunoscut ca fiind universal în sensul lui Turing . Aceste două limbaje sunt adesea inseparabile, putem concluziona că HTML + CSS este complet Turing și, prin urmare, această asociere îl face teoretic un limbaj de programare.
Un limbaj complet Turing moștenește caracteristicile unei mașini Turing. De exemplu, problema închiderii este indecidabilă , deci este imposibil să scrieți un program care să spună dacă un program arbitrar dat i se termină sau nu.
Unele limbi dedicate abordării problemelor specifice nu sunt complete Turing. Sistemul F , un formalism de calcul lambda este un exemplu. Mai mult decât atât - prin proiectare - limbajele totale (en) , în care toate calculele se încheie în mod necesar (cum ar fi limbajul Gallina al asistentului de probă Coq ), nu sunt nici Turing-complete. Cu toate acestea, aceștia din urmă sunt capabili în practică să calculeze tot ceea ce este de interes, cu alte cuvinte pot implementa toate funcțiile de care am putea avea nevoie în viața practică; calculele care le scapă, fie au o complexitate dincolo de imaginabil și realizabil, fie nu se termină. Compilația trebuie să demonstreze încetarea programelor sau să necesite interacțiunea cu programatorul pentru unele demonstrații, dar acesta este prețul de plătit pentru calitatea codului care este corectă prin construcție.
Unele jocuri și software sunt completate din întâmplare, fără ca autorii lor să dorească sau să ia în considerare:
„ Faptul că toate limbajele de programare standard exprimă cu precizie clasa funcțiilor recursive parțiale este adesea rezumat prin afirmația că toate limbajele de programare sunt complete Turing. "
„ Un limbaj de programare este un limbaj destinat exprimării programelor de calculator și care este capabil să exprime orice program de computer. Aceasta nu este o noțiune vagă. Există un mod teoretic precis de a determina dacă un limbaj de calculator poate fi folosit pentru a exprima orice program, și anume, arătând că este echivalent cu o mașină universală Turing. "