Logika A
6. MASZYNY TURINGA I FUNKCJE REKURENCYJNE
6.1. Maszyna Turinga składa si¸e z taśmy (bez końców) i głowicy czytaj¸acej. Symbole, wpisywane w polach taśmy, tworz¸a alfabet zewn¸etrzny S maszyny Turinga. B¸edziemy zakładać, że S = {0, 1}, gdzie 0 odpowiada polu pustemu. Alfabet wewn¸etrzny maszyny Q = {q1, ..., qn, q0} jest zbiorem stanów (oznaczanych literami qi) głowicy czytaj¸acej. Zawsze zakładamy że q1 jest stanem pocz¸atkowym, a q0 jest stanem końcowym (STOP).
Każdy krok głowicy składa si¸e z nast¸epuj¸acych działań (w zależności od symbolu s w polu i od stanu q głowicy): (1) wpisywanie (lub niewpisywanie) symbolu ze zbioru S w polu, na którym głowica si¸e znajduje; (2) przesuni¸ecie (lub nieprzesuni¸ecie) o jedno pole w prawo lub w lewo; (3) zmiana stanu.
Schematycznie opis kroku oznaczamy przez:
sq → s0Rq0, gdzie R ∈ {N, P, L},
i nazywamy poleceniem maszyny Turinga. Niepusty zbiór poleceń nazywamy programem maszyny Turinga.
6.2. Zadanie. Znaleźć programy realizuj¸ace nast¸epuj¸ace przekształcenia taśmy.
A : 00
q1
x
z}|{1...100 → 00
x+1
z }| { 1...11
q0
0,
B : 000000000
q1
x
z}|{1...10...0
y
z}|{1...10 → 00
q0
x
z}|{1...10
y
z}|{1...100,
C : 00
q1
100 → 00101
q0
00,
D : 00000010...0
q1
0000 → 01
q0
0...0,
D0 : 010...01...1
q1
00 → 01
q0
0...01...100,
E : 00
q1
x
z}|{1...10 →
00q2
x
z}|{1...10 : x 6= 0
00q3
x
z}|{1...10 : x = 0 ,
1
F : 0 ∗
q1
1 → 0 ∗
q0
0,
J : 00000000
q1
10...01...10 → 010...01...1
q0
0,
H : 00
q1
10...01 → 011...1
q0
01,
I : 000000
q1
y1
z}|{1...10
y2
z}|{1...10...0
ym
z}|{1...10 → 00...0
ym
z }| { 1...1
q0
0,
K : 00
q1
x
z}|{1...10 → 00
q0
x
z}|{1...10
x
z}|{1...10.
Funkcja f (x1, ..., xn) ze zbioru n-elementowych ci¸agów liczb naturalnych ωn(przez ω oznaczamy zbiór liczb naturalnych) w zbiór ω nazywa si¸e funkcj¸a obliczaln¸a, jesli istnieje program maszyny Turinga taki, że głowica zaczynaj¸ac
wykonanie programu w sytuacji
0000000
q1
l1
z}|{1...10
l2
z}|{1...10...0
ln
z}|{1...1000000000000000000000
kończy wykonanie w sytuacji
000000000000000
qo
f (l1,...,ln)
z}|{1...1 000000000000000000000000000000000000000
6.3. Zadanie. Znaleźć programy obliczaj¸ace nast¸epuj¸ace funkcje:
s(x): y = x + 1, O(x): y = 0;
I23(x1, x2, x3): y = x2;
y = 1 : x ∈ {0, 2, ...}
0 : x ∈ {1, 3, ...} .
6.4. Funkcje rekurencyjne. Na zbiorze wszystkich funkcji cz¸eściowych określonych na ω wprowadzamy nast¸epuj¸ace operatory.
2
Operator złożenia g = S(fm, f1n, ..., fmn) jest określony przez równość g(x1, ..., xn) = f (f1(x1, ..., xn), ..., fm(x1, ..., xn)),
gdzie Dom(g) składa si¸e z takich ci¸agów l1, ..., ln, że wartości kj = fj(l1, ..., ln) s¸a określone i f jest określona na k1, ..., km.
Operator rekursji perwotnej gn+1 = P R(fn+2, hn) jest określony przez:
g(x1, ..., xn, 0) = h(x1, ..., xn), ...
g(x1, ..., xn, i + 1) = f (x1, ..., xn, i, g(x1, ..., xn, i)), ...,
gdzie Dom(g) składa si¸e z takich ci¸agów l1, ..., ln, l, że wartości k0 = h(l1, ..., ln) i kj = f (l1, ..., ln, j − 1, kj−1), 1 ≤ j ≤ l, s¸a określone.
µ-Operator gn = µ(fn+1) jest określony przez:
g(x1, ..., xn) = min{y : f (x1, ..., xn, y) = 0},
gdzie Dom(g) składa si¸e z takich ci¸agów l1, ..., ln, że wartości kj = f (l1, ..., ln, j), 0 ≤ j, s¸a określone do pewnego j spełniaj¸acego kj = 0.
Funkcja f jest rekurencyjna jeśli jest zbudowana z funkcji O(x), s(x), Imn(x1, ..., xn) = xm, 1 ≤ m ≤ n ∈ ω, przez skończon¸a ilość stosowań opera- torów S, P R i µ.
6.5. Zadanie. Pokazać, że nast¸epuj¸ace funkcje s¸a rekurencyjne:
x1+ x2, x1· x2, 2x, [x/2];
sg(x) = 0 : x = 0 1 : x 6= 0 ;
¯
sg(x) = 1 : x = 0 0 : x 6= 0 ;
x ˙−y =
0 : x < y x − y : y ≤ x .
6.6. Twierdzenie. Funkcja jest obliczalna wtedy i tylko wtedy gdy jest funkcj¸a rekurencyjn¸a.
6.7. Teza Churcha. Każda funkcja obliczalna intuicyjnie jest funkcj¸a rekurencyjn¸a.
3