História

V 30-tych rokov 20. storočia britský matematik a logik Alan Turing skúmal abstraktné výpočtové zariadenie, ktoré malo všetky schopnosti dnešných počítačov. Takéto zariadenie sa nazýva Turingov stroj.
Otázkou bolo: dajú sa všetky problémy riešiť pomocou algoritmu?
O Turingovom stroji v kontexte formálnych jazykov a automatov hovoríme že je to "automat" - teda, zariadenie ktoré dokáže automaticky previesť nejaký vstup na výstup. Každý automat pritom využíva určité pravidlá, podľa ktorých generuje výstup - gramatiku.
Základné pojmy
Predtým, ako môžme pochopiť čo je presne automat a ako sa dá matematiky alebo schematicky vyjadriť jeho princíp fungovania, si musíme vysvetliť základné pojmy. Našťastie, veľa z týchto pojmov už poznáme pretože ich využívame v každodennom živote, a teda znamenajú presne to, čo si pod nimi predstavujeme. Ale možno z trochu iného hľadiska - toho matematického:
Abeceda
Abeceda je ľubovoľná konečná množina symbolov. Označujeme ju písmenom . Napríklad: je množina, ktorá obsahuje všetky malé písmená (symboly) anglickej abecedy.
Symboly nemusia byť iba písmená, ale aj číslice a dokonca iné špeciálne znaky. To znamená, že aj nasledujúca abeceda je platná: .
Slovo
Slovo je ľubovoľná konečná postupnosť symbolov z abecedy . Dĺžku slova (teda, počet znakov v slove) označujeme ako . Napríklad:
Prázdne slovo
Prázdne slovo označujeme gréckym písmenom (Epsilon). Je to slovo, ktoré má nulovú dĺžku: . Predstav si to ako prázdny reťazec v programovacom jazyku: "" // reťazec nulovej dĺžky: je to nič
. Aj keď sa na prvý pohľad zdá že to nedáva zmysel a tento symbol je nepotrebný, neskôr pri príkladoch zistíme, že spĺňa dôležitú funkciu pri popisovaní gramatík.
Jazyk
Jazyk označujeme pomocou písmena (ako z anglického Language). Jedná sa o ľubovoľnú podmnožinu množiny všetkých slov nad nejakou abecedou . To znamená, že ak obsahuje všetky možné kombinácie symbolov z abecedy ktorých je nekonečne veľa, tak táto podmnožina obsahuje iba tie vybrané kombinácie symbolov (slová) ktoré sú platné pre daný jazyk (dávajú zmysel, teda: spĺňajú pravidlá danej gramatiky).
Predstav si to, ako keby existovali všetky možné kombinácie písmen, bez ohľadu na to či by tie slová dávali zmysel alebo nie. To by predstavovala množina , napríklad:
Ak takáto množina obsahuje všetky kombinácie, ktorých je nekonečne veľa, tak potom podmnožina - jazyk - bude obsahovať iba tie slová, ktoré sú platné pre ten jazyk (spĺňajú pravidlá definované v gramatike). Napríklad: .
Gramatika
V predošlých pojmoch sa vyskytla aj gramatika. Gramatika generuje iba slová ktoré patria do jazyka a žiadne iné.
Gramatika je definovaná ako štvorica (), kde:
- je konečná neprázdna množina neterminálnych symbolov,
- je konečná neprázdna množina terminálnych symbolov, pričom (to znamená, že tieto dve množiny nemajú spoločný žiadny symbol - symbol nemôže byť zároveň aj terminálny aj neterminálny),
- je konečná neprázdna množina pravidiel v tvare , kde:
- ľavá strana pravidiel je ľubovoľný reťazec obsahujúci aspoň jeden neterminálny symbol , a
- pravá strana pravidiel je ľubovoľný reťazec ,
- je začiatočný neterminálny symbol.
Definícia môže vyzerať naozaj strašne pre niekoho kto nevie čítať matematické zápisy. V takom prípade stačí, ak si zapamätá:
- Pomocou gramatiky generujeme nejaké slovo ktoré jednoznačne patrí iba do jedného konkrétneho jazyka (napríklad: môžeme definovať gramatiku pre generovanie čísiel od 0 po 9 a naše pravidlá zabezpečia že výsledok bude vždy iba nejaké číslo, nie napríklad písmeno);
- Gramatika funguje tak, že najskôr definujeme pravidlá pre postupné nahrádzanie dočasných (neterminálnych) symbolov konkrétnymi konečnými (terminálnymi) symbolmi;
- Vždy definujeme neterminálny symbol, z ktorého vychádzame. Ak nezostane nič, čo by sme mohli nahradiť, máme výsledok;
Príklad
Poďme si gramatiku ukázať na príklade. Zadanie hovorí, že máme definovať gramatiku , ktorá bude generovať iba jednociferné číslice od nula po desať.
Teda, ju definujeme ako (to znamená: gramatika je štvorica eterminálnych a erminálnych symbolov s ravidlami a začiatočným neterminálnym symbolom, teda tým s čím začíname, a tento symbol má označenie - môžeme zvoliť akékoľvek označenie, ale najčastejšie sa používa S).
Teraz definujeme jednotlivé "písmenká" z našej "NTPS" štvorice:
Pravidlá definujeme ako:
- ↑ "A Turing Machine Overview" - Mike Davey (https://aturingmachine.com/)