opora
KAPITOLA 6. MEZE ROZHODNUTELNOSTI 135 6.8.3 Primitivně rekurzivní funkce Nyní definujme tři způsoby vytváření nových, složitějších funkcí. Primitivně rekurzivní funkce pak budou takto tvořeny z funkcí počátečních. 1. Kombinace: Kombinací dvou funkcí f : N k → N m a g : N k → N n získáme funkci, pro kterou: Např.: π 3 1 × π 3 3(4, 12, 8) = (4, 8) f × g : N k → N m+n f × g(x) = (f(x), g(x)), x ∈ N k 2. Kompozice: Kompozice dvou funkcí f : N k → N m a g : N m → N n je funkce, pro kterou: Např.: σ ◦ ξ() = 1 σ ◦ σ ◦ ξ() = 2 g ◦ f : N k → N n g ◦ f(x) = g(f(x)), x ∈ N k 3. Primitivní rekurze je technika, která umožňuje vytvořit funkci f : N k+1 → N m na základě jiných dvou funkcí g : N k → N m a h : N k+m+1 → N m rovnicemi: f(x, 0) = g(x) f(x, y + 1) = h(x, y, f(x, y)), x ∈ N k Ilustrace schématu vyčíslení (pro y = 3): f(x,3)=h(x,2,f(x,2)) f(x,2)=h(x,1,f(x,1)) f(x,1)=h(x,0,f(x,0)) f(x,0)=g(x) Příklad 6.8.3 Předpokládejme, že chceme definovat funkci f : N 2 → N, jejíž hodnoty f(x, y) udávají počet vrcholů x-árního stromu hloubky y, který je pravidelný (úplný): x x x Zřejmě: 1. f(x, 0) = 1 2. strom hloubky y má x y listů. Zvětšením hloubky o jedničku na y + 1 musíme přidat x y+1 = x y · x vrcholů
KAPITOLA 6. MEZE ROZHODNUTELNOSTI 136 Takže funkci f můžeme definovat následujícím předpisem: f(x, 0) = x 0 , f(x, y+ 1) = f(x, y) + x y · x. Např.: f(3, 2) = f(3, 1) + 3 1 · 3 = f(3, 0) + 3 0 · 3 + 3 1 · 3 = 1 + 3 + 9 = 13 Příklad 6.8.4 Uvažujme funkci plus : N 2 primitivní rekurze takto: → N. Může být definována pomocí což vyjadřuje: 1. x + 0 = x plus(x, 0) = π 1 1(x) plus(x, y + 1) = σ ◦ π 3 3(x, y, plus(x, y)) 2. x + (y + 1) = (x + y) + 1 = σ(x + y) Definice 6.8.1 Třída primitivních rekurzivních funkcí obsahuje všechny funkce, které mohou být z počátečních funkcí vytvořeny: 1. kombinací, 2. kompozicí a 3. primitivní rekurzí. Věta 6.8.1 Každá primitivní rekurzivní funkce je totální funkcí. Důkaz. Počáteční funkce jsou totální. Aplikací kombinace, kompozice a primitivní rekurze na totální funkce dostaneme totální funkce. ✷ 6.8.4 Příklady primitivně rekurzivních funkcí Třída primitivně rekurzivních funkcí zahrnuje většinu funkcí typických v aplikacích počítačů. Ukážeme, jak je definovat z počátečních pomocí kombinace, kompozice a primitivní rekurze. Konvence: Namísto funkcionálních zápisů typu h ≡ plus ◦(π 3 1 ×π 3 3) budeme někdy používat zápis h(x, y, z) = plus(x, z) nebo h(x, y, z) = x + z. Konstantní funkce: Zavedeme funkci κ n m, která libovolné n-tici x ∈ N n přiřadí konstantní hodnotu m ∈ N κ 0 m ≡ σ } ◦ σ ◦ {{ . . . ◦ σ } ξ m−krát Také pro n > 0 je κ n m funkce rekurzivně primitivní: κ n m(x, 0) = κ n−1 m (x) κ n m(x, y + 1) = πn+1 n+1 (x, y, κn m(x, y)) Např.: κ 2 3(1, 1) = π 3 3(1, 0, κ 2 3(1, 0)) = κ 2 3(1, 0) = κ 1 3(1) = κ 1 3(0) = κ 0 3() = 3 Kombinací funkcí κ n m dostáváme konstanty z N n , n > 1. Např.: κ 3 2 × κ 3 5(x, y, z) = (2, 5) Funkce násobení : mult(x, 0) = κ 1 0(x) mult(x, y + 1) = plus(x, mult(x, y))
- Page 85 and 86: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 87 and 88: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 89 and 90: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 91 and 92: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 93 and 94: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 95 and 96: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 97 and 98: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 99 and 100: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 101 and 102: Kapitola 5 Turingovy stroje Cílem
- Page 103 and 104: KAPITOLA 5. TURINGOVY STROJE 102 5.
- Page 105 and 106: KAPITOLA 5. TURINGOVY STROJE 104
- Page 107 and 108: KAPITOLA 5. TURINGOVY STROJE 106 L:
- Page 109 and 110: KAPITOLA 5. TURINGOVY STROJE 108 St
- Page 111 and 112: KAPITOLA 5. TURINGOVY STROJE 110 p
- Page 113 and 114: KAPITOLA 5. TURINGOVY STROJE 112
- Page 115 and 116: KAPITOLA 5. TURINGOVY STROJE 114 -
- Page 117 and 118: KAPITOLA 5. TURINGOVY STROJE 116 5.
- Page 119 and 120: KAPITOLA 5. TURINGOVY STROJE 118 D
- Page 121 and 122: KAPITOLA 5. TURINGOVY STROJE 120 5.
- Page 123 and 124: KAPITOLA 5. TURINGOVY STROJE 122 5.
- Page 125 and 126: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 127 and 128: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 129 and 130: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 131 and 132: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 133 and 134: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 135: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 139 and 140: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 141 and 142: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 143 and 144: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 145 and 146: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 147 and 148: KAPITOLA 7. SLOŽITOST 146 7.1.3 Sl
- Page 149 and 150: KAPITOLA 7. SLOŽITOST 148 Příkla
- Page 151 and 152: KAPITOLA 7. SLOŽITOST 150 • Napr
- Page 153 and 154: KAPITOLA 7. SLOŽITOST 152 7.2.4 Ne
- Page 155 and 156: KAPITOLA 7. SLOŽITOST 154 • Stro
- Page 157 and 158: KAPITOLA 7. SLOŽITOST 156 7.3.4 Uz
- Page 159 and 160: KAPITOLA 7. SLOŽITOST 158 Pokud pr
- Page 161 and 162: KAPITOLA 7. SLOŽITOST 160 7.5.1 Po
- Page 163 and 164: KAPITOLA 7. SLOŽITOST 162 7.5.4 V
- Page 165 and 166: KAPITOLA 7. SLOŽITOST 164 6. Uveď
KAPITOLA 6. MEZE ROZHODNUTELNOSTI 135<br />
6.8.3 Primitivně rekurzivní funkce<br />
Nyní definujme tři způsoby vytváření nových, složitějších funkcí. Primitivně rekurzivní<br />
funkce pak budou takto tvořeny z funkcí počátečních.<br />
1. Kombinace:<br />
Kombinací dvou funkcí f : N k → N m a g : N k → N n získáme funkci, pro<br />
kterou:<br />
Např.: π 3 1 × π 3 3(4, 12, 8) = (4, 8)<br />
f × g : N k → N m+n<br />
f × g(x) = (f(x), g(x)), x ∈ N k<br />
2. Kompozice: Kompozice dvou funkcí f : N k → N m a g : N m → N n je funkce,<br />
pro kterou:<br />
Např.: σ ◦ ξ() = 1<br />
σ ◦ σ ◦ ξ() = 2<br />
g ◦ f : N k → N n<br />
g ◦ f(x) = g(f(x)), x ∈ N k<br />
3. Primitivní rekurze je technika, která umožňuje vytvořit funkci f : N k+1 →<br />
N m na základě jiných dvou funkcí g : N k → N m a h : N k+m+1 → N m<br />
rovnicemi:<br />
f(x, 0) = g(x)<br />
f(x, y + 1) = h(x, y, f(x, y)), x ∈ N k<br />
Ilustrace schématu vyčíslení (pro y = 3):<br />
f(x,3)=h(x,2,f(x,2))<br />
f(x,2)=h(x,1,f(x,1))<br />
f(x,1)=h(x,0,f(x,0))<br />
f(x,0)=g(x)<br />
Příklad 6.8.3 Předpokládejme, že chceme definovat funkci f : N 2 → N, jejíž hodnoty<br />
f(x, y) udávají počet vrcholů x-árního stromu hloubky y, který je pravidelný<br />
(úplný):<br />
x<br />
x<br />
x<br />
Zřejmě:<br />
1. f(x, 0) = 1<br />
2. strom hloubky y má x y listů. Zvětšením hloubky o jedničku na y + 1 musíme<br />
přidat x y+1 = x y · x vrcholů