Turing completeness
Főnév
Turing completeness (tsz. Turing completenesses)
- (informatika) Turing-teljesség (angolul Turing completeness) egy olyan elméleti fogalom a számítástudományban, amely azt írja le, hogy egy formális rendszer vagy programozási nyelv képes-e bármely számítható problémát megoldani, feltéve hogy elegendő idő és memória áll rendelkezésre.
Ez az egyik alapfogalom az algoritmusok és számításelmélet világában, és Alan Turing munkájára vezethető vissza, aki az 1930-as években megalkotta a Turing-gép fogalmát.
🧠 Mi az a Turing-gép?
A Turing-gép egy elméleti számítógépmodell, amely egy végtelen hosszú szalagon (memória), egy olvasó/író fejjel és egy állapotgép vezérléssel működik. A gép képes:
- Olvasni egy szimbólumot a szalagról
- Állapotától függően új szimbólumot írni
- Balra vagy jobbra mozogni a szalagon
- Megváltoztatni a belső állapotát
Bár egyszerű, ez a modell képes minden számítható művelet elvégzésére – ezért lett a számításelmélet alapmodellje.
📜 Turing-teljesség definíciója
Egy formális rendszer Turing-teljes, ha:
- Képes feltételes elágazásra (if/else, goto, jump, stb.)
- Képes ismétlésre vagy rekurzióra (pl. while, for, recursion)
- Képes változók és memória kezelésére (akár véges, akár végtelen módon modellezve)
Ha ezek a képességek adottak, akkor a rendszer képes minden számítható probléma megoldására – ugyanazokra a feladatokra, mint egy Turing-gép.
⚙️ Példák Turing-teljes nyelvekre
| Nyelv | Turing-teljes? | Megjegyzés |
|---|---|---|
| C, C++, Java, Python, Rust | ✅ | Teljes funkcionalitású programozási nyelvek |
| JavaScript, PHP | ✅ | Magas szintű, webes nyelvek |
| Brainfuck, Whitespace | ✅ | Esoteric nyelvek, de elméletileg teljesek |
| x86 Assembly | ✅ | Alacsony szintű, de Turing-teljes |
| SQL (alap) | ❌ | Nem általános célú, nincs ciklus/rekurzió (egyes dialektusok kivételek) |
| Regex (klasszikus) | ❌ | Nem Turing-teljes, nem képes memóriakezelésre |
| HTML, CSS | ❌ | Deklaratív nyelvek, nem rendelkeznek vezérlési szerkezettel |
🤖 Példák nem Turing-teljes rendszerekre
- Markdown – csak dokumentumformázás, nincs logikai vezérlés
- CSS – stílusleírás, nincs ciklus, nincs változó (csak újabban limitált módon)
- Klasszikus reguláris kifejezések – nem képesek rekurzióra
🔍 Miért fontos a Turing-teljesség?
✅ Elméleti okokból:
- Meghatározza, hogy egy rendszer általános célú programozási nyelvként működhet-e.
- Lehetővé teszi algoritmusok teljes körű implementációját.
⚠️ Gyakorlati szempontból:
- Nem feltétlenül szükséges minden rendszernek Turing-teljesnek lennie (pl. HTML).
- Bizonyos rendszereket szándékosan nem tesznek Turing-teljessé a biztonság, megbízhatóság vagy determinálhatóság érdekében (pl. sablonnyelvek, beágyazott rendszerek).
🌀 Turing-teljesség paradoxonai
- Halting Problem: Nincs általános algoritmus, amely eldöntené, hogy egy Turing-teljes program megáll-e vagy végtelen ciklusban fut.
- Számításelméleti határok: Vannak olyan problémák (pl. Goldbach-sejtés bizonyítása), amelyeket egy Turing-teljes gép sem tud garantáltan megoldani.
🧩 Turing-teljesség és esolangok
Sok esolang célja, hogy megmutassa: még egy extrém módon lebutított (vagy obskúrus) nyelv is lehet Turing-teljes. Pl.:
- Brainfuck – 8 karakter, mégis teljes
- Piet – színváltásokon alapuló nyelv, de Turing-teljes
- Malbolge – szinte írhatatlan, de elméletileg teljes
🧠 Összefoglalás
| Fogalom | Leírás |
|---|---|
| Turing-teljesség | Egy rendszer képessége bármilyen számítható művelet elvégzésére |
| Turing-gép | Absztrakt számítógépmodell, amely ezt a fogalmat alapozza meg |
| Elvárások | Ciklus/rekurzió, elágazás, változók |
| Jelentőség | Alapja annak, hogy mit nevezünk teljes értékű programozási nyelvnek |
- Turing completeness - Szótár.net (en-hu)
- Turing completeness - Sztaki (en-hu)
- Turing completeness - Merriam–Webster
- Turing completeness - Cambridge
- Turing completeness - WordNet
- Turing completeness - Яндекс (en-ru)
- Turing completeness - Google (en-hu)
- Turing completeness - Wikidata
- Turing completeness - Wikipédia (angol)