{{theorem | <math>h</math> je ČRF <math>n</math> proměnných ⇒ <math>h</math> je Turingovsky vyčíslitelná

| ČRF ⇒ TS }}

:💡 Přesněji, existuje Turingův stroj <math>M_h</math> takový, že pro každou <math>n</math>-tici přirozených čísel <math>x_1, x_2, \dots, x_n</math> platí

<math>M_h((x_1)_B\#(x_2)_B\#\dots\# (x_n)_B)\downarrow\Leftrightarrow h(x_1, x_2, \dots, x_n)\downarrow</math>

a platí-li <math>h(x_1, x_2, \dots, x_n)\downarrow=y</math>, potom výpočet Turingova stroje <math>M_h</math> vydá na výstupu řetězec <math>(y)_B</math>.

Dk (zakladni funkce vycislim; substituci provedu paralelne na nekolika paskach; prim. rekurzi delam pocitadlem cyklu; minimalizaci taky)

definujeme TS pro základní funkce a operátory pro odvození <math>h</math>:

  • Základní fce

    • nulová funkce <math>o(x)=0</math>

      • ekvivalentní této operaci na TS: smaže celou pásku a zapíše 0

    • následník <math>s(x)</math>

      • implementuje přičtení 1 k bin.číslu

    • projekce <math>I^j_n (x_1,..,x_n)</math>

      • smaže prvních <math>j-1</math> bloků

      • přeskočí <math>j</math> (na něj děláme projekci)

      • smaže zbytek

      • vrátí se na jediný nesmazaný <math>j</math>

  • Operátory

    • substituce <math>S_n^m</math> pomocí 3 páskového TS <math>M_h</math>:

    kde: <math>h(x_1,...,x_n) ≃ f(g_1(x_1,...,x_n),...,g_m(x_1,...,x_n))</math>

    • na 1. pásce je vstup

    • postupne simulujeme stroje <math>M_{gi}</math> na 2. pásce (vždy jí smažeme a zkopírumeme na ní 1.), výsledky prekopirujeme na konec 3. (💡 oddělovač #)

    • na 3. pasce pustime stroj <math>M_f</math> (výsledek pak bude na 3. pásce)

    • primitivní rekurze <math>R_n</math> pomocí 3 páskového TS <math>M_h</math> (for-cyklus):

    kde: <math>h(0, x_2, ..., x_n) ≃ f(x_2, ..., x_n)</math>

    <math>h(i+1, x_2, ..., x_n) ≃ g(i, h(i,x_2,...,x_n), x_2,..., x_n)</math>

    • (init-for-cyklu):

      • na 1. pásce je vstup, na 2.pásce 0 (čítač pro for)

      • na 3. je 1. bez prvního čísla a pak na ní pustíme <math>M_f</math>

    • (for-cyklus): dokud je číslo na 2. <číslo na začátku 1. (<math> x_1</math>)

      • 2.pásku zkopírujem před výsledek na 3. a na konec zkopirujem 1. (bez prvního čísla)

      • na 3. pasce pustime stroj <math>M_g</math>

    • výsledek je pak na 3. pásce

    • minimalizace <math>M_n(\mathbf{f})=\mathbf{h}</math> pomocí 2 páskového TS <math>M_h</math> (while-cyklus):

    <math>\mathbf{h}(x_1,...,x_n)\downarrow ≃ min \{ y|\mathbf{f}(x_1,...,x_n,y)\downarrow = 0 \quad a \quad \forall z<y: \mathbf{f}(x_1,...,x_n,z)\downarrow \ne 0\}</math>

    • na 1. pásce je vstup + #0 (čítač pro while)

    • (while-cyklus): dokud simulace <math>M_f</math> na 2.pásce nevrátí 0

      • smaz 2. a nahraj naní 1. pásku s čítačem+1

      • nasimuluj <math>M_f</math> na 2.

    • čítač y zapiš na 1.