Státnice - Věty o rekurzi

Z ωικι.matfyz.cz
Přejít na: navigace, hledání

Tohle je poněkud obšírnější výcuc ke státnicovým okruhům z vyčíslitelnosti pro obory Matematická lingvistika a Softwarové systémy, pocházející ze Strojilových skript, papírových zápisků A. Kazdy a zápisků z předmětu Vyčíslitelnost I ze Studnice -- Tuetschek 14:01, 17 Aug 2010 (CEST)

Věty o rekurzi[editovat | editovat zdroj]

Věta (O rekurzi, o pevném bodě, self-reference)[editovat | editovat zdroj]

Jestliže $ f\,\! $ je ORF1 jedné proměnné, potom existuje $ a\,\! $ takové, že $ \varphi_{f(a)}(x)\simeq \varphi_a(x)\,\! $ pro všechna $ x\,\! $ (kde $ \varphi_a(x)\,\! $ značí $ a\,\! $-tou funkci, tedy odpovídá $ \Psi_1(a,x)\,\! $).

Důkaz[editovat | editovat zdroj]

Zjevně platí následující -- první výraz je ČRF, má tedy své číslo $ e\,\! $, druhá rovnost plyne ze S-m-n věty:

$ \lambda z,\!x (\varphi_{f(s_1(z,z))}(x)) \simeq \Psi_2(e,z,x) \simeq \varphi_{s_1(e,z)}(x) $

Dosadíme $ z=e\,\! $ a dostáváme hledané $ a=s_1(e,e)\,\! $. Platí totiž $ \varphi_{f(s_1(e,e))}(x) \simeq \Psi_2(e,e,x) \simeq \varphi_{s_1(e,e)}(x). $

Vlastnosti programů $ a $ a $ f(a) $[editovat | editovat zdroj]

Funkce $ f\,\! $ zobrazuje program na program. Bod $ a\,\! $ je pevným bodem zobrazení $ f\,\! $. Jak vypadají programy $ a\,\! $ a $ f(a)\,\! $? Který z nich počítá déle? Uvidíme, že program $ a\,\! $ počítá déle než $ f(a)\,\! $.

Co dělá program $ e\,\! $ na datech $ (z,x)\,\! $? Počítá $ \varphi_{f(s_1(z,z))}\,\! $, tj. vezme $ z\,\! $ a spočítá neprve $ s_1(z,z)\,\! $, potom $ f(s_1(z,z))\,\! $, který ale nemusí konvergovat. Jestliže $ f(s_1(z,z))\!\!\downarrow\,\! $, spustí se na vstup $ x\,\! $.

Co dělá program $ a\,\! $? Program $ a\,\! $ vznikne jako $ s_1(e,e)\,\! $. Mějme na vstupu $ x\,\! $. Program $ a\,\! $ vezme $ e\,\! $ a přidá ho k $ x\,\! $ a spustí program $ e\,\! $ na $ (e,x)\,\! $. Co udělá program $ e\,\! $ na těchto datech? Spočítá $ s_1(e,e)\,\! $ (tedy spočítá $ a\,\! $), potom $ f(s_1(e,e))=f(a)\,\! $ a spustí program $ f(a)\,\! $ na $ x\,\! $.

Program $ a\,\! $ tedy neprve spočítá $ a\,\! $, potom spočítá $ f(a)\,\! $ (pokud konverguje) a ten simuluje na vstupu $ x\,\! $. Program $ a\,\! $ je tedy složitější než $ f(a)\,\! $ a počítá déle.

Poznámka z $ \lambda $kalkulu[editovat | editovat zdroj]

V $ \lambda $kalkule sa ekvivalentné tvrdenie ukazuje trošku jednoduchšie. Pre každý $ \lambda $term $ F $ (program $ F $) existuje $ \lambda $term $ X $ taký, že $ X = FX $ (program $ F $ aplikovaný na $ X $ sa rovná $ X $).

Dôkaz je nasledovný

  • Majme $ F $, pre ktoré chceme nájsť jeho pevný bod X.
  • Nech $ W = \lambda x.F(xx) $ (to je funkcia, ktorá $ x $ priradí $ F(xx) $).
  • $ X = WW $ (to môžeme chápať ako program/funkciu $ W $ aplikovaný na $ W $)
  • $ X = WW = (\lambda x.F(xx)) W = F(WW) = F(X) $ (tretia rovnosť je $ \beta $pravidlo $ \lambda $kalkulu. Ak si ale $ (\lambda x.F(xx)) W $ predstavíme ako funkciu, ktorá $ x $ priradí $ F(xx) $ aplikovanú na $ W $, rovnosť je (snáď) jasnejšia).

Věta (O generování pevných bodů)[editovat | editovat zdroj]

Pro každou ORF1 $ f $ existuje prostá rostoucí PRF $ g\,\! $ taková, že platí:

$ \varphi_{f(g(j))}(x)\simeq\varphi_{g(j)}(x)\,\! $

Tedy $ g\,\! $ rostoucím způsobem generuje nekonečně mnoho pevných bodů funkce $ f\,\! $.

Důkaz[editovat | editovat zdroj]

Postupujeme stejně jako v důkazu předchozí věty, jen máme o proměnnou (parametr $ j\,\! $ funkce $ g\,\! $) navíc, tj. platí $ \varphi_{f(s_2(z,z,j))}(x)\simeq\Psi_3(e,z,j,x)\simeq\varphi_{s_2(e,z,j)}(x)\,\! $. Zvolme $ g(j)=s_2(e,e,j)\,\! $.

Věta (O rekurzi pro více proměnných)[editovat | editovat zdroj]

Nechť $ f\,\! $ je ČRF $ n+1\,\! $ proměnných. Potom existuje číslo $ a\,\! $ takové, že platí $ \varphi_a(x_1,\ldots,x_n)\simeq f(a,x_1,\ldots,x_n)\,\! $ (tj. $ a\,\! $ je indexem funkce $ \lambda{x_1,\ldots,x_n} f(a,x_1,\ldots,x_n)\,\! $).

Důkaz[editovat | editovat zdroj]

$ f(y,x_1,\ldots,x_n)\simeq \Psi_{n+1}(e,y,x_1,\ldots,x_n)\simeq \varphi_{s_1(e,y)}(x_1,\ldots,x_n) $

Následně aplikujeme větu o rekurzi na $ s_1(e,y)\,\! $ v proměnné $ y\,\! $ a dostáváme hledané $ a\,\! $ (podle VR platí: $ \exists a: \varphi_{s_1(e,a)}\simeq \varphi_{a}\,\! $).

Věta (O rekurzi v závislosti na parametrech)[editovat | editovat zdroj]

Jestliže $ f\,\! $ je ČRF $ n+1\,\! $ proměnných, potom existuje PRF $ g\,\! $ o $ n\,\! $ proměnných taková, že platí:

$ \varphi_{f(g(y_1,\ldots,y_n),y_1,\ldots,y_n)}(x)\simeq \varphi_{g(y_1,\ldots,y_n)}(x)\,\! $

Důkaz[editovat | editovat zdroj]

Pro $ n=0\,\! $ je to totéž jako verze bez parametrů. $ g\,\! $ nachází pevné body v závislosti na parametrech. Podobně jako v předchozích větách platí: $ \varphi_{f(s_{n+1}(z,z,y_1,\ldots,y_n),y_1,\ldots,y_n)}(x) \simeq \Psi_{n+2}(e,z,y_1,\ldots,y_n,x) \simeq \varphi_{s_{n+1}(e,z,y_1,\ldots,y_n)}(x)\,\! $. Zvolme $ g(y_1,\ldots,y_n)=s_{n+1}(e,e,y_1,\ldots,y_n)\,\! $.

Riceova věta[editovat | editovat zdroj]

Věta (Rice)[editovat | editovat zdroj]

Jestliže $ \mathcal{A}\,\! $ je třída ČRF (jedné proměnné), která je netriviální (nejsou to všechny funkce a není prázdná), potom indexová množina $ A_{\mathcal{A}} = \{ x : \varphi_x \in \mathcal{A}\}\,\! $ (indexy programů, které vyčíslují funkce z $ \mathcal{A} $) je nerekurzivní.

Důkaz[editovat | editovat zdroj]

Sporem. Nechť $ A_{\mathcal{A}}\,\! $ je rekurzivní. Potom lze vytvořit ORF $ f\,\! $ takovou, že všechny prvky z $ A_{\mathcal{A}}\,\! $ zobrazí na nějaký prvek $ b \notin A_{\mathcal{A}}\,\! $ a všechny prvky mimo $ A_{\mathcal{A}}\,\! $ zobrazí na nějaký prvek $ a \in A_{\mathcal{A}}\,\! $. Podle věty o rekurzi existuje pevný bod $ f\,\! $ -- $ u_0\,\! $, tedy platí:

$ \varphi_{u_0}=\varphi_{f(u_0)} \,\! $

Takže:

$ u_0 \in A_{\mathcal{A}} \Rightarrow f(u_0)=b \notin A_{\mathcal{A}} $
$ u_0 \notin A_{\mathcal{A}} \Rightarrow f(u_0)=a \in A_{\mathcal{A}} $

To je ovšem spor, protože $ u_0\,\! $ a $ f(u_0)\,\! $ jsou indexy stejné funkce, a tedy buď obě čísla v $ A_{\mathcal{A}}\,\! $ leží, nebo obě neleží.

Důsledky[editovat | editovat zdroj]

Pozor, nejedná se o třídu programů, ale třídu funkcí. Tedy i pro jednoprvkovou $ \mathcal{A}\,\! $ bude $ A_{\mathcal A}\,\! $ nekonečná a nerekurzivní (každá funkce je vyčíslovaná nekonečně mnoha programy a rozhodnout o jejich ekvivalenci nelze efektivně).

Proto platí:

  • Nechť $ \mathcal{A}=\{\varphi_e\}\,\! $, potom $ A_{\mathcal{A}}=\{x:\varphi_x=\varphi_e\}\,\! $ je nerekurzivní.
  • Rozhodnout o rovnosti funkcí vyčíslovaných dvěma programy nelze algoritmicky.

* ^ ad 1 Věta platí i pro ČRF, s využitím toho, že ani jedna ze stran $ \simeq $ nemusí dávat smysl, aby výraz platil.