Toru« 2010
Barbara Klunder
Teoria Obliczalno±ci
Materiaªy do wykªadu
W wykªadze zastanawia¢ b¦dziemy si¦ nad dwoma kluczowymi pytani- ami:Czym jest efektywna procedura? Hardwarem czy softwarem? Urz¡dze- niem, które realizuje okre±lone obliczenia (pierwsze komputery), czy ci¡giem instrukcji (programem) w naszym ulubionym j¦zyku programowania?
Czym jest problem rozwi¡zywalny przez efektywn¡ procedur¦? Czy istniej¡ problemy nierozwi¡zywalne?
Intuicyjnie czujemy, »e b¦dziemy wykonywa¢ obliczenia.
Zasdaniczo prowadzi¢ b¦dziemy obliczenia na (sko«czonych ci¡gach liczb) liczbach naturalnych.
Przypu±¢my, »e chcemy prowadzi¢ obliczenia na zbiorze wej±¢ i wyj±¢ X ró»nym od N. Mo»emy to zrobi¢ przyporz¡dkowuj¡c ka»demu elementowi z X liczb¦ naturaln¡ zwan¡ jej kodem tak, aby ró»ne elementy X miaªy ró»ne kody.
Maj¡c wej±cia z X nale»y zast¡pi¢ je ich kodami i wykona¢ obliczenia, które zwracaj¡ numeryczne wyj±cie. Je±li to wyj±cie jest kodem elementu z X, to ten element traktujemy jako ko«cowy wynik oblicze«.
Chcemy, by pierwszy i ostatni krok tej procedury byª realizowany w sposób algorytmiczny. Wtedy mówimy, »e kodowanie jest efektywne.
U nas X b¦dzie: zbiorem wszystkich sko«czonych ci¡gów liczb naturalnych lub sªów nad ustalonym (sko«czonym) alfabetem, zbiorem instrukcji lub pro- gramów pewnego j¦zyka itp.
1 Kodowania i numeracje
Przypomnijmy dwie denicje zbioru przeliczalnego.
Denicja 1.1 Kodowaniem zbioru X nazywamy dowoln¡ funkcj¦ ró»nowarto±- ciow¡ f : X −→ N.
Zbiór jest przeliczalny, je±li jest równoliczny z pewnym podzbiorem N.
Denicja 1.2 Numeracj¡ (lub wyliczeniem) zbioru X nazywamy dowoln¡
funkcj¦ g : N −→ X, która jest «a".
Zbiór jest przeliczalny, je±li jego elementy mo»na ustawi¢ w ci¡g.
Przykªady
1. Funkcja π : N × N −→ N okre±lona wzorem π(n.m) = 2n(2m + 1) − 1 jest bijektywnym kodowaniem par liczb naturalnych.
Funkcja odwrotna zadana jest przez funkcje π1, π2 : N −→ N zden- iowane nast¦puj¡co:
π1(x) = n wtw, gdy 2 pojawia si¦ w rozkªadzie x+1 na czynniki pier- wsze z wykªadnikiem n;
π2(x) = 12( x+1
2π1(x) − 1)
2. Wtedy funkcja β : N × N × N −→ N, β(n, m, p) = π(π(n, m), p) jest bijektywnym kodowaniem trójek liczb naturalnych. Jak wygl¡da funkcja odwrotna?
3. Rozwa»my funkcj¦ τ : Sk>0Nk −→ N tak¡, »e
τ (a0, a1, . . . , ak−1) = 2a0 + 2a0+a1+1+ . . . + 2a0+a1+...ak−1+k−1− 1.
Jest to bijektywne kodowanie wszystkich sko«czonych ci¡gów liczb nat- uralnych.
Poka»emy pó»niej, »e funkcje π i β s¡ (RAM-)obliczalne, a numeracja τ−1 jest efektywna. B¦d¡ to kluczowe rezultaty techniczne.
2 Maszyny RAM
2.1 Maszyny z nieograniczon¡ pami¦ci¡ RAM (Shep- erdson & Sturgis)
Budowa maszyny realizuj¡cej programy w j¦zyku zbli»onym do popularnych imperatywnych j¦zyków programowania, który b¦dziemy rozwa»a¢, przy- pomina budow¦ rzeczywistych komputerów: maszyna skªada si¦ z licznika rozkazów oraz pami¦ci, która jest tablic¡ rozmiaru ℵ0. Komórki pami¦ci s¡ numerowane kolejnymi liczbami naturalnymi i mog¡ zawiera¢, tak jak licznik rozkazów, dowoln¡ liczb¦ naturaln¡. W czasie oblicze« prawie wszys- tkie komórki pami¦ci zawieraj¡ liczb¦ 0.
Oznaczenie z[x] oznacza zawarto±¢ komórki o numerze x.
Lista instrukcji RAM
instrukcjiKod Kod
adresów Oznaczenie Semantyka Uwagi
0 n Z(n) z[n]:=0 Licznik rozkazów
zwi¦ksz o 1
1 n S(n) z[n]:=z[n]+1 Licznik rozkazów
zwi¦ksz o 1
2 π(m, n) T(m,n) z[n]:=z[m] Licznik rozkazów
zwi¦ksz o 1
3 β(m, n, q) I(m,n,q) if z[m]=z[n]
then goto q
Licznik rozkazów zwi¦ksz o 1, gdy z[m] 6= z[n],
w przeciwnym przypadku umie±¢ w nim q
Instrukcje typu 0, 1, 2 nazywamy arytmetycznymi , a typu 3 warunk- owymi.
Denicja 2.1 Programem (na RAM) nazywamy dowolny niepusty ci¡g RAM-instrukcji.
Semantyka instrukcji typu 3 wymusza numerowanie instrukcji w programie.
Kultura matematyczna wymaga od nas sformalizowania poj¦¢
stanu, instrukcji, semantyki programu itp. Wrócimy do tego w rozdziale 4. Na razie wykorzystamy nasz¡ intuicj¦.
Przykªadowy program 0 I(1,2,5)
1 S(2) 2 S(3) 3 I(1,2,5) 4 I(1,1,1) 5 T(3,0)
Co liczy ten program?
Oczywi±cie interesuj¡ nas komórki pami¦ci, które s¡ aktywne w czasie oblicze«.
Program zatrzymuje si¦, gdy z[1]=z[2]. Je±li wi¦c na pocz¡tku z[2]6z[1], to wykonuje si¦ zwi¦kszanie z[2], a» równo±¢ stanie si¦ prawdziwa. Zwi¦ksza si¦ z[3] o ilo±¢ dodawa«, czyli z[1]-z[2]. Je±li wi¦c z[i] oznacza pocz¡tkow¡
zawarto±¢ komórki, to po zako«czeniu oblicze« w komórce o numerze 0 zna- jduje si¦ liczba z[3]+z[1]-z[2]. Zauwa»my, »e program nie zatrzyma si¦, gdy na pocz¡tku z[2]>z[1]!
Z charakteru RAM wynika, »e b¦dziemy zajmowa¢ si¦ programami, które na wej±ciu bior¡ ci¡gi (ustalonej dªugo±ci) liczb naturalnych i zwracaj¡ jedn¡
liczb¦ naturaln¡.
Umowa : Program zwraca zawarto±¢ komórki o numerze 0.
Oczywi±cie nie zawsze program musi si¦ zatrzyma¢ na ka»dych danych.
Naturalne jest wi¦c pytanie jakie funkcje s¡ obliczane przez RAM-programy.
B¦dzie to pierwszy problem, którym si¦ zajmiemy. Oka»e si¦, »e funkcje aryt- metyczne s¡ RAM-obliczalne.
Denicja 2.2 Niech k > 0. Program P oblicza funkcj¦ cz¦±ciow¡ f : Nk−→
N, je±li po umieszczeniu ci¡gu danych x w komórkach z[1], ... , z[k], wyze- rowaniu pozostaªych i uruchomieniu P, P zatrzyma si¦ zwracaj¡c warto±¢ f na danych x, dokªadnie gdy x ∈ Dom f.
Ka»dy program P oblicza pewn¡ funkcj¦ k-argumentow¡, dla k > 0, któr¡
oznaczymy symbolem φ(k)P .
Symbolem Ck oznaczymy zbiór wszystkich funkcji RAM-obliczalnych i k- argumentowych.
Przyklad 1 Na gruncie aksjomatyki Peano liczb naturalnych dodawanie deniuje si¦ rekurencyjnie:
x+0=x x+(y+1)=(x+y)+1
Nieformalnie: nale»y do x doda¢ 1 y-razy. Oto program RAM obliczaj¡cy z[1]+z[2], przy zaªo»eniu, »e z[3]=0.
0 I(2,3,5) 1 S(1) 2 S(3) 4 I(1,1,0) 5 T(1,0)
Przykªad 2 Niech x÷1 = x − 1 gdy x > 1
0 gdy x = 0 . Funkcja ta jest obliczana przez nast¦puj¡cy program.
0 I(1,4,9) 1 S(3) 2 I(1,3,6) 3 S(2) 4 S(3) 5 I(1,1,2) 6 T(2,0)
Uzasadnienie: W czasie oblicze« (od instrukcji 2) ró»nica z[3]-z[2] stale równa
jest 1, a obliczenia zatrzymuj¡ si¦, gdy z[3] osi¡gnie pocz¡tkow¡ warto±¢ z[1].
Pytanie: Zgodnie z denicj¡, mo»emy zastanawia¢ si¦, jak¡ dwuargumentow¡
funkcj¦ liczy ten program?
Odpowied»: f(x, y) = y + (x ÷ 1).
Zadanie 0 Jak¡ funkcj¦ trójargumentow¡ oblicza powy»szy program?
Zadanie 1 Pokaza¢, »e nast¦puj¡ce funkcje s¡ RAM-obliczalne. Symbol ∞ oznacza¢ b¦dzie, »e warto±¢ funkcji pozostaje nieokre±lona.
1. f(x) =
x
2 gdy x jest parzysta
∞ gdy x jest nieparzysta 2. f(x) = 1 gdy x > 0
0 gdy x = 0 3. f(x) = 5
4. f(x, y) = 1 gdy x 6= y 0 gdy x = y 5. f(x, y) = 1 gdy x > y 0 gdy x 6 y 6. f(x) =
x
3 gdy x dzieli si¦ przez 3
∞ w przeciwnym przypadku Umowa: GOTO(n)=I(x,x,n)
2.2 Inne maszyny typu RAM tej samej mocy obliczeniowej
1. Bazowa Shoenelda wykonuje instrukcje Increase r[i] czyli S(i)
GOTO n
Decrease r[i] , n której wykonanie oznacza zmniejszenie r[i] o 1 i przej±cie do instrukcji o numerze n, gdy r[i]>0
2. Uogólniona RAM wykonuje instrukcje z[c]:=z[a]+z[b]
z[c]:=z[a]+b z[c]:=z[a]*z[b]
z[c]:=z[a]*b
if z[a]=z[b] then goto c if z[a]<z[b] then goto c
Zadanie 2 Pokaza¢, »e ka»dy program w jednym z j¦zyków mo»na przetªu- maczy¢ na pozostaªe j¦zyki z zachowaniem semantyki.
3 Struktura zbioru funkcji RAM-obliczalnych
W DALSZYCH ROZWAANIACH PROGRAMY S W POSTACI
STANDARDOWEJ, CO OZNACZA, E W INSTRUKCJACH WARUNK- OWYCH I(n,m,q) DANEGO PROGRAMU P, q 6 k+1, GDZIE k
JEST NUMEREM OSTATNIEJ INSTRUKCJI P.
Zadanie Wyka», »e dla dowolnego RAM-programu P istnieje RAM-program P' w postaci standardowej, który oblicza te same funkcje co P.
Idea rozwi¡zania Ka»d¡ instrukcj¦ warunkow¡ I(n,m,q) programu P tak¡, »e q>k+1, zast¡p instrukcj¡ I(n,m,k+1).
Niech P i S b¦d¡ programami w postaci standardowej. atwo jest poprawnie wprowadzi¢ skªadanie programów PS, które ma odpowiada¢ przej±ciu od os- tatniej instrukcji P do pierwszej instrukcji S. Nale»y ka»d¡ instrukcj¦ I(n,m,q) programu S zast¡pi¢ instrukcj¡ I(n,m,q+k+1), gdzie k dalej jest numerem ostatniej instrukcji P.
OZNACZENIE Dla programu P symbolem ρ(P) oznaczamy najmniejsz¡
liczb¦ naturaln¡ m tak¡, »e P nie u»ywa w czasie oblicze« komórki o numerze m, ani o numerach wi¦kszych od m.
Aby upro±ci¢ pisanie RAM-programów wprowadzimy procedury. Niech P = i0, . . . , ip b¦dzie programem w postaci standardowej, a l1, . . . , ln 6∈
{1, . . . , n}. Wtedy P[l1, . . . , ln→ l] oznacza program
T(l1, 1) . . .T(ln, n)Z(0)Z(n + 1) . . . Z(ρ(P))PT(0, l).
Zauwa»my, »e procedura zaczyna si¦ od przygotowania pola dziaªania dla programu P, czyli rejestrów 0,1, ... , ρ(P). Procedura jest wi¦c wykonywana
"w miejscu", a nie «a boku", co uªatwi nam analizowanie programów proce- duralnych, ale jest sprzeczne z ogólnie przyj¦ta praktyk¡ programistyczn¡.
Obecnie zajmiemy si¦ wªasno±ciami zbioru C wszyskich funkcji RAM- obliczalnych. Omówimy ró»ne konstruktory funkcji obliczalnych takie, jak rekursja czy minimalizacja.
3.1 Podstawianie
Twierdzenie 3.1 (O podstawianiu) Niech f ∈ Ck a g1, . . . , gk ∈ Cn. Wt- edy funkcja h(x) ' f(g1(x), ..., gk(x)) ∈ Cn.
Dowód Niech f ∈ Ckb¦dzie obliczana przez program F, a g1, . . . , gk∈ Cn b¦d¡ obliczane przez programy G1, . . . ,Gk odpowiednio. Wtedy funkcja h(x) jest obliczana przez podany program H.
Niech m = max{n, k, ρ(F ), ρ(G1), . . . , ρ(Gk)}. T(1, m + 1)
. . . . . . . . .
T(n, m + n)
G1[m + 1, . . . , m + n → m + n + 1]
. . . . . . . . .
Gk[m + 1, . . . , m + n → m + n + k]
F [m + n + 1, ...., m + n + k → 0]
Podstawianie pozwala uto»samia¢ i wprowadza¢ nieistotne argumenty.
Niech f(x, y) b¦dzie RAM obliczalna. Wtedy f=cje f(x, x), f(y, x), g(x, y, z) ' f (x, z) s¡ obliczalne.
3.2 Rekursja
Rekursja to sposób zadania kolejnej warto±ci funkcji poprzez warto±ci wcze±niej obliczone.
Twierdzenie 3.2 (O operatorze rekursji) Niech f(x) ∈ Cn i g(x, y, z) ∈ Cn+2. Wtedy funkcja h(x, y) : Nn+1 −→ N okre±lona ukªadem
(Rek) h(x, 0) ' f (x)
h(x, y + 1) ' g(x, y, h(x, y)) jest obliczalna (h ∈ Cn+1).
Dowód Niech f(x) ∈ Cni g(x, y, z) ∈ Cn+2b¦d¡ obliczane przez programy F i G odpowiednio. Wtedy funkcja h(x, y) : Nn+1 −→ N jest obliczana przez podany program H.
Niech m = max(n + 2, ρ(F ), ρ(G)).
U»ywa¢ b¦dziemy rejestrów 1, 2, ..., m+n+1, m+n+2, m+n+3 i oznaczenia t = m + n.
T(1, m + 1) T(2, m + 2) . . .
. . . . . .
T(n + 1, m + n + 1)
F[m + 1, m + 2, . . . , m + n → t + 3] oblicz f(x) i zapisz w rejestrze t+3 qI(t + 2, t + 1, p) je±li z[t+2] równe jest y, to zako«cz G(m + 1, . . . , m + n, t + 2, t + 3 → t + 3] je±li nie posªu» si¦ G
S(t + 2) zwi¦kszz[t + 2]
GOTO q pT(t + 3, 0)
Zadania
1. Przypomnijmy denicj¦ ci¡gu Fibonacciego: f(0) = f(1) = 1 f (n + 2) = f (n) + f (n + 1).
Udowodnij, »e funkcja f jest RAM-obliczalna.
WSKAZÓWKA: Rozwa» funkcj¦ g(n) = 2f (n)3f (n+1).
2. Uogólnij poprzednie zadanie. Niech k > 0. Niech fi(x) ∈ Cn, gdzie i ∈ {0, 1, . . . , k − 1} i g(x, y, z) ∈ Cn+1+k b¦d¡ obliczlane. Wtedy funkcja h(x, y) : Nn+1 −→ N okre±lona ukªadem
(Rek)
h(x, 0) ' f0(x) h(x, 1) ' f1(x) h(x, k − 1) ' fk−1(x)
h(x, y + k) ' g(x, y, h(x, y), . . . , h(x, y + k − 1)) jest RAM-obliczalna.
3.3 Wa»ne przykªady funkcji RAM-obliczalnych
1. Dodawanie x + y;
2. Mno»enie x · y mo»na zdeniowa¢ przez rekursj¦ wykorzystuj¡c do- dawanie: x · 0 = 0; x · (y + 1) = x · y + x. Uwaga: do schematu rekursji dobieramy za f funkcj¦ staª¡ zero, za g(x, y, z) = z + x.
3. Pot¦gowanie podobnie deniuje si¦ przez rekursj¦ wykorzystujac mno»e- nie: x0 = 1; xy+1 = xy· x.
4. Odejmowanie x ÷ 1 = x − 1 gdy x > 1
0 gdy x = 0 i ogólnie x ÷ y = x − y gdy x > y
0 gdy x < y równie» ªatwo zdeniowa¢ przez rekursj¦:
(a) 0 ÷ 1 = 0 (x + 1) ÷ 1 = x;
(b) x ÷ 0 = x x ÷ (y + 1) = (x ÷ y) ÷ 1.
Pozostaªe przykªady s¡ zebrane w poni»szej tabeli.
Funkcja Schemat
sg(x) =
0 gdy x = 0
1 gdy x > 0 sg(0) = 0
sg(x + 1) = 1 sg(x) =
1 gdy x = 0
0 gdy x > 0 sg(x) = 1 ÷ sg(x)
|x − y| |x − y| = (x ÷ y) + (y ÷ x)
x! ¢wiczenie
min(x, y) min(x, y) = x ÷ (x ÷ y)
max(x, y) max(x, y) = x + (y ÷ x)
rm(x, 0) = 0 rm(x, y + 1) =
0 rm(x, y) + 1 = x rm(x, y) + 1 rm(x, y) + 1 6= x
rm(x, 0) = 0 rm(x, y + 1) =
(rm(x, y) + 1)sg(|x − (rm(x, y) + 1)|) g(x, y, z) = (z + 1)sg(|x − z + 1)|) qt(x, 0) = 0
qt(x, y + 1) =
qt(x, y) + 1 rm(x, y) + 1 = x qt(x, y) rm(x, y) + 1 6= x
g(x, y, z) = z + sg(|x − rm(x, y) + 1)|)
div(x, y) =
1 x|y
0 x 6 |y div(x, y) = sg(rm(x, y))
3.4 Inne konstrukcje
Niech f(x, y) b¦dzie dowoln¡ funkcj¡ (dwuargumentow¡, RAM-obliczaln¡).
• Suma uogólniona Schemat rekursji h(x, 0) = 0
h(x, y + 1) ' f (x, y) + h(x, y) g(x, y, z) ' f (x, y) + z deniuje funkcj¦ h(x, y) ' Pz<yf (x, y).
• Iloczyn uogólniony Schemat rekursji t(x, 0) = 1
t(x, y + 1) ' f (x, y) · t(x, y) g(x, y, z) ' f (x, y) · z deniuje funkcj¦ h(x, y) ' Qz<yf (x, y).
• Ograniczona minimalizacja
Zaªó»my, »e f(x, y) jest totalna. Wzór µ z < y (f (x, z) = 0) =X
v<y
Y
u6v
sg(f (x, u))
deniuje operator minimalizacji ograniczonej, zwany te» operatorem wyszukiwania dla y najmniejszej liczby z < y, dla której f(x, z) = 0, gdy taka liczba nie istnieje zwracana jest liczba y.
Z twierdzenia o podstawianiu i rekursji wynika, »e je±li f jest RAM-obliczalna zdeniowane funkcje równie» s¡ RAM-obliczalne. Oczywi±cie zaªo»enie, »e f jest 2-argumentowa jest nieistotne.
3.5 Minimalizacja
Dla f(x, y) : Nn+1 −→ N poªó»my: g(x) ' µ y (f(x, y) = 0) ' najmniejsze y takie, »e f(x, z) jest okre±lona dla wszystkich z 6 y i f(x, y) = 0; gdy talie y nie istnieje warto±¢ funkcji pozostaje nieokre±lona.
Twierdzenie 3.3 (O operatorze minimalizacji) Je±li f ∈ Cn+1, to g ∈ Cn.
Dowód Zaªó»my, »e f jest obliczana przez program F. Wtedy podany program G oblicza funkcj¦ g. Niech m = max(n + 1, ρ(F )).
T(1, m + 1) . . .
. . . . . .
T(n, m + n)
pF[m + 1, ..., m + n, m + n + 1 → 1]
I(1, m + n + 2, q) S(m + n + 1) I(1, 1, p)
q T(m + n + 1, 0)
Uwaga Niech k > 0, predykat M(x) ⊆ Nk jest rozstrzygalny, je±li jego funkcja charakterystyczna cM jest obliczalna.
Zadanie Wykorzystuj¡c, je±li to konieczne, operator minimalizacji wyka»,
»e:
1. zbiór liczb pierwszych jest rekurencyjny;
2. funkcja p : N 7→ N opisuj¡ca rosn¡cy ci¡g wszystkich liczb pierwszych jest RAM-obliczalna (cz¦sto b¦dziemy pisa¢ px zamiast p(x));
3. funkcja (x)y zwracaj¡ca dla x 6= 0 wykªadnik z jakim py pojawia si¦ w rozkªadzie na czynniki pierwsze x i 0 dla x = 0 jest RAM-obliczalna;
4. je±li predykat M(x) ⊆ Nk jest rozstrzygalny i f, g ∈ Ck, to funkcja h(x) ' f (x) M (x)
g(x) ¬M (x) jest RAM-obliczalna.
4 Funkcje cz¦±ciowo rekurencyjne
W rozdziale tym zajmiemy si¦ zbiorem funkcji cz¦±ciowo rekurencyjnych zdeniowanych przez Kleene w 1952. roku. Jest to czysto matematyczna formalizacja poj¦cia funkcji obliczalnej.
Lemat 4.1 Funkcje zerowa i nast¦pnika: 0, s : N −→ N, 0(x) = 0, s(x) = x + 1 oraz funkcje rzutowania pni : Nn −→ N, pni(x0, . . . , xn−1) = xi, dla dowolnych n > 0, i < n, s¡ RAM-obliczalne.
Denicja 4.2 Zbiór R funkcji cz¦±ciowo rekurencyjnych deniujemy jako najmniejszy zbiór funkcji, który zawiera funkcje bazowe: zerow¡, nast¦pnika i rzuty oraz jest domkni¦ty na operatory podstawiania, rekursji i minimalizacji.
Denicja 4.3 Podobnie P R oznacza zbiór funkcji prymitywnie rekurencyjnych, które powstaj¡ z funkcji bazowych przy u»yciu operatorów podstawiania i rekursji.
Odnotujmy, »e z lematu 4.1 i twierdze« poprzedniego rozdziaªu wynika bezpo±redni wniosek.
Wniosek 4.4 Ka»da funkcja cz¦±ciowo rekurencyjna jest RAM-obliczalna.
Nasuwa si¦ pytanie, czy jest te» odwrotnie.
Twierdzenie 4.5 Ka»da funkcja RAM-obliczalna jest cz¦±ciowo rekurencyjna.
Zanim zajmiemy si¦ dowodem powy»szego twierdzenia musimy wprowadzi¢
matematyczne denicje zbioru S stanów maszyny RAM i zbioru I jej in- strukcji:
S = {f : N ∪ {L} −→ N : ∃m∀n>mf (n) = 0}
I = {0, 1, 2, 3} × N
Wtedy mo»emy formalnie okre±li¢ semantyk¦ ka»dej instrukcji. Funkcj¦ δ : I × S −→ S zmiany stanu deniujemy nast¦puj¡co: dla stanu f ∈ S oraz instrukcji i =< k, a >∈ I kªadziemy (g = δ(i, f) )
g(L) =
q gdy k = 3 ∧ f(m) = f(n) gdzie a = β(m, n, q)
f (L) + 1 w pozostaªych przypadkach
k=0 g(c) = 0 c = a
f (c) c 6= a k=1 g(c) = f (c) + 1 c = a
f (c) c 6= a k=2 ∧a = π(m, n) g(c) = f (m) c = n
f (c) c 6= n
k=3 ∀c∈N g(c) = f (c)
Teraz mo»emy poda¢ formaln¡ denicj¦ funkcji φ(m)P m-argumentowej obliczanej przez program P = i0, i1. . . is. Ci¡g x ∈ Nm nale»y do dziedziny deniowanej funkcji wtw, gdy istnieje ci¡g stanów f0, f1, . . . , ft taki, »e
1. f0 jest konguracj¡ pocz¡tkow¡ P z x na wej±ciu;
2. ∀k=0...t−1fk(L) 6 s;
3. ∀k=0...t−1fk+1 = δ(ifk(L), fk); 4. ft(L) > s + 1
Wtedy φ(m)P (x) = ft(0).
Rozwa»my funkcj¦ cd : S −→ N koduj¡c¡ wszystkie konguracje RAM:
cd(f ) = 2f (L) Y
n∈N
pf (n)n+1. Przypomnijmy, »e pn oznacza n-t¡ liczb¦ pierwsz¡.
Poszukujemy funkcji (prymitywnie) rekurencyjnej δ : I × N+ −→ N (δ : N ×N ×N+ −→ N) takiej, »e cd◦δ = δ◦(idI×cd), co matematycznie oznacza,
»e funkcja δ opisuj¡ca semantyk¦ instrukcji jest (prymitywnie) rekurencyjna.
Podsumujmy wcze±niejsze rezultaty.
1. Funkcje koduj¡ce pary liczb naturalnych π(n.m) = 2n(2m + 1) − 1 i trójki β(n, m, p) = π(π(n, m), p) s¡ prymitywnie rekurencyjne oraz bijektywne.
2. Istniej¡ prymitywnie rekurencyjne funkcje π1, π2, β1, β2, β3 : N −→ N takie, »e < π1, π2 > i < β1, β2, β3 > s¡ odwrotnymi do π i β: π1(x) = (x + 1)0, π2(x) = qt(2, qt(2π1(x), x + 1)), β1(x) = π1(π1(x)), β2(x) = π2(π1(x)), β3(x) = π2(x).
Teraz
δ(< k, a >, s) =
2 · qt(p(s)a+1a+1, s) k = 0
2 · pa+1· s k = 1
2 · qt((pπ2(a)+1)(s)π2(a)+1, s) · (pπ2(a)+1)(s)π1(a)+1 k = 2
2 · s k = 3 ∧ (s)β1(a) 6= (s)β2(a)
2β3(a)· qt(2(s)0, s) k = 3 ∧ (s)β1(a) = (s)β2(a)
0 k > 4
Funkcja ta jest prymitywnie rekurencyjna z okre±lenia.
Dowód twierdzenia Niech P =< k0, i0 >< k1, i1 > . . . < ks, is>b¦dzie programem w postaci standardowej obliczaj¡cym funkcj¦ h(x) arno±ci n > 0.
Niech σ(x, k) b¦dzie kodem konguracji uzyskanej po k krokach oblicze« P na x. Przyjmowa¢ b¦dziemy, »e konguracj¡ nast¦pn¡ po ko«cowej jest ona sama oraz codn(x) jest konguracj¡ pocz¡tkow¡ (czyli ci¡g x umieszczony jest w rejestrach o numerach 1, . . . , n). Wtedy
σ(x, 0) = cd(codn(x))
σ(x, k + 1) = δ(< kl, al >, σ(x, k)) l = (σ(x, k))0 < s + 1 σ(x, k) l = (σ(x, k))0 > s + 1 Inaczej funkcja σ deniowana jest przez rekursj¦:
f (x) = cd(codn(x))
g(x, y, z) = c(z)0<s+1· δ(i(z)0, z) + c(z)0>s+1· z
Wtedy funkcje c(x, k) = (σ(x, k))1 j(x, k) = (σ(x, k))0 s¡ prymitywnie rekurencyjne i opisuj¡ zawarto±¢ rejestru 0 (c!) i licznik rozkazów (j) po k krokach oblicze« P. Wtedy
h(x) ' c(x, µ k (j(x, k) > s + 1)).
co oznacza, »e h jest cz¦±ciowo rekurencyjna.
4.1 Funkcja Ackermanna
Zauwa»my, »e u»ycie podstawiania i rekursji do funkcji totalnych daje funkcj¦
totaln¡, co nie jest prawd¡ dla minimalizacji (rozwa» funkcj¦ g(x) = µy((x + y+1) = 0)). Ta prosta obserwacja spowodowaªa pojawienie si¦ wielu wa»nych pyta«. Podstawowe to: Czy ka»da funkcja totalna i cz¦±ciowo rekurencyjna jest prymitywnie rekurencyjna?. Zauwa»my, »e jest to pytanie, czy ma sens u»ywanie operatora minimalizacji do funkcji totalnych, gdy wynikiem jest funkcja totalna.
Okazuje si¦, »e istniej¡ funkcje totalne, które s¡ cz¦±ciowo rekurencyjne, ale nie prymitywnie rekurencyjne. Rezultat ten zawdzi¦czamy Ackerman- nowi, który skonstruowaª tak¡ funkcj¦, zreszt¡ bardzo skomplikowan¡. W lit- eraturze pod hasªem funkcja Ackermanna wyst¦puje prostsza funkcja wprowad- zona przez Hermesa:
A(0, y) = y + 1 A(x + 1, 0) = A(x, 1)
A(x + 1, y + 1) = A(x, A(x + 1, y))
Warto zapami¦ta¢ ten przykªad i przetestowa¢ na nim, czym ró»ni si¦ denicja funkcji przez rekursj¦ od denicji rekurencyjnej. Jest to kolejna ilustracja ob- serwacji, »e pewne denicje rekurencyjne w j¦zykach programowania wysok- iego poziomu mo»na zas¡pi¢ iteracj¡, a funkcja Ackermanna nie poddaje si¦
temu procesowi.
4.2 Teza Churcha
Teza Churcha mówi, »e nieformalnie i intuicyjnie okre±lona klasa funkcji obliczalnych pokrywa si¦ z klas¡ funkcji RAM-obliczalnych. Teza ta nie jest matematycznym twierdzeniem, ale istniej¡ wa»kie argumenty na jej rzecz.
Jednym z istotniejszych jest powy»sze twierdzenie, które razem z wnioskiem 4.4 stwierdza, »e klasa gunkcji RAM-obliczalnych pokrywa si¦ z klas¡
funkcji cz¦±ciowo rekurencyjnych.
W wykªadzie rozwa»a¢ b¦dziemy jeszcze formalizacj¦ Turinga, dla której mo»na udowodni¢ podobne twierdzenie.
5 Maszyny Turinga
Maj¡c pewn¡ wiedze techniczn¡ na temat budowy komputera trudno przyj¡¢
model rozwa»any wcze±niej. Nale»y te» u±wiadomo¢ sobie, »e prosty pomysª ªatwiej zrealizowa¢ technicznie. T¦ zalet¦ ma denicja Turinga zaproponowana w 1936 roku. Po pierwsze, w tamtych czasach znane byªy urz¡dzenia me- chanicznie realizuj¡ce »mudne algorytmy takie jak maszyny szyfruj¡ce czy ró»nicowe. Po drugie, byªy one (w najlepszym wypadku) urz¡dzeniami elek- trycznymi a nie elektronicznymi. Model Turinga (jedna maszyna) rozwi¡zuje jeden problem wykonuj¡c bardzo proste operacje. Maszyna ta ma niesko«c- zon¡ ta±m¦ (pami¦ci) podzielon¡ na komórki, w których mo»e znajdowa¢
si¦ co najwy»ej jeden symbol ze sko«czonego zbioru. Ma te» gªowic¦, która obserwuje dokªadnie jedn¡ komórk¦ i sko«czony zbiór stanów. Na postawie tych dwóch informacji (stan, litera) podejmuje decyzj¦ jak¡ liter¦ umie±ci¢ w komórce, jaki ruch wykona¢ i w jaki stan wej±¢.
Denicja 5.1 Jednota±mow¡ maszyn¡ Turinga nazywamy trójk¦ < S, Q, P >, gdzie Q jest sko«czonym alfabetem symboli ta±mowych, S sko«czonym zbiorem stanów rozª¡cznym z Q, a P sko«czonym zbiorem instrukcji postaci:
stan1 litera 1 → litera2 ruch stan2.
Matematycznie
P ⊆ S × (Q ∪ {B}) × (Q ∪ {B}) × {L, R,_} × S
gdzie B jest nowym symbolem zwanym blank oznaczaj¡cym, »e komórka jest pusta, a litery L, R, _ odpowiadaj¡ ruchom w lewo, w prawo i w miejscu.
Wej±ciem dla maszyny b¦dzie dowolne sªowo nad alfabetem Q, analizowane od pierwszej litery i pocz¡tkowego stanu q0. Kolejny etap tej analizy nazywa¢
b¦dziemy konguracj¡.
Denicja 5.2 Niech M =< S, Q, P > b¦dzie ustalon¡ maszyn¡ Turinga.
1. Konguracj¡ M nazywamy ka»de sªowo postaci uqw, gdzie u, w s¡
sªowami nad alfabetem Q∪{B}, a q jest stanem: u, w ∈ (Q∪{B})?, q ∈ S.
Uwaga B¦dziemy ignorowa¢ symbole puste na pocz¡tku u i ko«cu w.
2. Dla instrukcji qa → bRq0 i konguracji vqaw wykonanie jej zapisujemy vqaw `M vbq0w.
Uwaga Doko«cz denicj¦: dla instrukcji qa → bLq0 i konguracji vqaw...
3. Powy»sze wzory deniuj¡ relacj¦ jednokrokowej zmiany konguracji.
Matematycznie zbiór K konguracji M równy jest (Q ∪ {B})? × S × (Q ∪ {B})? i `M⊆ K × K. Wtedy relacj¦ `?M⊆ K × K b¦d¡c¡ zwrotnio- przechodnim domkni¦ciem `M nazywamy relacj¡ zmiany konguracji maszyny M.
4. Niech KF b¦dzie zbiorem konguracji ko«cowych t.j. takich w których M nie mo»e wykona¢ »adnej instrukcji:
KF = {z ∈ K ; ¬∃w∈Kz `M w}
a q0 ∈ S wyró»nionym stanem. J¦zyk LqM0 sªów akceptowanych przez M przy stanie pocz¡tkowym q0 deniujemy jako zbiór tych sªów s nad alfabetem Q, które po umieszczeniu na ta±mie sªowa, ustawieniu gªow- icy przy przy jego pierwszej literze w stanie q0, powoduj¡ zatrzymanie maszyny:
LqM0 = {s ∈ Q? ; ∃w∈KF q0s `?M w}
5. Do zdeniowania zbioru konguracji ko«cowych mo»na wykorzysta¢ zbiór F ⊆ S zwany zbiorem stanów ko«cowych. Wtedy
KFF = {z ∈ K ; ∃w,v∈(Q∪{B})?∃q∈Fz = vqw}
J¦zyk LqM0,F sªów akceptowanych przez M przy stanie pocz¡tkowym q0 i zbiorze stanów ko«cowych F deniujemy jako zbiór tych sªów s nad al- fabetem Q, które po umieszczeniu na ta±mie sªowa, ustawieniu gªowicy przy jego pierwszej literze w stanie q0, powoduj¡ przej±cie maszyny w stan ze zbioru KFF:
LqM0,F = {s ∈ Q? ; ∃w∈KFF q0s `?M w}
5.1 Jednota±mowa maszyna Turinga dla palindromów
Niech X = {a1, . . . , an}b¦dzie dowolnym sko«czonym i niepustym alfabetem.
Rozwa»my MT o instrukcjach
q0ai −→ aiRq0 szukaj prawego ko«ca sªowa q0B −→ BLq1 znalazªe±, to czego szukaªe±
q1ai −→ BLsi zapami¦taj, co byªo na ko«cu (ai) sia −→ aLsi a ∈ X wró¢ na pocz¡tek (lewy koniec sªowa) siB −→ BRti znalazªe±, to czego szukaªe±
tiai −→ BRq0 usu« pierwsz¡ liter¦, je±li równa jest ai
Maszyna ta zawsze si¦ zatrzyma! W stanie q1 lub ti, gdy sªowo na wej±ciu jest palindromem; W stanie ti, gdy tak nie jest. W pierwszym przypadku na ta±mie pozostan¡ same symbole puste B.
Zale»nie od wariantu denicji j¦zyka akceptowanego przez MT dobieramy instrukcje:
1. q1B −→ BLf, tiB −→ BLf
2. tiaj −→ ajRzi zia −→ aLti a ∈ X gdy i 6= j
W pierwszym przypadku analizowanie palindromu zako«czy si¦ w stanie ko«cowym f, w drugim wej±cie, które nie jest palindromem spowoduje za- p¦tlenie maszyny.
Poniewa» do zdeniowania j¦zyka akceptowanego przez maszyn¦ Turinga potrzebny jest stan pocz¡tkowy q0 i zbiór konguracji ko«cowych zwykle do jej denicji dodaje si¦ ten stan i zbiór stanów ko«cowych zale»nie od wariantu denicji. Powy»szy przykªad ilustruje dowód nast¦puj¡cego twierdzenia.
Twierdzenie 5.3
1. Dla dowolnej maszyny Turinga M =< S, Q, P, q0 > istnieje maszyna Turinga M0 =< S0, Q, P0, q00, F > taka, »e LqM0 = Lq
0 0,F M0 ;
2. Dla dowolnej maszyny Turinga M0 =< S0, Q, P0, q00, F >istnieje maszyna Turinga M =< S, Q, P, q0 > taka, »e LqM00,F0 = LqM0;
5.2 Maszyna Turinga obliczaj¡ca nast¦pnik sªowa w porz¡dku leksykogracznym
Zaªó»my, »e alfabet X = {a1, . . . , an}jest zbiorem uporz¡dkowanym liniowo:
ai < ai+1.
Sªowo s poprzedza t w porz¡dku leksykogracznym, je±li jest krótsze albo s i t s¡ tej samej dªugo±ci i s poprzedza t w porz¡dku alfabetycznym.
Porz¡dek leksykograczny jest liniowy i poprawnie okre±lone jest poj¦cie nast¦pnika sªowa:nast(saiakn) = sai+1ak1 nast(akn) = ak+11 .
Rozwa»my MT o instrukcjach
q0ai −→ aiRq0 szukaj prawego ko«ca sªowa q0B −→ BLq1 znalazªe±, to czego szukaªe±
q1an−→ a1Lq1 zast¡p ostatni¡ na ko«cu pierwsz¡
q1ai −→ ai+1Lq2 i < n,teraz wystarczy wróci¢ na pocz¡tek (lewy) q2ai −→ aiLq2
q2B −→ BRq to koniec
q1B −→ a1Lq2 wszystkie litery byªy równe an
Maszyna zawsze zatrzymuje si¦ w stanie q, a na ta±mie na prawo od gªowicy znajduje si¦ sªowo b¦d¡ce nast¦pnikiem wej±cia.
Przykªad ten sugeruje, »e maszyny Turinga mog¡ posªu»y¢ jako urz¡dzenia obliczaj¡ce funkcje, tak jak programy na maszyn¦ RAM. Zauwa»my, »e rozwa»ane maszyny s¡ deterministyczne.
Denicja 5.4 1. Maszyna Turinga M =< S, Q, P, q0, F >jest determin- istyczna, je±li dla ka»dej pary (stan, litera) (konguracji zawieraj¡cej takie podsªowo) istnieje co najwy»ej jedna instrukcja, któr¡ mo»na do niej zastosowa¢.
2. Dla liczby naturalnej n symbolem b(n) oznacza¢ b¦dziemy zapis binarny tej liczby bez zb¦dnych zer.
3. Detrministyczna maszyna Turinga M =< S, {0, 1}, P, q0, F > oblicza funkcj¦ cz¦±ciow¡ f : Nn 7→ N, je±li dla dowolnych x1, . . . , xn, y ∈ N zachodzi równowa»no±¢:
f (x1, . . . , xn) = y ⇐⇒ ∃q∈Fq0b(x1)B . . . Bb(xn) `?M qb(y)
5.3 Maszyna Turinga obliczaj¡ca reszt¦ z dzielenia przez 3 liczby naturalnej n, operuj¡c zapisami liczb w sys- temie dwójkowym bez zb¦dnych zer
q00 −→ BRq0 wczytana liczba daje reszt¦ 0 q01 −→ BRq1 wczytana liczba daje reszt¦ 1 q10 −→ BRq2 mnó» przez 2 liczb¦ daj¡c¡ reszt¦ 1
q11 −→ BRq0 mnó» przez 2 i dodaj 1 do liczby daj¡cej reszt¦ 1 q20 −→ BRq1 mnó» przez 2 liczb¦ daj¡c¡ reszt¦ 2
q21 −→ BRq2 mnó» przez 2 i dodaj 1 do liczby daj¡cej reszt¦ 2 Zadanie Zdeniuj pozostaªe instrukcje MT tak, aby w konguracji qiB wypisywaªa kod liczby i.
Uwaga W denicji funkcji obliczanej przez maszyn¦ Turinga nie musimy zakªada¢, »e na lewo od gªowicy czytaj¡cej ta±ma jest pusta.
W ostatnim rozdziale zajmiemy si¦ elementami teorii zªo»ono±ci obliczeniowej.
Istniej¡ ró»ne miary zªo»ono±ci algorytmu. Najwa»niejsze to czas i pami¦¢.
Zªo»ono±¢ czasow¡ mierzy si¦ ilo±ci¡ kroków oblicze«. W przypadku mod- eli maszynowych (RAM czy Turinga) jest to zwi¡zane z wywoªywaniem in- strukcji. Zªo»ono±¢ pami¦ciow¡ mierzy si¦ ilo±ci¡ komórek pami¦ci wyko- rzystywanych w czasie obliczenia. Wtedy mo»emy przyj¡¢, »e interesuj¡ nas tylko dodatkowe koszty nie zwi¡zane z umieszczeniem danych i wyników w pami¦ci. Gªówne rozwa»nia dotyczy¢ b¦d¡ czasu. W rozdziale tym rozwa»a¢
b¦dziemy tylko maszyny Turinga. Wybór modelu jest uzasadniony:
1. tradycj¡;
2. konstrukcj¡ rzeczywistych komputerów: s¡ one raczej maszynami Turinga a nie RAM;
3. istot¡ problemu: mo»na wykaza¢, »e model RAM z ustalonym sko«c- zonym rozmiarem pami¦ci jest wystarczaj¡cy w teoretycznych rozwa»a- niach;
Zacznijmy od przykªadu. Rozwa»my j¦zyk A = {0k1k; k > 0}. Jak du»o potrzebuje czasu MT, aby rozstrzygn¡¢, czy w ∈ A? Trzeba rozwa»y¢
konkretn¡ maszyn¦ M1;
M1 na ªa«cuchu wej±ciowym w:
1. sprawdza, czy w sªowie w pojawia si¦ 0 na prawo od 1; je±li tak jest odrzuca to sªowo;
2. W przeciwnym przypadku powtarza nast¦puj¡ce czynno±ci;
3. poszukuje od lewej do prawej pary 0 i 1 usuwaj¡c je;
4. je±li zostaªy 0 po usuni¦ciu wszystkich 1 lub 1 po usuni¦ciu wszystkich 0, to odrzuca sªowo, w przeciwnym przypadku je akceptuje.
B¦dziemy wyznacza¢ czas dziaªania algorytmu jako funkcj¦ rozmiaru wej±cia.
W przypadku MT jest to dªugo±¢ sªowa. Wtedy b¦dziemy liczy¢ przypadek najgorszy, czyli wymagaj¡cy najwi¦cej oblicze«.
Denicja 5.5 Niech M b¦dzie deterministyczn¡ MT zatrzymuj¡c¡ si¦ na wszystkich wej±ciach. Czasem dziaªania lub zªo»ono±ci¡ czasow¡ M jest funkcja f : N 7→ N, gdzie f(n) jest maksymaln¡ ilo±ci¡ kroków oblicze« M wykonywanych przez ni¡ na ka»dym wej±ciu dªugo±ci n. Mówimy te», »e M dziaªa w czasie f(n).
Wida¢, »e raczej b¦dziemu bada¢ asymptotyczne zachowanie maszyn Turinga.
5.4 Notacja O
Denicja 5.6 Niech f, g : N 7→ R+ Mówimy, »e f jest rz¦d O(g(n)) (zapis f (n) = O(g(n)) je±li istniej¡ liczby c ∈ R+, n0 ∈ N takie, »e dla ka»dego n > n0 mamy: f(n) 6 cg(n). Mówi si¦ te», »e g(n) jest asymptotycznym ograniczeniem górnym f(n).
Jasne jest, »e f(n) = O(5f(n)) wi¦c w notacji tej pomija si¦ wspóªczynniki.
Zadanie Niech f(n) = 5n3+ 2n2+ 22n + 4. Wyka», »e f(n) = O(n3). Wiemy z analizy, »e
limn2n2+ 22n + 4
n3 = 0
co poci¡ga, »e n3 > 2n2 + 22n + 4 dla n > n0 (wyznacz takie n0). Wtedy 5n3+ 2n2+ 22n + 4 6 6n3 dla n > n0.
Uwaga W tej notacji rozwa»aj¡c logarytmy o podstawie wiekszej od jeden podstawa jest niewa»na, gdy» logan = loglogbn
ba.
Teraz oszacujmy czsow¡ zªo»ono±¢ obliczeniow¡ podanej na wst¦pie maszyny M1: dla danego na wej±ciu sªowa dªugo±ci n realizacja 1-go etapu wymaga 2n instrukcji (czytanie od lewej do prawej i powrót na pocz¡tek sªowa); 2-go i 3-go polega na dwukrotnym czytaniu (2n) powtarzanym n2 razy co daje O(n2) kroków; na koniec 4-ty zrealizuje si¦ w O(n) krokach: w sumie O(n2).
Rozwa»a¢ te» b¦dziemy niedeterministyczne MT.
Denicja 5.7 Niech M b¦dzie MT zatrzymuj¡c¡ si¦ na wszystkich we- j±ciach. Czasem dziaªania lub zªo»ono±ci¡ czasow¡ M jest funkcja f : N 7→
N, gdzie f(n) jest maksymaln¡ ilo±ci¡ kroków oblicze« M wykonywanych przez ni¡ na ka»dym wej±ciu dªugo±ci n w czasie ka»dego przebiegu oblicze«.
Mówimy te», »e M dziaªa w czasie f(n).
Funkcja f(n) zapewnia, »e ka»de obliczenia M na dowolnym wej±ciu dªugo±ci n zako«cz¡ si¦ w tym czasie.
Denicja 5.8 Niech t : N 7→ N b¦dzie totalna. Funkcja ta deniuje dwie klasy czasowej zªo»ono±ci obliczeniowej:
T IM E(t(n))tych j¦zyków L, które s¡ rozstrzygane prez determistyczn¡ maszyn¦
Turinga o czasowej zªo»ono±ci O(t(n))
N T IM E(t(n)) tych j¦zyków L, które s¡ rozstrzygane prez maszyn¦ Turinga o czasowej zªo»ono±ci O(t(n))
Skupimy si¦ na wyja±nieniu u»ytych wy»ej poj¦¢ i omówieniu wagi tego problemu. Najpierw wa»ne twierdzenie.
Twierdzenie 5.9 Dla niedeterministycznej maszyny Turinga M o czasowej zªo»ono±ci obliczeniowej f(n) takiej, »e n 6 f(n) dla wszystkich n ∈ N, istnieje deterministyczna trójta±mowa maszyna Turinga M1 rozpoznaj¡ca ten sam j¦zyk, której czasowa zªo»ono±¢ obliczeniowa jest rz¦du O(cf (n)), dla pewnej liczby c > 1.
Idea konstrukcji maszyny M1. Dla ustalenia uwagi zaªó»my, »e M w ka»dej konguracji mo»e wykona¢ co najwy»ej dwie instrukcje. Poniewa» jest
niedeterministyczna w pewnej konguracji ma faktycznie wybór pomi¦dzy dwiema instrukcjami. Dokonajmy ponumerowania liczbami 0 lub 1 tych instrukcji dla takich konguracji. Ka»dy ci¡g oblicze« M na wej±ciu dªu- go±ci n mo»na wtedy opisa¢ ci¡giem zer i jedynek dªugo±ci co najwy»ej f(n), odpowiadaj¡cym wyborowi kolejnej instrukcji. Ci¡gów takich jest 2f (n)+1−1. Maszyn¦ deterministyczn¡ M1 konstruuje si¦ tak, aby dla wej±cia dªugo±ci n umieszczanego na pierwszej ta±mie wyznaczaªa na drugiej ta±mie kole- jny ci¡g w porz¡dku leksykogracznym, a nast¦pnie realizowaªa obliczenia M opisane przez wygenerowany ci¡g na ta±mie trzeciej. Ka»de z O(2f (n)) oblicze« wymaga
1. kopiowania wej±cia z ta±my 1. na 3. (poniewa» n 6 f(n) wymaga to O(f (n)) kroków;
2. generowania nast¦pnego ci¡gu w O(f(n)) krokach;
3. wykonania oblicze« na ta±mie trzeciej w O(f(n)) krokach.
co razem daje O(f(n)) ∗ O(2f (n)) = O(4f (n))kroków.
Mo»na wykaza¢, »e konstruowana w dowodzie deterministyczna MT ma dodatkow¡ wªasno±¢: jest lewostronnie ograniczona, co oznacza, »e mo»na u»y¢ dodatkowego znaku B pocz¡tku sªowa b¦d¡cego na ta±mie; w sytuacji, gdy gªowica obserwuje ten znak niemo»liwy jest ruch w lewo i maszyna nie mo»e zmaza¢ znaku B. Wtedy konguracja pocz¡tkowa jest postaci B qow. Twierdzenie 5.10 1. Dla maszyny Turinga M istnieje lewostronnie ogranic-
zona (dwuta±mowa) maszyna Turinga M0, która rozpoznaje ten sam j¦zyk (i ma t¦ sam¡ zªo»ono±¢ czasow¡ w sensie notacji O).
2. Dla k-ta±mowej maszyny Turinga M (k > 2) istnieje jednota±mowa maszyna Turinga M0, która rozpoznaje ten sam j¦zyk. Je±li M ma zªo»ono±¢ czasow¡ O(f(n)), to M0 ma zªo»ono±¢ czasow¡ O(f(n) ∗ f (n)).
Szkic dowodu(1) Dla M i ka»dej zabronionej instrukcji np. q B→ aLq0 nale»y zdeniowa¢ procedur¦ (zestaw instrukcji M0), która caªe sªowo za B przesuwa o jedn¡ komórk¦ w prawo i wtedy w komórce za B mo»na umie±ci¢
a. Zauwa»my, »e do zrealizowania procedury przyda si¦ znacznik C ko«ca sªowa. Taka maszyna b¦dzie miaªa zªo»ono±¢ obliczeniow¡ O(f(n) ∗ f(n)),
gdy» symulacja ka»dej zabronionej instrukcji wymaga czasu proporcjonal- nego do dªugo±ci sªowa na ta±mie, a ta jest rz¦du O(f(n))! Uzasadnienie jest bardzo proste: w czasie f(n) maszyna Turinga odczytuje co najwy»ej f (n) komórek na ta±mie. Aby skonstruowa¢ maszyn¦ o podobnej czasowej zªo»ono±ci obliczeniowej wystarczy u»y¢ drugiej ta±my do przechowania w odwróconej kolejno±ci liter sªów powstaj¡cych na lewo od znaku B.
(2) Dla k-ta±mowej maszyny M jej konguracja opisana jest przez zawarto±¢
ka»dej z ta±m; czyli ci¡g sªów viqwi, i = 1 . . . kzamieniamy na sªowo #v1qw1#v2qw2# . . . vkqwk#. Konstrukcja M0 polega na zamianie ka»dej instrukcji M na ci¡g instrukcji,
które symuluj¡ jej realizacj¦ na opisanym sªowie. Ka»de sªowo powstaj¡ce w czasie symulacji oblicze« M na sªowie dªugo±ci n jest dªugo±ci O(f(n)), a zmiana wymaga po prostu jego przeczytania.
Zadanie Skonstruuj dwuta±mow¡ maszyn¦ Turinga dla j¦zyka palin- dromów o liniowej czasowej zªo»ono±ci obliczeniowej.
Teraz mo»emy porówna¢ moc obliczeniow¡ maszyny RAM i maszyn Turinga.
Chyba nikogo nie zdziwi, »e s¡ one (moce) identyczne. Postaramy si¦ raczej porówna¢ zªo»ono±¢ obliczeniow¡ programów na RAM i symuluj¡cych je maszyn Turinga.
Denicja 5.11 Niech P b¦dzie RAM programem.
1. Krokiem oblicze« P nazywamy wykonanie jednej instrukcji P ; dla x ∈ Nn wprowad»my oznaczenia:
P (x) ↓ oznacza, »e obliczenia P na danej x zatrzymuj¡ si¦;
P (x) ↓ k oznacza, »e obliczenia P na danej x zatrzymuj¡ si¦
zwracaj¡c k;
P (x) ↑ oznacza, »e obliczenia P na danej x nie zatrzymuj¡ si¦;
2. Zdeniujmy funkcj¦
t(n)P (x) =
liczba kroków oblicze« P (x) P (x) ↓
∞ P (x) ↑
3. Niech P b¦dzie takim programem, który zatrzymuje si¦ na wszystkich danych n ∈ N. Mówimy, »e P ma zªo»ono±¢ f(n) przy jednorodnym kryterium kosztów je±li t(1)P ∈ O(f (n)).
Z praktycznego punktu widzenia jest to nie najlepsza denicja. Rozwa»a si¦
wi¦c tzw. logarytmiczne kryterium kosztów.
Niech l(n) b¦dzie dªugo±ci¡ sªowa b(n) dla n ∈ N, czyli zapisu binarnego n bez zb¦dnych zer. Aby reprezentowa¢ konguracj¦ z maszyny RAM w czasie oblicze« RAM programu P na jednota±mowej maszynie Turinga b¦dziemy u»ywa¢ ci¡gu
b(z(L))##b(0)#b(z(0))##b(1)#b(z(1)) . . . ##b(ρ(P ) − 1)#b(z(ρ(P ) − 1)) (1) zakªadaj¡c, »e P u»ywa wszystkich komórek o numerach 0, . . . , ρ(P ) − 1 Wtedy logarytmiczny koszt realizacji ka»dej instrukcji RAM liczymy wedªug wzorów:
lz(Z(n)) = l(n) + l(z(n)) lz(S(n)) = l(n) + l(z(n))
lz(T (n, m)) = l(n) + l(m) + l(z(n)) + l(z(m))
lz(I(n, m, q)) = l(n) + l(m) + l(z(n)) + l(z(m)) + l(q)
Wtedy warto±¢ funkcji tnP(x)deniujemy jako sum¦ logarytmicznych kosztów wszystkich instrukcji wykonywanych do zatrzymania programu.
Twierdzenie 5.12 Dla lewostronnie ograniczonej deterministycznej maszyny Turinga M =< S, Q, P > istnieje RAM program P symuluj¡cy jej obliczenia.
Szkic dowodu Zaªó»my, »e Q = {0, 1, . . . , n} a S = {0, 1, . . . , k} (dokªadniej ustalmy numeracje tych zbiorów); ponadto przyjmijmy, »e do zako«czenia oblicze« u»ywamy pewnego zbioru stanów. Wtedy konguracj¦ M postaci uqwzapami¦tujemy jako pi¡tk¦ (|u|, |w|, q, k(u), k(w)), gdzie |u| oznacza dªu- go±¢ sªowa, a k(u) jego kod np. gödlowski: k(a1, . . . , an) = Qn
i=0paii. Dla ka»dej instrukcji M mo»na napisa¢ procedur¦ na RAM realizuj¡c¡ jej wyko- nanie; n.p. instrukcja qa → a _ q0 oznacza tylko zmian¦ rejestru, w którym jest przechowywany stan. Troch¦ trudniejsze jest sprawdzenie, czy pierwsz¡
liter¡ w jest a: czyli czy mo»na t¦ instrukcj¦ zastosowa¢. W sumie RAM program b¦dzie b¦dzie miaª posta¢ p¦tli repeat, w której umieszczone s¡
wszyskie procedury symuluj¡ce instrukcje M.
Twierdzenie 5.13 Dla RAM programu P obliczaj¡cego funkcj¦ jednoargu- mentow¡ h o logarytmicznym kryterium kosztów f(n) istnieje trójta±mowa maszyna Turinga M obliczaj¡ca t¦ funkcj¦ o czasowej zªo»ono±ci obliczeniowej O(f (n) ∗ f (n)).
Szkic dowodu Zauwa»my, »e dªugo±¢ ka»dego sªowa (1 ) opisuj¡cego kong- uracje maszyny w czasie dziaªania P jest rz¦du O(f(n)). Maszyna Turinga M przechowuje takie sªowo na pierwszej ta±mie. Aby zrealizowa¢ n.p. in- strukcj¦ Z(k) w konguracji z musi:
1. odszuka¢ na pierwszej ta±mie zapis binarny k;
2. przesun¡¢ si¦ (usuwaj¡c kolejne litery) za b(z(k));
3. wszystko co jest dalej prznie±¢ (usuwaj¡c z pierwszej) na ta±m¦ drug¡;
4. wró¢i¢ na koniec sªowa na ta±mie pierwszej, aby dopisa¢ zawarto±¢
ta±my drugiej.
Realizacja takich oblicze« wymaga O(f(n)) ruchów. Poniewa» maszyna RAM wykonuje co najwy»ej f(n) instrukcji w czasie obliczania h(n) otrzy- mujemy »¡dan¡ tez¦.
6 Efektywne numeracje programów
W rozdziale tym zgª¦bimy oczywist¡ obserwacj¦, »e RAM-programów jest przeliczalnie wiele. Istniej¡ wi¦c numeracje zbioru Π wszystkich RAM-programów.
Denicja 6.1 Niech β : N −→ Π b¦dzie dowoln¡ numeracj¡ zbioru RAM- programów (czyli funkcj¡ «a"). Mówimy, »e β jest efektywna, je±li istniej¡
obliczalne funkcje d : N −→ N, kod, A : N2 −→ N takie, »e dla wszelkich x ∈ N i β(x) =< i0, . . . , in > mamy:
d(x) = n;
∀06r6nir =< kod(x, r), A(x, r) > .
F-cja d okre±la dªugo±¢ (ilo±¢ instrukcji) programu β(x), natomiast kod, A okre±laj¡ kody kolejnych instrukcji oraz adresy komórek, którymi one manip- uluj¡.
Przypomnienie: I = {0, 1, 2, 3} × N ⊂ N × N.
Niech x ∈ N, x = 4a+k i a b¦dzie cz¦±ci¡ caªkowit¡ a k reszt¡ z dzielenia x przez cztery.Odnotujmy oczywisty lemat.
Lemat 6.2 Funkcja α : N −→ I taka, »e α(x) =< k, a > jest bijektywn¡
numeracj¡ zbioru instrukcji.
Posªu»ymy si¦ ni¡ przy zdeniowaniu efektywnej numeracji programów.
Rozwa»my funkcj¦ τ : Sk>0Nk −→ N tak¡, »e
τ (a0, a1, . . . , ak−1) = 2a0 + 2a0+a1+1+ . . . + 2a0+a1+...+ak−1+k−1− 1 Jest to bijektywne kodowanie wszystkich sko«czonych ci¡gów liczb nat- uralnych. Omówimy dokªadniej numeracj¦ odwrotn¡ τ−1 , gdy» chcemy udowodni¢ lemat.
Lemat 6.3 Funkcja
µ(x) =< α(a0), . . . , α(an) >, gdzie τ(a0, . . . , an) = x jest efektywn¡ numeracj¡ programów.
Oczywi±cie funkcja τ−1 powi¡zana jest z przedstawianiem liczb natural- nych w systemie dwójkowym.
Ka»da liczba naturalna wi¦ksza od zera jest sum¡ rosn¡cych pot¦g dwójki, czyli dla x ∈ N:
x + 1 = 2b0 + 2b1 + . . . 2bm gdzie bi < bi+1
Wtedy wzory a0 = b0 i ai+1= bi+1− bi− 1dla i < m opisuj¡ ci¡g, którego kodem (poprzez τ) jest liczba x.
Wyznaczanie przedstawienia x opisuj¡ podane funkcje (prymitywnie) rekuren- cyjne.
1. l(x) = µ(y < x)(x < 2y+1) 2. Pomocniczy ci¡g
c(0, x) = qt(2, x) c(n + 1, x) = qt(2, c(n, x)) 3. Wtedy
b(0, x) = rm(2, x) b(n + 1, x) = rm(2, c(n, x))
Zauwa»my, »e jest to klasyczny algorytm wyznaczania zapisu liczby natu- ralnej x w systemie binarnym opieraj¡cy si¦ na spostrze»eniu, i» cyfra "jed- no±ci"jest reszt¡ z dzielenia przez 2 (b(0, x)), a nast¦pn¡ cyfr¦ (od prawej!) wyznacza si¦ podobnie bior¡c zamiast x cz¦±¢ caªkowit¡ z tego dzielenia.
Teraz mo»na odszuka¢ cyfry 1 w powy»szym przedstawieniu.
l1(x) = Σy6l(x+1)sg(b(y, x + 1)) b1(0, x) = µ y 6 l(x + 1)(b(y, x + 1) = 1)
b1(i + 1, x) = µ y 6 l(x + 1)(b(y, x + 1) = 1 ∧ b1(i, x) < y) a1(0, x) = b1(0, x)
a1(i + 1, x) = b1(i + 1, x) − b1(i, x) − 1 x =
l1(x)
X
i=0
2a1(i,x)− 1
Dowód lematu 6.3 Wystarczy zauwa»y¢, »e d(x) = l1(x) kod(x, r) = rm(4, a1(r, x))
A(x, r) = qt(4, a1(r, x)) s¡ poszukiwanymi funkcjami.
Oznaczenia Od tej pory u»ywa¢ b¦dziemy tej numeracji i oznaczenia µ(e) = Pe, czyli Pe jest programem, który w tej numeracji otrzymaª numer e. Ustalmy n > 1.
1. Wtedy φ(n)e jest n-argumentow¡ funkcj¡ obliczan¡ przez ten program.
B¦dziemy mówi¢, »e funkcja obliczalna ma numer e.
2. Zbiór We(n) jest dziedzin¡ tej funkcji:
We(n) =Dom φ(n)e = {x ∈ Nn; Pe(x) ↓}.
3. Ee(n) jest zbiorem warto±ci tej funkcji:
Ee(n) =Ran φ(n)e = {y ∈ N ; ∃x∈NnPe(x) ↓ y}.
4. Je±li nie b¦dzie pojawiaª si¦ indeks górny n nale»y przyj¡¢, »e jest równy 1.
Nasuwa si¦ wiele pyta«: Czy ka»dy program ma dokªadnie jeden numer?
A funkcja obliczalna? Czy dla danej funkcji obliczalnej f istnieje procedura rozsztrzygaj¡ca, które liczby naturalne s¡ jej numerami? itp. Poniewa» zbiór funkcji obliczalnych ustalonej argumentowo±ci jest przeliczalny jasne jest, »e istniej¡ funkcje, które nie s¡ obliczalne. Co ciekawsze ±ensownie"deniowane funkcje s¡ nieobliczalne.
6.1 Metoda diagonalizacji
Twierdzenie 6.4 Istnieje funkcja totalna f : N 7→ N, która nie jest obliczalna.
Dowód Niech φn, n ∈ N b¦dzie ci¡giem wszystkich funkcji obliczalnych jednoargumentowych. Rozwa»my funkcj¦:
f (n) = φn(n) + 1 n ∈ Wn
0 n 6∈ Wn
Przypu±¢my, »e jest ona obliczalna. Niech e b¦dzie numerem programu j¡
obliczaj¡cego, czyli f = φe. Wtedy f(e) = φe(e), ale e ∈ We, bo f jest totalna, wi¦c z denicji f otrzymujemy f(e) = φe(e) + 1, co daje sprzeczno±¢.
Udwodnimy dwa twierdzenia: o parametryzacji i funkcji uniwersalnej, które dadz¡ matematyczne narz¦dzia do odpowiedzi na powy»sze pytania.
Nale»y zaznaczy¢, »e ka»da formalizacja poj¦cia algorytmu powinna mie¢
te wªasno±ci (efektywna numeracja algorytmów-programów, tw. o parame- tryzacji i funkcji uniwersalnej).
7 Twierdzenie o parametryzacji
Twierdzenie o parametryzacji pozwoli m.in. odpowiedzie¢ na pytanie: czy dla danej funkcji f ∈ C2o numerze e mo»na efektywnie wyznaczy¢ dla dowolnego parametru a ∈ N numer funkcji f(a, _)?
Twierdzenie to jest nieco ogólniejsze.
Twierdzenie 7.1 (O parametryzacji, s-m-n ) Dla dowolnych liczb nat- uralnych n, m > 1 istnieje totalna i obliczalna funkcja smn : N1+m −→ N taka, »e
∀e∈N∀a∈Nm φ(m+n)e (a,_) ' φ(n)smn(e,a)(_)
Dowód, szkic Dla prostoty zaªo»ymy, »e n = m = 1 i b¦dziemy swo- bodnie u»ywa¢ tych oznacze«.
Niech e, a ∈ N. Przez Πe,a oznaczymy program powstaªy z Pe poprzez mody-
kacje:
1. na pocz¡tku umieszczamy ci¡g instrukcji T(1,2), Z(1), S(1), . . . , S(1);
przy czy instrukcja S(1) wyst¦puje a-razy;
2. potem nast¦puje tekst programu Pe ze zmodykowanymi instrukcjami warunkowymi.
Z konstrukcji wynika, »e
φ(2)e (a, y) ' φ(1)Π
e,a(y)
Pozostaje zauwa»y¢, »e µ(m) = Πe,a ⇐⇒ s11(e, a) = m. Zadanie Sformalizuj powy»szy dowód.
Wró¢my do pocz¡tkowych rozwa»a«.
Wniosek 7.2 Niech n, m > 1 i ψ ∈ Cn+m b¦dzie dowoln¡ funkcj¡ obliczaln¡
n + m-argumentow¡. Wtedy istnieje totalna funkcja obliczalna f ∈ Cm taka,
»e
∀a∈Nm ψ(a,_) ' φ(n)f (a)(_)
Dowód Niech e b¦dzie jakimkolwiek numerem ψ. Za f wystarczy wzi¡¢
smn(e,_).//
8 Programy i funkcje uniwersalne
Niech n > 0 b¦dzie ustalon¡ liczb¡ naturaln¡.
Denicja 8.1 Funkcj¡ uniwersaln¡ dla n-argumentowych funkcji RAM-obli- czalnych nazywamy funkcj¦ Ψ(n)U : Nn+1 −→ N tak¡, »e:
∀e∈N∀x∈NnΨ(n)U (e, x) ' φ(n)e (x)
Twierdzenie 8.2 (O funkcjach uniwersalnych) Ka»da funkcja uniwer- salna jest cz¦±ciowo-rekurencyjna, a wi¦c i RAM-obliczalna.
Denicja 8.3 Ka»dy program obliczaj¡cy funkcj¦ uniwersaln¡ nazywamy pro- gramem uniwersalnym.
Dowód Niech e b¦dzie dowoln¡ liczb¡ naturaln¡. Niech σn(e, x, k)b¦dzie kodem konguracji uzyskanej po k krokach oblicze« Pe na x. Przyjmowa¢
b¦dziemy, »e konguracj¡ nast¦pn¡ po ko«cowej jest ona sama. Wtedy (σn(e, x, k))0 jest zawarto±ci¡ licznika rozkazów, natomiast (σn(e, x, k))1 za- warto±ci¡ rejestru zerowego po k krokach oblicze« Pe .
Inaczej, funkcja σn(e, x, k) deniowana jest przez rekursj¦.
σn(e, x, 0) = cd(codn(x))
σn(e, x, k+1) = δ(< kod(e, l), A(e, l) >, σn(e, x, k)) l = (σn(e, x, k))0 < d(e) + 1 σn(e, x, k) l = (σn(e, x, k))0 > d(e) + 1 Zadanie. Wska» schemat rekursji u»yty w denicji funkcji σn(e, x, k).
Wtedy funkcje cn(e, x, k) = (σn(e, x, k))1 jn(e, x, k) = (σn(e, x, k))0 s¡
prymitywnie rekurencyjne i opisuj¡ zawarto±¢ rejestru 0 (c!) i licznik rozkazów (j) po k krokach oblicze« Pe. Wtedy
Ψ(n)U (e, x) ' cn(e, x, µ k (jn(e, x, k) > d(e) + 1)).
co oznacza, »e funkcja uniwersalna jest cz¦±ciowo rekurencyjna.
Uwaga Czy ten dowód nie wydaje Ci si¦ znajomy? A powinien!
8.1 Konsekwencje
Wydaje si¦, »e tw. o parametryzacji i funkcji uniwersalnej s¡ niezbyt istotne w rozwa»aniach dotycz¡cych funkcji obliczalnych. Nic bardziej mylnego!
Przykªadowo poka»emy, »e pewne wa»ne problemy s¡ (nie)rozstrzygalne.
Wniosek 8.4 Dla dowolnego n > 1 nast¦puj¡ce predykaty s¡ rozstrzygalne:
1. Sn(e, x, y, t) ≡ program o nr e na danej x zatrzymuje si¦ w co najwy»ej t krokach zwracaj¡c y;
2. Hn(e, x, t) ≡ program o nr e na danej x zatrzymuje si¦ w co najwy»ej t krokach;
Dowód Nieformalne uzasadnienie jest bardzo proste: konkretny program (uniwersalny) mo»na na danych e, x ±ledzi¢ przez czas t aby ustali¢, czy si¦
zatrzymaª i co obliczyª. Formalnie:
Sn(e, x, y, t) ≡ (σn(e, x, t))0 > d(e) + 1 ∧ (σn(e, x, t))1 = y Hn(e, x, t) ≡ (σn(e, x, t))0 > d(e) + 1
Inn¡ konsekwencj¡ tw. o funkcjach uniwersalnych jest
Wniosek 8.5 (Twierdzenie Kleene o postaci normalnej) Istnieje totalna funkcja obliczalna U(x) i dla ka»dego n > 1 predykaty Tn(e, x, z) takie, »e:
1. φ(n)e (x) okre±lone ⇐⇒ ∃zTn(e, x, z); 2. φ(n)e (x) ' U (µ z Tn(e, x, z)).
Dowód Tn(e, x, z) = Sn(e, x, (z)0, (z)1) i U(x) = (x)0
Na deser najwa»niejsze Twierdzenie
Twierdzenie 8.6 Problem "φx jest totalna"jest nierozstrzygalny.
Dowód( Nie wprost) Przypu±¢my, »e funkcja c(x) = 1 φx totalna
0 φx nie jest totalna jest obliczalna. Wtedy obliczalna jest funkcja
t(x, y) = ΨU(x, y) c(x) = 1
0 c(x) = 0
Z okre±lenia ka»da funkcja totalna f ∈ C1 jest postaci t(e, _) dla pewnego e.
Rozwa»my fukcj¦ g(x) = t(x, x)+1, która oczywi±cie jest totalna i obliczalna.
Przypu±¢my, »e g(x) = t(i, x); wtedy g(i) = t(i, i) ( z denicji t) i g(i) = t(i, i) + 1 (z denicji g), co daje sprzeczno±¢.
9 Zbiory rekurencyjne
9.1 Podstawowe wªasno±ci
Przypomnijmy denicj¦
Denicja 9.1 Niech n > 1 i A ⊆ Nn b¦dzie dowolnym zbiorem a cA: Nn7→
n jego funkcj¡ charakterystyczn¡:
cA(x) = 1 x ∈ A 0 x6∈ A
Mówimy, »e A jest rekurencyjny je±li cA∈ Cn. Wtedy problem (predykat) x ∈ A jest rozstrzygalny. Je±li cA6∈ Cn, to problem x ∈ A jest nierozstrzygalny.
Twierdzenie 9.2 Dla ustalonego n > 1 zbiór wszystkich podzbiorów rekuren- cyjnych A ⊆ Nn jest zamkni¦ty na operacje teoriomnogo±ciowe.
Dowód Oczywi±cie ∅, Nn s¡ rekurencyjne. Niech A, B ⊆ Nn b¦d¡ rekuren- cyjne. Wtedy wobec wcze±niejszych twierdze« wzory
cNn\A(x) = 1÷cA(x), cA∪B(x) = max(cA(x), cB(x)) i cA∩B(x) = cA(x)∗cB(x) dowodz¡ obliczalno±ci odpowiednich funkcji.
Zwykle przez zbiór rekurencyjny rozumie si¦ podzbiór N. Rozdziaª ten po±wi¦cimy zbiorom, które nie s¡ rekurencyjne. Poka»emy »e wiele wa»nych problemów w Teorii Obliczalno±ci jest nierozstrzygalnych. Cz¦sto procedur¦
obliczaj¡c¡ funkcj¦ cA nazywa si¦ rozstrzygaj¡c¡.
9.2 Problemy nierozstrzygalne w Teorii Obliczalno±ci
Twierdzenie 9.3 Problem "x ∈ Wx"jest nierozstrzygalny czyli zbiór K = {x ∈ N : x ∈ Wx} nie jest rekurencyjny.
Dowód Przypu±¢my, »e cK jest obliczalna. Wtedy wzór
g(x) = 1 x 6∈ Wx
∞ x ∈ Wx
deniuje obliczaln¡ funkcj¦. Niech m b¦dzie numerem jakiegokolwiek pro- gramu obliczaj¡cego g, czyli φm = g. Wtedy
m ∈ Wm ←→ m ∈ Domg ←→ m 6∈ Wm i mamy sprzeczno±¢.
Powy»sze twierdzenie nie mówi, »e dla konkretnego a nie umiemy rozstrzygn¡¢, czy a ∈ Dom φa. Czasem jest to bardzo proste zadanie. Twierdzenie ma ogólny charakter: nie istnieje algorytm rozstrzygaj¡cy dla ka»dego x ∈ N, czy x ∈ Dom φx.
Wniosek 9.4 Istnieje obliczalna funkcja jednoargumentowa h, dla której prob- lemy "x ∈ Dom h", "x ∈ Ran h±¡ nierozstrzygalne.
Dowód Rozwa»my funkcj¦ h(x) = x ∗ 1(ΨU(x, x)), która jest obliczalna.
Wtedy;
x ∈ Dom h ←→ x ∈ Wx ←→ x ∈ Ran h
Twierdzenie 9.5 (Problem Stopu jest nierozstrzygalny) Problem "φx(y) jest okre±lone", równowa»nie "Px(y) ↓¢zy "y ∈ Wx", jest nierozstrzygalny.
Dowód nieformalny jest bardzo prosty: gdyby problem "y ∈ Wx"byª rozstrzy- galny, to problem "x ∈ Wx»ównie», co przeczy twierdzeniu 9.3. Dokªadniej funkcja
g(x, y) = 1 y ∈ Wx 0 y 6∈ Wx
jest funkcj¡ charakterystyczn¡ tego problemu. Stosuj¡c proste podstawienie otrzymujemy: cK(x) = g(x, x), czyli funkcj¦ charakterystyczn¡ zbioru K.
Gdyby wi¦c g ∈ C2, to cK ∈ C1.
Powy»sze twierdzenie jest wa»ne: wiele problemów da si¦ sprowadzi¢
podobn¡ technik¡ do problemu stopu. Zauwa»my, »e funkcja 1(ΨU(x, y)) jest obliczalna i jest cz¦±ciow¡ funkcj¡ charakterystyczn¡ problemu stopu;
problem ten jest wi¦c cz¦±ciowo rozstrzygalny. Zauwa»my, »e wniosek 9.4 mówi, »e istniej¡ programy, dla których problem stopu jest nierozstrzygalny, wi¦c tym bardziej musi zachodzi¢ twierdzenie 9.5.
Zanim sformuªujemy ogólne twierdzenie dotycz¡ce wszystkich problemów w Teorii Obliczalno±ci jeszcze przykªad
Twierdzenie 9.6 (Problem poprawno±ci jest nierozstrzygalny) Problem
"φx jest funkcj¡ to»samo±ciowo równ¡ zero"jest nierozstrzygalny.
Dowód Rozwa»my funkcj¦
g(x, y) = 0 x ∈ Wx
∞ x 6∈ Wx
która jest obliczalna, gdy» g(x, y) = 0(ΨU(x, x)). Niech {gx, x ∈ N } b¦dzie rodzin¡ funkcji takich, »e gx(y) = g(x, y) dla wszelkich x, y ∈ N. Wtedy:
∀x∈N gx = 0 wtw x ∈ Wx.
Zastosujmy do funkcji g (wniosek z) twierdzenie o parametryzacji; niech k ∈ C1 b¦dzie totalna i taka, »e
∀x,y∈N g(x, y) = φk(x)(y)tj. φk(x)= gx. Wtedy
∀x∈N x ∈ Wx ←→ φk(x) = 0.