1 Tvrzení i. Jazyk A není rekurzivní. {(Ai) | výpočet TS Ai nad slovem e je konečný} Myšlenka důkazu. Budeme chtít ukázat, že nějaký jazyk, o kterém víme, že není rekurzivní, se redukuje na jazyk A. Pak jazyk A jistě nemůže být rekurzivní. Přirozenou volbou takového známého nerekurzivního jazyka je HALT, protože stejně jako v jazyce A rozhoduje o příslušnosti slova do jazyka HALT konečnost nějakého výpočtu Turingova stroje. Chceme tedy najít redukci HALT abecedu jazyka A. Pro libovolný Turingův stroj Ai a slovo w označme jako Tm,w Turingův stroj, který se pro libovolný vstup chová následujícím způsobem: 1. Smaž vstupní pásku. 2. Zapiš na vstupní pásku slovo w a posuň hlavu zpět na začátek pásky. 3. Spusť výpočet stroje Ai (tedy přepni se do počátečního stavu stroje Ai). Dále označme jako %o stroj, který pro libovolný vstup cyklí. Definujeme funkci /: Z* —> * pro každé slovo x G Z* následujícím předpisem: /(*) = (Tm,w)> jestliže x = (Ai, w) pro nějaký TM Ai a slovo w, (Too), jinak. Ukážeme, že funkce / je redukce HALT na A. Protože víme, že pokud L = {0,1}. Stroj Tm,ui je přesně stroj M' z myšlenky důkazu, jen je parametrizovaný libovolným strojem M a slovem w. Druhý případ v definici je nutný, aby funkce / byla totální. Ne každé slovo nad abecedou Z je totiž kódem dvojice TM a slova. Tedy, že / je totální, vyčíslitelná a pro každé x G Z* platí x G HALT /(x) G A. 2 Funkce / je jistě totální. Také je vyčíslitelná, protože pomocí TM je možné zkontrolovat, jestli je slovo x kódem dvojice TM a slova, a také je možné zkonstruovat kód příslušného Turingova stroje Tm,w nebo Tco ■ Obě tyto úlohy je totiž možné vyřešit algoritmicky. Zbývá dokázat, že pro každé slovo x G Z* platí x E HALT právě tehdy, když f(x) E A. Dokážeme obě tyto implikace: • „=>": Předpokládejme, že x G HALT. Tedy z definice jazyka HALT platí x = (Ai,w), kde Ai je Turingův stroj, jehož výpočet nad slovem w je konečný. Z definice funkce / dostáváme, že f(x) = f((M,w)) = (TM,w)- Výpočet TM Tm,w nad každým vstupním slovem je také konečný, protože tento TM v prvním kroku smaže vstupní pásku, ve druhém na ni zapíše slovo w a pak spustí výpočet stroje Ai, a ten je z předpokladu na slově w konečný. Tím spíše je tedy konečný výpočet TM Tm,w nad slovem e, a tedy f(x) = (Tm,w) £ A, což jsme chtěli dokázat. • „<=": Tento směr implikace ukážeme obměnou. Předpokládejme tedy, že x ^ HALT. Rozlišíme dva případy, proč slovo x může nebýt v jazyce HALT: - Slovo x není kódem dvojce TM a slova: Pak z definice funkce / dostáváme f(x) = (Tco)- Turingův stroj To cyklí nad každým vstupem, tím spíše tedy cyklí nad vstupem e, a tedy /(x) = (To) A, což jsme chtěli dokázat. - Platí x = (Ai, iv), kde Ai je Turingův stroj, jehož výpočet nad slovem w je nekonečný: Z definice funkce / dostáváme, že /(x) = f((Ai,w)) = (TMlW)- Výpočet TM Tm,w nad každým vstupním slovem je také nekonečný, protože tento TM v prvním kroku smaže vstupní pásku, ve druhém na ni zapíše slovo w a pak spustí výpočet stroje Ai, a ten je z předpokladu na slově w nekonečný. Tím spíše je tedy nekonečný výpočet TM Tm,w nad slovem e, a tedy /(x) = (Tm,w) ^ A, což jsme chtěli dokázat. Ukázali jsme tedy, že platí HALT • /(x) t A