Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince / 63

Podobné dokumenty
Rozhodnutelné a nerozhodnutelné problémy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 24. dubna / 49

(viztakéslidyktétopřednášce...) Poznámka. Neudělali jsme vše tak podrobně, jak je to v zápisu.

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Teoretická informatika průběh výuky v semestru 1

Postův korespondenční problém. Meze rozhodnutelnosti 2 p.1/13

Princip funkce počítače

Fakulta informačních technologií. Teoretická informatika

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM:

Strojový kód. Instrukce počítače

Složitost Filip Hlásek

NP-úplnost problému SAT

Teoretická informatika průběh výuky v semestru 1

Třída PTIME a třída NPTIME. NP-úplnost.

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Třída PTIME a třída NPTIME. NP-úplnost.

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Třídy složitosti P a NP, NP-úplnost

Složitost. Teoretická informatika Tomáš Foltýnek

Architektura počítačů Logické obvody

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Architektura počítačů Logické obvody

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Čísla, reprezentace, zjednodušené výpočty

Čísla, reprezentace, zjednodušené výpočty

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Výroková a predikátová logika - XIII

a operačních systémů

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Výpočetní složitost I

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Logika. 6. Axiomatický systém výrokové logiky

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

Základy algoritmizace

Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování.

8. Laboratoř: Aritmetika a řídicí struktury programu

Formální jazyky a gramatiky Teorie programovacích jazyků

Architektury počítačů a procesorů

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Pohled do nitra mikroprocesoru Josef Horálek

Algoritmizace a programování

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Struktura a architektura počítačů (BI-SAP) 5

Výroková a predikátová logika - III

Paralelní programování

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Struktura a architektura počítačů (BI-SAP) 7

Programovací jazyk Pascal

Matematická logika. Miroslav Kolařík

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Výroková a predikátová logika - V

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Od Turingových strojů k P=NP

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Program a životní cyklus programu

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Úvod do programování 7. hodina

TURINGOVY STROJE. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných

Katedra informatiky a výpočetní techniky. 10. prosince Ing. Tomáš Zahradnický doc. Ing. Róbert Lórencz, CSc.

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST

[1] Definice 1: Polynom je komplexní funkce p : C C, pro kterou. pro všechna x C. Čísla a 0, a 1,..., a n nazýváme koeficienty polynomu.

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

1 Linearní prostory nad komplexními čísly

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

Semestrální práce z předmětu ÚPA MIPS

Predik atov a logika - pˇredn aˇska () Predik atov a logika - pˇredn aˇska / 16

C2115 Praktický úvod do superpočítání

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

SEKVENČNÍ LOGICKÉ OBVODY

2. Složitost, grafové algoritmy (zapsal Martin Koutecký)

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Základy matematické analýzy

Paměť počítače. alg2 1

setup() { I = 0; } loop() { I = I + 1; }

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

1 Lineární prostory a podprostory

/1: Teoretická informatika(ti) přednáška 4

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Výroková a predikátová logika - XII

Opakování programování

Počítač jako prostředek řízení. Struktura a organizace počítače

Týden 11. Přednáška. Teoretická informatika průběh výuky v semestru 1. Nejprve jsme dokončili témata zapsaná u minulé přednášky.

Transkript:

Výpočetní modely Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 1/ 63

Nutnost upřesnění pojmu algoritmus Dosavadní definice pojmu algoritmus byla poněkud vágní. Pokud bychom pro nějaký problém chtěli dokázat, že neexistuje algoritmus, který by daný problém řešil, tak by to s takovouto neurčitou definicí pojmu algoritmus asi nešlo. Intuitivně chápeme, co by měl mít algoritmus za vlastnosti: Měl by se skládat z jednoduchých kroků, které je možno vykonávat mechanicky, bez porozumění problému. Objekty, se kterými algoritmus pracuje, i prováděné operace by měly být konečné. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 2/ 63

Algoritmus realizovaný počítačem Například program v libovolném programovacím jazyce dané vlastnosti zcela jistě má. At už je program napsán v jakémkoliv programovacím jazyce, jsou jeho instrukce nakonec prováděny na hardwaru nějakého konkrétního počítače na úrovni instrukcí procesoru. Je tedy jasné, že každý program v každém programovacím jazyce bychom mohli zapsat jako program tvořený pouze instrukcemi strojového kódu nějakého procesoru. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 3/ 63

Činnost počítače Typická architektura naprosté většiny počítačů vypadá následovně: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 IP flags MEM R1 R2 R3 R4 R5 R6 R7 R8 CPU Počítač má pamět skládající se z velkého množství pamět ových buněk. Každá buňka může obsahovat číslo určité velikosti, typicky 1 byte (8 bitů), tj. číslo v rozsahu 0.. 255. Buňky jsou očíslovány. Číslo buňky se nazývá její adresa. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 4/ 63

Činnost počítače Typická architektura naprosté většiny počítačů vypadá následovně: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 IP flags MEM R1 R2 R3 R4 R5 R6 R7 R8 CPU Instrukce jsou uloženy v paměti (každá instrukce má svůj číselný kód) a jsou sekvenčně vykonávány procesorem. Procesor udržuje tzv. čítač instrukcí IP, který obsahuje adresu aktuálně prováděné instrukce. Procesor načte instrukci z adresy určené IP, zvětší IP o délku načtené instrukce a provede danou instrukci. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 4/ 63

Činnost počítače Typická architektura naprosté většiny počítačů vypadá následovně: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 IP flags MEM R1 R2 R3 R4 R5 R6 R7 R8 CPU Procesor obsahuje několik registrů pevné délky (např. 32 nebo 64 bitů). Většina operací je prováděna na registrech. Procesor obsahuje příznaky (flags), které umožňují testovat výsledek poslední operace (např. přetečení, jestli je výsledek nula apod.). Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 4/ 63

Činnost počítače Typické instrukce: Načtení obsahu pamět ové buňky (resp. několika po sobě jdoucích buněk) do některého registru (LOAD). Uložení obsahu registru do některé pamět ové buňky (resp. několika po sobě jdoucích buněk) (STORE). Poznámka: Adresa buňky je bud přímá (tj. je přímo součástí instrukce) nebo nepřímá (uložená v některém registru, případně spočítaná z obsahu jednoho nebo několika registrů). Načtení obsahu jednoho registru do jiného registru (MOV). Aritmetické instrukce (ADD, SUB, MUL, DIV, NEG, CMP, INC, DEC,...). Logické instrukce (AND, OR, XOR, NOT,...). Bitové posuny a rotace (SHL, SHR,...) Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 5/ 63

Činnost počítače Typické instrukce (pokračování): Nepodmíněný skok (JMP). Poznámka: Cílová adresa může být přímá nebo nepřímá. Podmíněné skoky (JZERO, JGTZ,...). Volání podprogramů (CALL, RET). Různé speciální instrukce práce se vstupem a výstupem, obsluha přerušení, mody činnosti procesoru, řízení přístupu do paměti, stránkování apod. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 6/ 63

Činnost počítače Příklad: Instrukce zapsaná ve vyšším programovacím jazyce jako x = y +2 může být realizována následující sekvencí instrukcí určitého (hypotetického) procesoru: LOAD R5,[0x001b7c44] ADD R5,2 STORE [0x001b7c38],R5 Poznámka: Předpokládáme, že proměnná x je uložena na adrese 0x001b7c38 a proměnná y na adrese 0x001b7c44. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 7/ 63

Stroj RAM Stroj RAM (Random Access Machine) je idealizovaný model počítače. Skládá se z těchto částí: Programová jednotka obsahuje program stroje RAM a ukazatel na právě prováděnou instrukci Pracovní pamět tvořená buňkami očíslovanými 0,1,2,... ; obsah buněk je možno číst i do nich zapisovat Vstupní páska je z ní možné pouze číst Výstupní páska je na ni možno pouze zapisovat Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 8/ 63

Stroj RAM programová jednotka 1 2 3 4 5 6 7 8 9 READ JZERO 10 STORE *3 ADD 2 STORE 2 LOAD 1 ADD =1 STORE 1 JUMP 1 10 LOAD 2 11 DIV 1 12 STORE 2 13 LOAD =0 14 STORE 1 vstup 7 5 2 0 IC ALU pracovní pamět 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 výstup Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 9/ 63

Stroj RAM Buňky 0 a 1 mají speciální význam a slouží jako registry stroje RAM: Buňka 0 pracovní registr (akumulátor) registr, který je jedním z operandů většiny instrukcí a do kterého se ukládá výsledek většiny operací. Buňka 1 indexový registr je použit při nepřímém adresování. Tvary operandů instrukcí (i N): tvar hodnota operandu =i přímo číslo udané zápisem i i číslo obsažené v buňce s adresou i *i číslo v buňce s adresou i + j, kde j je aktuální obsah indexového registru Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 10/ 63

Stroj RAM Příklad: LOAD <op> načte obsah operandu <op> do pracovního registru (tj. do buňky číslo 0). LOAD =5 uloží do pracovního registru hodnotu 5 LOAD 5 uloží do pracovního registru obsah buňky číslo 5 LOAD *5 uloží do pracovního registru obsah buňky číslo 5+j, kde j je aktuální obsah indexového registru Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 11/ 63

Stroj RAM Instrukce vstupu a výstupu (jsou bez operandu): READ WRITE do pracovního registru se uloží číslo, které je v poĺıčku snímaném vstupní hlavou, a vstupní hlava se posune o jedno poĺıčko doprava výstupní hlava zapíše do snímaného poĺıčka výstupní pásky obsah pracovního registru a posune se o jedno poĺıčko doprava Instrukce přesunu v paměti: LOAD <op> do pracovního registru se načte hodnota operandu STORE <op> hodnota operandu se přepíše obsahem pracovního registru (zde se nepřipouští operand tvaru =i) Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 12/ 63

Stroj RAM Instrukce aritmetických operací: ADD <op> SUB <op> MUL <op> DIV <op> číslo v pracovním registru se zvýší o hodnotu operandu (tedy přičte se k němu hodnota operandu) od čísla v pracovním registru se odečte hodnota operandu číslo v pracovním registru se vynásobí hodnotou operandu číslo v pracovním registru se celočíselně vyděĺı hodnotou operandu (do pracovního registru se uloží výsledek příslušného celočíselného dělení) Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 13/ 63

Stroj RAM Instrukce skoku: JUMP <návěští> výpočet bude pokračovat instrukcí určenou návěštím JZERO <návěští> je-li obsahem pracovního registru číslo 0, bude výpočet pokračovat instrukcí určenou návěštím; v opačném případě bude pokračovat následující instrukcí JGTZ <návěští> je-li číslo v pracovním registru kladné, bude výpočet pokračovat instrukcí určenou návěštím; v opačném případě bude pokračovat následující instrukcí Instrukce zastavení: HALT výpočet je ukončen ( regulérně zastaven) Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 14/ 63

Stroj RAM Problém Vyhledávání Vstup: Celé číslo x a sekvence celých čísel a 1,a 2,...,a n (kde a i 0) ukončená 0. Výstup: Pokud a i = x, je výstupem i (pokud jich je takových i více, tak nejmenší z nich), jinak je výstupem 0. start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 15/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 0 Buňka 1: 0 Buňka 2: 0 Buňka 3: 0 Buňka 4: 0 Výstup:. Instrukcí: 0 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 0 Buňka 1: 0 Buňka 2: 0 Buňka 3: 0 Buňka 4: 0 Výstup:. Instrukcí: 0 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 9 Buňka 1: 0 Buňka 2: 0 Buňka 3: 0 Buňka 4: 0 Výstup:. Instrukcí: 1 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 9 Buňka 1: 0 Buňka 2: 0 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 2 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 1 Buňka 1: 0 Buňka 2: 0 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 3 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 1 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 4 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 13 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 5 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 13 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 6 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 4 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 7 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 4 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 8 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 1 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 9 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 2 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 10 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 2 Buňka 1: 0 Buňka 2: 1 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 11 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 2 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 12 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 5 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 13 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 5 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 14 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: -4 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 15 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: -4 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 16 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 2 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 17 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 18 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 2 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 19 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 20 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 9 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 21 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 9 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 22 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 0 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 23 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 0 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 24 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0 Výstup:. Instrukcí: 25 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0. Výstup: 3 Instrukcí: 26 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM start: READ STORE 3 LOAD =1 cyklus: STORE 2 READ JZERO vypis SUB 3 JZERO nasel LOAD 2 ADD =1 JUMP cyklus nasel: LOAD 2 vypis: WRITE HALT Vstup: 9,13,5,9,7,2,0 Buňka 0: 3 Buňka 1: 0 Buňka 2: 3 Buňka 3: 9 Buňka 4: 0. Výstup: 3 Instrukcí: 27 Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 16/ 63

Stroj RAM Rozdíly oproti skutečnému počítači: Velikost paměti není omezena (adresa může být libovolné přirozené číslo). Velikost obsahu jednotlivých buněk není omezena (buňka může obsahovat libovolné celé číslo). Čte data sekvenčně ze vstupu, který je tvořen sekvencí celých čísel. Ze vstupu lze pouze číst. Zapisuje data sekvenčně na výstup, který je tvořen sekvencí celých čísel. Na výstup je možné pouze zapisovat. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 17/ 63

Stroj RAM a Turingův stroj Každý program v každém programovacím jazyce by mohl být realizován jako program stroje RAM. Není složité (i když je to trochu pracné) si rozmyslet, že libovolný algoritmus prováděný strojem RAM je možné realizovat také Turingovým strojem. Turingův stroj je schopen realizovat libovolný algoritmus, který by bylo možné zapsat jako program v nějakém programovacím jazyce. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 18/ 63

Stroj RAM a Turingův stroj Turingův stroj pracuje se slovy nad nějakou abecedou, zatímco stroj RAM s čísly. Čísla ale můžeme zapisovat jako sekvence symbolů a naopak symboly nějaké abecedy můžeme zapisovat jako čísla. Například následující vstup stroje RAM 5 13-3 0 6 může být v případě Turingova stroje reprezentován jako # 1 0 1 # 1 1 0 1 # - 1 1 # 0 # 1 1 0 # Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 19/ 63

Vícepáskový Turingův stroj Při konstrukci Turingova stroje k danému stroji RAM může být jednodušší zkonstruovat nejprve vícepáskový Turingův stroj: a b a a b a b b a b b a b b b b a a a b b a a a b a b q Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 20/ 63

Vícepáskový Turingův stroj Činnost vícepáskového Turingova stroje a b a a b a b b a b b a b b b b a a a b b a a a b a b je možné simulovat jednopáskovým Turingovým strojem a b a a b a b b a b b a b b b b a a a b b a a a b a b Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 21/ 63

Vícepáskový Turingův stroj Příklad: Stroj, který dostane jako vstup dvě přirozená čísla zapsaná binárně a oddělená znaky # (např. čísla 6 a 11 budou zapsaná jako slovo #110#1011# ) a spočítá jejich součet. # 1 1 0 # # 1 0 1 1 # 0 1 # q Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 22/ 63

Turingův stroj simulující činnost stroje RAM Turingův stroj simulující činnost stroje RAM bude mít několik pásek: Pásku reprezentující vstupní pásku stroje RAM. Pásku reprezentující výstupní pásku stroje RAM. Pásku, na které bude uložen obsah pracovního registru. Pásku, na které bude uložen obsah indexového registru. Pásku, na které bude uložen obsah ostatních buněk paměti stroje RAM. Pásku, na které bude uložena adresa buňky paměti, se kterou se aktuálně pracuje. Několik dalších pomocných pásek (pro uložení mezivýsledků operací apod.) Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 23/ 63

Turingův stroj simulující činnost stroje RAM Turingův stroj si bude v řídící jednotce pamatovat, která instrukce stroje RAM se právě provádí. Provedení většiny instrukcí není složité: Instrukce READ zkopírování hodnoty (ohraničené znaky # ) ze vstupní pásky na pásku reprezentující pracovní registr. Instrukce WRITE zkopírování hodnoty pracovní registru na výstupní pásku. Instrukce JUMP změní se jen stav řídící jednotky Turingova stroje. Instrukce JZERO a JGTZ snadno otestujeme obsah pracovního registru a podle výsledku změníme stav řídící jednotky Turingova stroje. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 24/ 63

Turingův stroj simulující činnost stroje RAM Aritmetické instrukce (ADD, SUB, MUL, DIV) jsou také relativně jednoduché: Hodnotu druhého operandu zapíšeme na pomocnou pásku. Provedeme operaci (např. sčítání) bit po bitu, výsledek ukládáme na další pomocnou pásku. Výsledek zkopírujeme na pásku s obsahem pracovního registru. Poznámka: Násobení a dělení je možné realizovat pomocí série sčítání a bitových posunů. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 25/ 63

Turingův stroj simulující činnost stroje RAM Asi nejsložitější je realizace paměti stroje RAM. Jednou z možností je pamatovat si jen obsah těch buněk, se kterými stroj RAM v průběhu své činnosti někdy pracoval (víme, že všechny ostatní obsahují hodnotu 0). Příklad: Stroj RAM zatím pracoval jen s buňkami 2, 3 a 6: Buňka 2 obsahuje hodnotu 11. Buňka 3 obsahuje hodnotu 1. Buňka 6 obsahuje hodnotu 2. Obsah pásky Turingova stroje reprezentující buňky paměti stroje RAM bude následující: $ # 1 0 : 1 0 1 1 # 1 1 : - 1 # 1 1 0 : 1 0 # $ Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 26/ 63

Turingův stroj simulující činnost stroje RAM Instrukce LOAD: Hledanou adresu uložíme na příslušnou pásku obsahující adresu, se kterou se aktuálně pracuje. Budeme hledat příslušnou adresu na pásce reprezentující obsah paměti stroje RAM. (Pokud ji nenajdeme, přidáme ji na konec, s tím, že obsahuje hodnotu 0.) Příslušnou hodnotu zkopírujeme na pásku reprezentující pracovní registr. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 27/ 63

Turingův stroj simulující činnost stroje RAM Instrukce STORE: Podobně jako u instrukce LOAD najdeme příslušné místo na pásce. Zbytek pásky s obsahem paměti stroje RAM zkopírujeme na pomocnou pásku. Na příslušné místo zkopírujeme hodnotu z pracovního registru. Zbytek pásky, který jsme zkopírovali na pomocnou pásku, zkopírujeme zpět (za nově zapsanou hodnotu). Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 28/ 63

Churchova-Turingova teze Churchova-Turingova teze Každý algoritmus je možné realizovat nějakým Turingovým strojem. Není to věta, kterou by bylo možno dokázat v matematickém smyslu není formálně definováno, co je to algoritmus. Tezi formulovali nezávisle na sobě v polovině 30. let 20. století Alan Turing a Alonzo Church. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 29/ 63

Churchova-Turingova teze Příklady matematických formalismů zachycujících pojem algoritmus: stroje RAM Turingovy stroje lambda kalkulus rekurzivní funkce... Dále můžeme uvést: Libovolný (obecný) programovací jazyk (jako např. C, Java, Lisp, Haskell, Prolog apod.). Všechny tyto modely jsou ekvivalentní z hlediska algoritmů, které jsou schopny realizovat. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 30/ 63

Výpočetní modely Takovým jazykům (resp. strojům), které jsou dostatečně obecné na to, aby se do nich (resp. do jejich instrukcí) daly přeložit programy napsané v libovolném jiném programovacím jazyce se říká Turingovsky úplné. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 31/ 63

Simulace výpočtu Vysvětlení toho, co to znamená, že stroj M je simulován strojem M : Výpočet stroje M pro vstup w je (konečná nebo nekonečná) posloupnost konfigurací stroje M α 0 α 1 α 2 Tomuto výpočtu odpovídá výpočet stroje M tvořený konfiguracemi α 0 α 1 α 2 kde každé konfiguraci α i odpovídá nějaká konfigurace α f(i), kde f : N N je funkce, pro kterou platí, f(i) f(j) pro každé i a j, kde i < j. Existuje funkce mapující konfigurace stroje M na jim odpovídající konfigurace stroje M. Existují funkce mapující vstup w na odpovídající počáteční konfigurace α 0 a α 0 a analogicky funkce mapující koncové konfigurace na výsledek výpočtu. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 32/ 63

Příklady výpočetních modelů a jejich vzájemných simulací Všechny následující stroje mají konečnou řídící jednotku doplněnou o nějaký druh neomezeně velké paměti. Tato pamět může být tvořena jednou nebo více struktur, jako jsou třeba: Páska čtení a zápis symbolu na aktuální pozici, posun hlavy doleva a doprava Poznámka: Páska může být jednostranně nebo oboustranně nekonečná. Zásobník push, pop, test prázdnosti zásobníku Čítač hodnotou je přirozené číslo, operace přičtení nebo odečtení hodnoty jedna, test rovnosti nule Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 33/ 63

Příklady výpočetních modelů a jejich vzájemných simulací Na jednostranně nekonečnou pásku je možné se dívat jako na speciální případ oboustranně nekonečné pásky. Na zásobník je možné se dívat jako na speciální případ jednostranně nekonečné pásky. Na čítač je možné se dívat jako na speciální případ zásobníku. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 34/ 63

Příklady výpočetních modelů a jejich vzájemných simulací Oboustranně nekonečnou pásku je možné simulovat pomocí dvou zásobníků. Zásobník je možné simulovat pomocí dvou čítačů hodnota jednoho čítače reprezentuje obsah zásobníku jako číslo, jehož zápis v číselné soustavě o základu k = Γ (kde Γ je zásobníková abeceda) odpovídá obsahu zásobníku. Symbol na vrcholu zásobníku zbytek po dělení k Pop vydělit k Push vynásobit k a přičíst kód příslušného symbolu Dělení a násobení konstantou je možné implementovat postupným přičítáním s využitím druhého pomocného čítače. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 35/ 63

Příklady výpočetních modelů a jejich vzájemných simulací Libovolný konečný počet čítačů je možné simulovat pomocí dvou čítačů. Jeden čítač reprezentuje hodnoty všech čítačů např. hodnoty čítačů x, y, z mohou reprezentovány jako číslo 2 x 3 y 5 z. Přičtení jedničky k čítači x je simulováno jako vynásobení hodnotou 2, přičtení jedničky k čítači y jako vynásobení hodnotou 3, atd. Analogicky je odečtení jedničky simulováno pomocí dělení příslušnou konstantou. Všechny tyto operace je možno realizovat pomocí postupného přičítání či odečítání s použitím druhého pomocného čítače. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 36/ 63

Univerzální Turingův stroj Popis libovolného Turingova stroje M (či jiného výpočetního modelu) můžeme reprezentovat ve formě dat např. slova nad nějakou abecedou. Zápisem Kód(M) označme takovouto reprezentaci stroje M (v nějakém konkrétním formátu). Univerzální Turingův stroj U je stroj, který když dostane jako vstup Kód(M)#w, kde w je slovo nad abecedou Σ, začne simulovat činnost stroje M nad vstupem w. Univerzální Turingův stroj je tedy schopen vykonávat činnost libovolného jiného Turingova stroje (jehož popis dostane jako součást vstupu). Poznámka: Odpovídá to situaci, kdy máme hardware počítače (stroj U), který je schopen vykonávat libovolný algoritmus, který dostane ve formě programu (software) Kód(M). Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 37/ 63

Výpočet Turingova stroje jako data Nejen s popisem Turingova stroje můžeme pracovat jako s daty. Rovněž na výpočet (resp. na popis tohoto výpočtu) daného stroje M nad nějakým vstupem w můžeme nahĺıžet jako na určitý druh dat. Například konfigurace Turingova stroje M = (Q,Σ,Γ,δ,q 0,F) můžeme kódovat jako slova nad abecedou = Γ (Q Γ): V zápisu konfigurace je právě jeden symbol z množiny (Q Γ) reprezentuje stav řídící jednotky a pozici hlavy. Zbylé symboly (z množiny Γ) reprezentují obsah pásky. Výpočet je možné reprezentovat jako posloupnost konfigurací oddělených symbolem #. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 38/ 63

C 0 C 1 C 2 C 3 0 1 2 3 n n+1 j q 0 a 1 a 2 a 3 a n C i β 1 β 2β 3 β C t 1 C t q acc x Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 39/ 63

Nerozhodnutelné problémy Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 40/ 63

Algoritmicky řešitelné problémy Předpokládejme, že máme dán nějaký problém P. Jestliže existuje nějaký algoritmus, který řeší problém P, pak říkáme, že problém P je algoritmicky řešitelný. Jestliže P je rozhodovací problém a jestliže existuje nějaký algoritmus, který problém P řeší, pak říkáme, že problém P je (algoritmicky) rozhodnutelný. Když chceme ukázat, že problém P je algoritmicky řešitelný, stačí ukázat nějaký algoritmus, který ho řeší (a případně ukázat, že daný algoritmus problém P skutečně řeší). Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 41/ 63

Algoritmicky neřešitelné problémy Problém, který není algoritmicky řešitelný, je algoritmicky neřešitelný. Rozhodovací problém, který není rozhodnutelný, je nerozhodnutelný. Kupodivu existuje řada algoritmických problémů (přesně definovaných), o kterých je dokázáno, že nejsou algoritmicky řešitelné. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 42/ 63

Halting Problem Vezměme si nějaký libovolný obecný programovací jazyk L. Navíc předpokládejme, že programy v jazyce L běží na nějakém idealizovaném stroji, kde mají k dispozici (potenciálně) neomezené množství paměti tj. kde alokace paměti nikdy neselže kvůli nedostatku paměti. Příklad: Následující problém zvaný Problém zastavení (Halting problem) je nerozhodnutelný: Halting problem Vstup: Zdrojový kód programu P v jazyce L, vstupní data x. Otázka: Zastaví se program P po nějakém konečném počtu kroků, pokud dostane jako vstup data x? Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 43/ 63

Halting Problem Předpokládejme, že by existoval nějaký program, který by rozhodoval Halting problem. Mohli bychom tedy vytvořit podprogram H, deklarovaný jako kde H(P,x) vrátí: Bool H(String kod, String vstup) true pokud se program P zastaví pro vstup x, false pokud se program P nezastaví pro vstup x. Poznámka: Řekněme, že podprogram H(P, x) by vracel false v případě, že P není syntakticky správný kód programu. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 44/ 63

Halting Problem S použitím podprogramu H bychom vytvořili program D, který bude provádět následující kroky: Načte svůj vstup do proměnné x typu String. Zavolá podprogram H(x, x). Pokud podprogram H vrátil true, skočí do nekonečné smyčky loop: goto loop V případě, že H vrátil false, program D se ukončí. Co udělá program D, pokud mu předložíme jako vstup jeho vlastní kód? Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 45/ 63

Halting Problem Pokud D dostane jako vstup svůj vlastní kód, tak se bud zastaví nebo nezastaví. Pokud se D zastaví, tak H(D,D) vrátí true a D skočí do nekonečné smyčky. Spor! Pokud se D nezastaví, tak H(D,D) vrátí false a D se zastaví. Spor! V obou případech dospějeme ke sporu a další možnost není. Nemůže tedy platit předpoklad, že H řeší Halting problem. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 46/ 63

Částečně rozhodnutelné problémy Problém je částečně rozhodnutelný, jestliže existuje algoritmus, který: Pokud dostane jako vstup instanci, pro kterou je odpověd Ano, tak se po konečném počtu kroků zastaví a vypíše "ANO". Pokud dostane jako vstup instanci, pro kterou je odpověd Ne, tak se bud zastaví a vypíše "NE" nebo se nikdy nezastaví. Je očividné, že například HP (Halting problem) je částečně rozhodnutelný. Některé problémy však nejsou ani částečně rozhodnutelné. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 47/ 63

Postova věta Doplňkový problém k danému rozhodovacímu problému P je problém, kde vstupy jsou stejné jako u problému P a otázka je negací otázky z problému P. Postova věta Jestliže problém P i jeho doplňkový problém jsou částečně rozhodnutelné, pak je problém P rozhodnutelný. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 48/ 63

Převody mezi problémy Pokud máme o nějakém (rozhodovacím) problému dokázáno, že je nerozhodnutelný, můžeme ukázat nerozhodnutelnost dalších problémů pomocí redukcí (převodů) mezi problémy. Problém P 1 je převeditelný na problém P 2, jestliže existuje algoritmus Alg takový, že: Jako vstup může dostat libovolnou instanci problému P 1. K instanci problému P 1, kterou dostane jako vstup (označme ji w), vyprodukuje jako svůj výstup instanci problému P 2 (označme ji Alg(w)). Platí, že pro vstup w je v problému P 1 odpověd Ano právě tehdy, když pro vstup Alg(w) je v problému P 2 odpověd Ano. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 49/ 63

Převody mezi problémy vstupy problému P 1 vstupy problému P 2 Ano Ano Ne Ne Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 50/ 63

Převody mezi problémy vstupy problému P 1 vstupy problému P 2 Ano Ano Ne Ne Alg Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 50/ 63

Převody mezi problémy Řekněme, že existuje redukce Alg problému P 1 na problém P 2. Pokud by problém P 2 byl rozhodnutelný, pak i problém P 1 je rozhodnutelný. Řešení problému P 1 pro vstup x: Zavoláme Alg se vstupem x, vrátí nám hodnotu Alg(x). Zavoláme algoritmus řešící problém P 2 se vstupem Alg(x). Hodnotu, kterou nám vrátí vypíšeme jako výsledek. Je zřejmé, že pokud P 1 je nerozhodnutelný, tak P 2 nemůže být rozhodnutelný. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 51/ 63

Další nerozhodnutelné problémy Redukcí z Halting problému se dá ukázat nerozhodnutelnost celé řady problémů, které se týkají ověřování chování programů: Vydá daný program pro nějaký vstup odpověd Ano? Zastaví se daný program pro libovolný vstup? Dávají dva dané programy pro stejné vstupy stejný výstup?... Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 52/ 63

Halting problem Pro účely důkazů se Halting problem nejčastěji používá v následující podobě: Halting problem Vstup: Popis Turingova stroje M a slovo w. Otázka: Zastaví se stroj M po nějakém konečném počtu kroků, pokud dostane jako svůj vstup slovo w? Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 53/ 63

Další nerozhodnutelné problémy S následujícím příkladem nerozhodnutelného problému už jsme se setkali: Problém Vstup: Bezkontextové gramatiky G 1 a G 2. Otázka: Je L(G 1 ) = L(G 2 )? případně Problém Vstup: Bezkontextová gramatika G generující jazyk nad abecedou Σ. Otázka: Je L(G) = Σ? Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 54/ 63

Další nerozhodnutelné problémy Vstupem je množina typů kartiček, jako třeba: abb a bab baba aba bbab aa ab aa a Otázka je, zda je možné z těchto typů kartiček vytvořit neprázdnou konečnou posloupnost, kde zřetězením slov nahoře i dole vznikne totéž slovo. Každý typ kartičky je možné používat opakovaně. a abb abb baba abb aba aa bbab bbab aa bbab a Nahoře i dole vznikne slovo aabbabbbabaabbaba. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 55/ 63

Další nerozhodnutelné problémy Redukcí z předchozího problému se dá snadno ukázat nerozhodnutelnost některých dalších problémů z oblasti bezkontextových gramatik: Problém Vstup: Bezkontextové gramatiky G 1 a G 2. Otázka: Je L(G 1 ) L(G 2 ) =? Problém Vstup: Bezkontextová gramatika G. Otázka: Je G nejednoznačná? Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 56/ 63

Další nerozhodnutelné problémy Vstupem je množina typů kachliček, jako třeba: Otázka je, zda je možné použitím daných typů kachliček pokrýt každou libovolně velkou konečnou plochu tak, aby všechny kachličky spolu sousedily stejnými barvami. Poznámka: Můžeme předpokládat, že máme v zásobě neomezené množství kachliček všech typů. Kachličky není dovoleno otáčet. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 57/ 63

Další nerozhodnutelné problémy Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 58/ 63

Další nerozhodnutelné problémy Problém Vstup: Uzavřená formule predikátové logiky (prvního řádu), ve které mohou být použity jako predikátové symboly pouze = a <, jako funkční symboly pouze + a a jako kostantní symboly pouze 0 a 1. Otázka: Je daná formule pravdivá v oboru přirozených čísel (při přirozené interpretaci všech funkčních a predikátových symbolů)? Příklad vstupu: x y z((x y = z) (y +1 = x)) Poznámka: Úzce souvisí s Gödelovou větou o neúplnosti. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 59/ 63

Další nerozhodnutelné problémy Je zajímavé, že analogický problém, kde ale místo přirozených čísel uvažujeme čísla reálná, je algoritmicky rozhodnutelný (i když popis daného algoritmu a důkaz jeho korektnosti jsou značně netriviální). Rovněž pokud uvažujeme přirozená nebo celá čísla a stejné formule jako v předchozím případě, ale s tím, že v nich nesmí být použit funkční symbol (násobení), tak je problém algoritmicky rozhodnutelný. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 60/ 63

Další nerozhodnutelné problémy Pokud můžeme používat, je ve skutečnosti je nerozhodnutelný už velmi omezený případ: Desátý Hilbertův problém Vstup: Polynom f(x 1,x 2,...,x n ) vytvořený z proměnných x 1,x 2,...,x n a celočíselných konstant. Otázka: Existují přirozená čísla x 1,x 2,...,x n taková, že f(x 1,x 2,...,x n ) = 0? Příklad vstupu: 5x 2 y 8yz +3z 2 15 Tj. ptáme se, zda x y z(5 x x y +( 8) y z +3 z z +( 15) = 0) platí v oboru přirozených čísel. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 61/ 63

Další nerozhodnutelné problémy Také následující problém je algoritmicky nerozhodnutelný: Problém Vstup: Uzavřená formule ϕ predikátové logiky prvního řádu. Otázka: Platí = ϕ? Poznámka: Zápis = ϕ znamená, že formule ϕ je logicky platná, tj. pravdivá v každé interpretaci. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 62/ 63

Riceova věta Řekněme, že P je nějaká vlastnost Turingových strojů. Vlastnost P je: netriviální pokud existuje alespoň jeden stroj, který vlastnost P má, a alespoň jeden stroj, který vlastnost P nemá vstupně-výstupní pokud každé dva stroje, které se zastaví pro stejné vstupy a pro stejné vstupu dávají stejné výstup, vždy oba vlastnost P mají nebo oba nemají Věta Každý problém tvaru Vstup: Turingův stroj M. Otázka: Má stroj M vlastnost P? kde P je netriviální vstupně-výstupní vlastnost, je nerozhodnutelný. Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince 2018 63/ 63