18 Redukce Definice. Problém nazveme: • rozhodnutelný, jestliže jeho jazyková reprezentace je rekurzivní jazyk. • částečně rozhodnutelný, jestliže jeho jazyková reprezentace je rekurzivně spočetný jazyk. • nerozhodnutelný, jestliže není rozhodnutelný. Cíl. Naším cílem je zavést formalizmus, pomocí něhož bychom mohli porovnávat obtížnost problémů. To znamená, že hledáme relaci na třídě všech problémů, která je alespoň reflexivní a tranzitivní. Motivace. Mějme problém Pi určit, zda délka slova nad abecedou £ = {a, b} je dělitelná 13, a předpokládejme, že máme algoritmický postup (v tomto případě stačí dokonce konečný automat) na problém P2 určit, zda délka slova nad £ je dělitelná 26. K vyřešení Pi chceme využít P2, čímž se vyhneme vymyšlení nového algoritmu. Cíl je tedy převést instanci w\ problému P\ na instanci w2 problému P2. To lze udělat např. tak, že položíme w2 = w\w\. Zřejmě w2 je dělitelné 26 právě tehdy, když w\ bylo dělitelné 13. Po aplikaci algoritmu pro P2 na w2 získáme rozhodnutí o instanci w\ pro P\. Definice. Mějme funkci /: S* —>• T*, kde £ a T jsou nějaké abecedy. Řekneme, že / je totálně vyčíslitelná, jestliže existuje úplný Turingův stroj, který po ukončení výpočtu na vstupu w má na pásce řetězec f(w). Mějme nyní nějaké jazyky yl C E* a B C r*. Řekneme, že A se redukuje na B, píšeme A < B (zkracuji zde běžné značení • T* splňující: w e A<^ f(w) e B Píšeme A = B, pokud A < B & zároveň B < A. Úmluva. Připomeňme, že symbolem (M) označujeme nějaké zakódování Turin-gova stroje M jako řetězce nad zvolenou abecedou (toto umíme jednoznačně provést už pro libovolnou dvouprvkovou abecedu). Tento proces potřebujeme pro to, abychom mohli jazykově reprezentovat problémy a vlastnosti Turingo-vých strojů. Příklad 1. Mějme problém zastavení definovaný jako problém příslušnosti do jazyka: HALT = {(M) #w | stroj M zastaví na vstupu w} Ukážeme, že problém zastavení a problém akceptování jsou ekvivalentní: ACCEPT = HALT K tomu musíme provést dvě redukce: ACCEPT < HALT: Nejprve si přeložme, co vlastně znamená provést tuto redukci: Naším úkolem je nalézt postup, jak z řetězce M#w udělat řetězec M'#w' takovým způsobem, že M akceptuje w právě tehdy, když M! zastaví na vstupu w'. To můžeme provést třeba následujícím způsobem: Stroj M! vznikne ze stroje 1 M tak, že z něj odstraníme všechny přechody do zamítajícího stavu. Přitom ponecháme w = w'. Potom zřejmě M! zastaví na vstupu w tehdy a jen tehdy, pokud jej akceptuje, tj. pokud jej akceptoval již automat M. Tento postup přitom zřejmě můžeme provést algoritmicky, čili tato redukce je totálně vyčíslitelná, jak se v definici požaduje. HALT < ACCEPT: V opačném směru chceme z řetězce A4#w udělat řetězec M'#w' takový, že stroj M zastaví na vstupu w právě tehdy, když stroj M! akceptuje vstup w'. Opět nebude potřeba měnit vstup, čili položíme w' = w. Stroj M! získáme ze stroje M tak, že v něm všechny přechody vedoucí do zamítajícího stavu zavedeme do akceptujícího. Tímto způsobem bude stroj M! akceptovat právě všechny vstupy, které stroj M akceptovat nebo zamítal, tedy na nichž svůj výpočet zastavil v konečném čase. Věta 18.1. Důležité vlastnosti redukce: 1. Relace < je reflexivní a transitivní. 2. Je-li B rekurzivní a A < B, pak A je rekurzivní. 3. Je-li B rekurzivně spočetný a A < B, pak A je rekurzivně spočetný. 4. Pokud A není rekurzivní a A < B, pak B není rekurzivní. 5. Pokud A není rekurzivně spočetný a A < B, pak B není rekurzivně spočetný. Příklad 2. Problém zastavení je pouze částečně rozhodnutelný, ale není rozhodnutelný. Snadno se ukáže, že tento problém je částečně rozhodnutelný tak, že pro něj sestrojíme Turingův stroj. Tento stroj bude fungovat podobně jako univerzální Turingův stroj tím, že bude simulovat činnost stroje na vstupu pouze s tím rozdílem, že akceptujeme, jestliže simulovaný stroj akceptuje nebo zamítá. V ostatních případech simulovaný i simulující stroj cyklí. Částečná rozhodnutel-nost problému zastavení také plyne z výše dokázané redukce HALT < ACCEPT. Z opačné redukce ACCEPT < HALT zase plyne, že problém zastavení je neroz-hodnutelný. Poznámka. Předchozí příklad ilustruje dva postupy, které budeme používat k důkazu, že je nějaký jazyk A pouze rekurzivně spočetný: 1. Buď nalezneme ekvivalenci A = R, kde R je jiný pouze rekurzivně spočetný jazyk, 2. nebo sestrojíme Turingův stroj rozpoznávající A a nalezneme redukci N < A, kde N je nějaký nerekurzivní jazyk. Příklad 3. Problém neprázdno■ A je regulární c) A je rekurzivně spočetný a Ac < A =>• A je rekurzivní d) A je rekurzivně spočetný a, A < Ac =>• A je rekurzivní e) A < B a A je rekurzivní =>• B je rekurzivní f) A je rekurzivně spočetný =>• A < HALT Definice. Postův systém nad S je konečná množina dvojic: P = {(ai,A)|ai,AeE*,l