(rekurzivní a rekurzivně spočetné množiny. První Riceova věta. Redukce a její vlastnosti. Uzávěrové vlastnosti rekurzívních a rekurzivně spočetných množin. Příklady rekurzivních a rekurzivně spočetných množin.)
V zadání sice tyto znalosti nejsou požadovány, ale myslím, že jsou nezbytné pro pochopení dalšího textu.
Vyčíslitelnost nám poskytuje základní klasifikaci problémů z hlediska jejich řešitelnosti.
V teorii vyčíslitelnosti uvažujeme 3 základní výpočetní modely: Turingovy stroje, RAM stroje a while programy. Nejčastěji se setkáme s problémy: Je funkce vyčíslitelná? Patří prvek do dané množiny?
Churchova teze 1)
Je důležité si uvědomit, že nejde o matematické tvrzení, tudíž nelze dokázat. Obecně se má za to, že platí, a proto některé důkazy vyčíslitelnosti problému se odkazují na tuto tezi (formálně to ale není správně!).
Poskytneme si nyní formálnější definice vyčíslitelnosti
Definice 3.1 Sémantická funkce programu 2)
Nechť P je while-program s proměnnými x1,…,xn, j >= 0. Definujeme funkci takto:
kde je stav takový, že
Funkce se nazývá sémantická funkce programu P (arity j).
Sémantická funkce je jak vidmo z definice taková funkce, která vyjadřuje chování programu, obsahuje v sobě výpočet algoritmu(abychom byly úplně přesní, tak by bylo třeba uvést definici kroku výpočtu algoritmu a další definice, ale pro základní pochopení to snad stačí).
Základní definice3)
Dále je důležitá numerace funkcí, jde o způsob, jakým očíslovat všechny sémantické funkce a tím pádem i všechny programy.
K tomu používáme funkci code: P→N 4) code(P) často nazýváme indexem programu P.
Další nástroj je standardní numerace programů a funkcí 5) použitím numerace získáme index programu/funkce.
Věta o numeraci 6)
Jak už sama věta říká, jde o univerzální funkci, této funkci když předložíme index funkce a vstupní parametry, tak vypočítá totéž, co by vypočítala funkce, jejíž index jsme zadali.
Rekurzivní a r.e. množiny popisují vyčíslitelné vlastnosti z pohledu množin. Důležitou vlastností množin je to, zda mají totálně vyčíslitelnou (rekurzivní) charakteristickou funkci (tak nazýváme funkci, která rozhoduje, zda prvek patří, nebo nepatří do množiny), množiny s totálně vyčíslitelnou charakteristickou funkcí nazýváme rekurzivní.
Další vlastnost je to, zda je množina definičním oborem vyčíslitelné funkce. Tuto vlastnost mají vyčíslitelně spočetné množiny(r.e. množiny).
Rekurzivní množiny jsou rozhodnutelné v tom smyslu, že existuje algoritmus pro rozhodování, zda prvek patří nebo nepatří do množiny. Naproti tomu pro r.e. existuje pouze algoritmus, který vytváří seznam prvků množiny.
Definice 6.1 Rekurzivní a rekurzívně spočetná množina 7)
V definici používáme f -1, rozumíme tím
Existují ekvivalentní definice
Definice 6.15 další definice rekurzívní spočetnosti (r.e.) 8)
Třídy rekurzivních množin a r.e. množin jsou různé. Každá rekurzivní množina je rekurzívně spočetná (pokud dokážeme rozhodnout, zda prvek patří do množiny, dokážeme i generovat prvky množiny), ale opak obecně neplatí. Důležitou roli hrají r.e. množiny, které nejsou rekurzivní(například problém zastavení, viz. příklady).
Riceova věta říká, že rozhodnutelnost je výjimkou, která potvrzuje pravidlo.
Věta 8.1 - Riceova 9)
Důkaz
Tvrzení dokážeme sporem. Předpokládejme, že pro všechna a platí . Předpokládejme, že I obsahuje index nějaké vyčíslitelné funkce (a tím i všechny její indexy), která je různá od prázdné funkce , a že obsahuje všechny indexy .
Nechť Pf(i) je program ( je index programu P):
Program P je tedy vyčíslitelný. Je zřejmé, že
Tedy pro všechna platí právě, když je definováno, t.j. .
Dále, je-li , pak (jakožto index funkce ).
Jestliže tedy , pak a proto .
Obráceně pak, jestliže , pak (jakožto index funkce ). Nechť je charakteristická funkce množiny I. Pak pro všechna platí:
Protože je totálně vyčíslitelná, je K rekurzivní, což je spor.
poznámka: jako index funkce používáme f(i) z toho důvodu, že f(i) nám říká, že máme funkci(totálně vyčíslitelnou) s jejíž pomocí jsme schopni vždy index programu P vypočítat(bude pro každé i jiný), stejně tak použijeme tuto funkci při dokazování problému zastavení v příkladech
Často se věta formuluje obráceně s využitím následující definice:
Definice 8.2 - respektování funkcí
Důsledek:
Netriviální (t.j. neprázdná a vlastní) podmnožina množiny N, která respektuje funkce, není rekurzivní.
Redukci jsme již použili v první Riecově větě, konkrétně v důkazu 1. R.v, kdy jsme využili sporu s rekurzivností K (množinu K jsme redukovali na I ).
Definice 9.1 Redukce 11)
Index m v označení relace znamená, že fce f nemusí být prostá (může být many-to-one)
Redukce je reflexivní, transitivní, tj. je kvaziuspořádání.
Redukce se používá k dokazování, že je množina rekurzivní, respektive r.e.
Věta 9.3 12)
Důsledek:
Redukce poskytuje nástroj na porovnání množin.
Věta
Důkaz viz skripta
Tato věta nám říká, že problém příslušnosti do K je alespoň tak těžký jako jakýkoliv jiný r.e. problém. Tj. pokud by existoval algoritmus pro rozhodování K, pak by existoval i algoritmus pro rozhodování libovolného r.e. problému. Protože je K r.e, říkáme, že K je nejtěžší množina mezi r.e. množinami, tj. je úplná na množině r.e.
Definice těžkosti a n-úplnosti
Lema 6.5 Uzavřenost vůči doplňku 13)
Lema 6.5 A a co-A jsou r.e. 14)
Věta 7.1 Rekurzivní a množina15)
Věta 7.4 uzávěrové vlastnosti r.e. 16)
Jde o svým způsobem vyslovenou uzavřenost r.e. množin vůči průniku a sjednocení. Wi značí množinu vyčíslenou i-tým programem.
Věta 7.7
Ač si nemyslím, že je v silách kohokoliv demonstrovat tyto příklady u SZZ včetně jejich řešení, uvádím tu i jejich řešení pro úplnost.
Problém zastavení K není rekurzivní, ale je r.e.
Problém verifikace: dokázat, kde g je pevná vyčíslitelná funkce není rekurzivní. (praktický důsledek: neumíme obecně sestrojit program, který zjistí, zda námi vytvořený program počítá co má.)
Problém ekvivalence: dokázat, není rekurzivní(praktický důsledek - program nezjistí, zda 2 programy počítají totéž)
Problém nezastavení co-K není r.e.
Asi nejdůležitějším příkladem této kapitoly je tzv. problém zastavení
Věta 4.7 Problém zastavení 17)
Důkaz:
Tvrzení dokážeme sporem. Předpokládejme, že funkce f je vyčíslitelná, nechť halt je program, který počítá funkci f. Uvažujme funkci takovou, že
program confuse, který počítá funkci g, vypadá následovně:
begin while halt(x1) = 1 do x1 = x1; x1 = 1 end;
Nechť e je index programu confuse. Pak pro všechna i. Z definice funkcí g a f pak dostáváme pro i = e
.
Dostáváme tím spor: je definováno, právě když není definováno. Funkce f proto nemůže být vyčíslitelná.
Důkaz, že K nerespektuje funkce: Existuje index tak, že 18). Tedy . Máme-li takové, že , pak Slovně: máme W, který vypíše svůj index19), které má index e, pokud máme program s indexem e', jehož funkce je stejná, tj. vypíše program e, pak nepatří do K.
Množinově můžeme problém zastavení popsat následovně:
Množina K není rekurziní jelikož její charakteristická funkce není totálně vyčíslitelná, ale je r.e.
Proč je tento problém tak důležitý?
Problém nezastavení, tj. co-K není r.e. dokážeme triviálně přes uzávěrové vlastnosti - Lema 6.5 A a co-A jsou r.e. ⇒ A je rekurzivní, takže pokud by byla co-K r.e. byla by K rekurzivní, což jsme dokázali, že není.
není rekurzivní.
Dle důsledku r.v. stačí ukázat, že A1 respektuje funkce a je netriviální.
Respektování funkcí:
Zřejmě index identické funkce do množiny patří a index prázdné ne, funkce je tedy netriviální (není prázdná a není vlastní podmnožinou N)
není rekurzivní. Můžeme to sice dokázat triviálně přes 1. r.v., ale použijeme redukci.
Nechť f(i) je index programu
zřejmě
Tedy právě když je definováno pro všechna x a to je právě když je totální. Funkce f je totálně vyčíslitelná, není rekurzivní a , tedy B není rekurzivní.
Marek Babák ICQ: 67179550) 99%, z mé strany hotovo, byl bych rád, kdyby to někdo prošel a napsal co si o tom myslí, nebylo to zcela triviální.
Je potřeba ještě zapracovat poznámky od Jitky Pospíšilové.
Diskuze
Pro snažší pochopení první Riceovy věty neformální vysvětlení, jak to chápu já:
Jde o redukci K na I. Chci ukázat, že pomocí rekurzivity množiny I bych uměl rozhodovat i množinu K. Jak teda můžu využít rekurzivitu I k rozhodování K? Vezmu si nějakou vyčíslitelnou funkci, , která má neprázdný definiční obor. Předpokládám, že všechny její indexy jsou v I (dokazuji sporem). Potom předpokládám, že prázdná funkce () má všechny svoje indexy v co-I. Díky tomu můžu u každého programu podle jeho indexu rozhodnout, zda se rovná nebo , prostě podle toho, jestli ten index patří do I nebo ne.
Když si vezmu program
begin end
potom jeho index dokážu pro každé i spočítat (označím si ten index f(i)). Tento program se rovná buď nebo podle toho, jestli nebo ne. Takže právě když , pak i a to je spor.
Hm.. tak nevim, jestli tohle někomu pomůže :)
Jo dobře jsi to vysvětlil. Ten důkaz je tady nekompletní chybí tam nějaké předpoklady.
Souhlas, dobře vysvětlený, přidal jsem předpoklady, ale pořád je to takové těžkopádné, pokud to někdo chcete upravit, tak můžete.
Množina K nie je r.e.? Množina K predsa je r.e., alebo sa mýlim?
samozrejme, ze je..inak by to nemohol byt uplny problem pre r.e., treba to v texte opravit
opraveno, se mi tam zamotaly 2 myšlenky dohromady :|
V definici 6.1 je chyba. Rozhodovacia funkcia pre A musi byt totalne vycislitelna.
jj, ted jsem se ji ucil, tak to tam opravim, naopak u r.e. nemusi byt TVF, kdyz zadame podminku, ze B!=0. V jednom miste je tam jeste pomotana charakteristicka funkce a schematicka + nejaky preklepy, tak to opravim.
Upravil jsem sekci příklady, jednak jsem přidal základní přehled příkladů a oddělil je od samotného řešení a druhak jsem přidal nějaké nové
Neuteklo ti ve vete 7.4 ve druhe casti na prave strane W? taky g,h jsou z NxN → N a aplikace je tvaru g(ij), tj. N → N. Vim ze to nejsou moc dulezite pripominky, pisu to jen abys o tom vedel.
POZOR: v dvoch definíciách r.e. množiny boli chyby, bolo tam:
Základná definícia:
a potom ešte v prvej alternatívnej definícii bolo:
Správne to má byť:
a:
totálněvyčíslitelná funkce taková, že B=range(f)Idem to opraviť a doplniť ďalšie definície…
EDIT: Hotovo