Toggle menu
Toggle preferences menu
Toggle personal menu
Neprihlásený/á
Your IP address will be publicly visible if you make any edits.
Bez shrnutí editace
Bez shrnutí editace
Riadok 23: Riadok 23:


==== Prázdne slovo ====
==== Prázdne slovo ====
Prázdne slovo označujeme gréckym písmenom '''ε'''. Je to slovo, ktoré má nulovú dĺžku: <math>|\epsilon| = 0</math>. Predstav si to ako prázdny reťazec v programovacom jazyku: <code>"" // reťazec nulovej dĺžky: je to nič</code>. 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.
Prázdne slovo označujeme gréckym písmenom <math>\epsilon</math> (Epsilon). Je to slovo, ktoré má nulovú dĺžku: <math>|\epsilon| = 0</math>. Predstav si to ako prázdny reťazec v programovacom jazyku: <code>"" // reťazec nulovej dĺžky: je to nič</code>. 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 ===
Riadok 30: Riadok 30:
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 <math>V^*</math>, napríklad:
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 <math>V^*</math>, napríklad:


<math display="block">V^* = \{ \ldots, a, b, c, \ldots, asdaf, asdag, \ldots, \color{green}{mama}\color{black}, \ldots, xyzhrbbdfu \}</math>
<math display="block">V^* = \{ \epsilon, a, b, c, \ldots, asdaf, asdag, \ldots, \color{green}{mama}\color{black}, \ldots, xyzhrbbdfu, \ldots \}</math>


Ak takáto množina obsahuje všetky kombinácie, ktorých je nekonečne veľa, tak potom podmnožina - jazyk <math>L</math> - bude obsahovať iba tie slová, ktoré sú platné pre ten jazyk (spĺňajú pravidlá definované v gramatike). Napríklad: <math>L = \{ \color{green}mama\color{black} \}</math>.
Ak takáto množina obsahuje všetky kombinácie, ktorých je nekonečne veľa, tak potom podmnožina - jazyk <math>L</math> - bude obsahovať iba tie slová, ktoré sú platné pre ten jazyk (spĺňajú pravidlá definované v gramatike). Napríklad: <math>L = \{ \color{green}mama\color{black} \}</math>.

Verzia z 03:51, 29. september 2024

História

Model Turingovho stroja, skonštruovaný Mike Daveyom, vystavený na Harvardovej univerzite v roku 2012.[1]

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 V. Napríklad: V={a,b,c,d,,x,y,z} 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á: V={,Ψ,Θ,,,,}.

Slovo

Slovo w je ľubovoľná konečná postupnosť symbolov z abecedy V. Dĺžku slova w (teda, počet znakov v slove) označujeme ako |w|. Napríklad:w=mama|w|=4

Prázdne slovo

Prázdne slovo označujeme gréckym písmenom ϵ (Epsilon). Je to slovo, ktoré má nulovú dĺžku: |ϵ|=0. 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 L (ako z anglického Language). Jedná sa o ľubovoľnú podmnožinu množiny V* všetkých slov nad nejakou abecedou V. To znamená, že ak V*obsahuje všetky možné kombinácie symbolov z abecedy V 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 V*, napríklad:

V*={ϵ,a,b,c,,asdaf,asdag,,mama,,xyzhrbbdfu,}

Ak takáto množina obsahuje všetky kombinácie, ktorých je nekonečne veľa, tak potom podmnožina - jazyk L - bude obsahovať iba tie slová, ktoré sú platné pre ten jazyk (spĺňajú pravidlá definované v gramatike). Napríklad: L={mama}.

Gramatika

V predošlých pojmoch sa vyskytla aj gramatika. Gramatika G generuje iba slová ktoré patria do jazyka L a žiadne iné.

Gramatika je definovaná ako štvorica (G=(N,T,P,S)), kde:

  • ˆN je konečná neprázdna množina neterminálnych symbolov,
  • T je konečná neprázdna množina terminálnych symbolov, pričom NT= (to znamená, že tieto dve množiny nemajú spoločný žiadny symbol - symbol nemôže byť zároveň aj terminálny aj neterminálny),
  • ˆP 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 α(NT)*N(NT)*, a
    • pravá strana pravidiel β je ľubovoľný reťazec β(NT)*,
  • ˆSN 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á:

  1. 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);
  2. 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;
  3. 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 G, ktorá bude generovať iba jednociferné číslice od nula po desať.

Teda, ju definujeme ako G=(N,T,P,S) (to znamená: gramatika G je štvorica Neterminálnych a Terminálnych symbolov s Pravidlami a začiatočným neterminálnym symbolom, teda tým s čím začíname, a tento symbol má označenie S - 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:

N={S}T={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Pravidlá definujeme ako:

  1. "A Turing Machine Overview" - Mike Davey (https://aturingmachine.com/)