Oto zestaw zadań do wykładu z Teorii Obliczalności, który (mam nadzie- ję) uławi opanowanie materiału.
Zadanie 0.1 Napisz program na maszynę RAM obliczający funkcję:
1. f (x) = x mod 2;
2. g(x, y) =
( 1 x ¬ y 0 x > y
Rozwiązanie Oto program obliczający funkcję f : 0 I(1, 2, 7)
1 S(2) 2 I(1, 2, 5) 3 S(2) 4 goto0 5 S(0)
Opis: W rejstrze 2-gim umieszczane są kolejne liczby naturalne. Jeśli x jest parzyste (test w instrukcji 0), to program zwraca 0, jeśli nieparzyste (test w instrukcji 2), program zwraca 1.
Jeśli w pętli 0-4 umieścimy instrukcję S(3) ( w którym miejscu?), to po zatrzymaniu programu w rejestrze 3-cim będzie wyznaczona częś całkowita z dzielenia przez 2.
Zmodyfikuj ten program tak, aby obliczał resztę z dzielenia x przez dowolną liczbę naturalną y różną od zera.
W zadaniu drugim należy napisać program, który wyznaczy mniejszą z liczb x, y i ustali, czy jest to x, czy y.
0 I(3, 1, 4) 1 I(3, 2, 5) 2 S(3) 3 goto0 4 S(0)
Zadanie 0.2 Wykaż, że jeśli funkcja charakterystyczna cM zbioru M ⊆ N jest obliczalna a funkcje f, g ∈ C1 są totalne, to funkcja:
h(x) =
( f (x) x ∈ M
g(x) x 6∈ M jest (totalna i) obliczalna.
Rozwiązanie Zauważmy, że definicja h jest klasyczną definicją przez przy- padki, odpowiadającą instrukcji warunkowej: if x ∈ M then f (x) else g(x).
Definicję tę można zapisać matematycznym wzorem h(x) = cM(x)f (x)+(1−
cM(x))g(x). Wszystkie użyte w nim funkcje są obliczalne, więc z twierdzenia o postawianiu mamy dowód, że h jest obliczalna. Przypuśćmy, że f, g nie są totalne np. f nie jest określona dla dowolnego x ∈ N . Wtedy dziedziną funkcji h równa jest dziedzinie g, a podany wzór wymaga znajomości f (x) dla każdego x, więc dziedziną takiej funkcji jest zbiór pusty. Podany dowód nie jest więc poprawny dla funkcji, które nie są totalne. Nie oznacza to , że twierdzenie nie jest prawdziwe dla funkcji, które nie są totalne! Program obliczający h najpierw ustali, czy cM(x) = 1 i zależnie od wartości logicznej tego testu wywoła program obliczający f albo program obliczający g.
Zadanie 0.3 Wykaż, że fukcja f wyznaczająca wykładnik z jakim 2 pojawia się w rozkładzie na czynniki pierwsze liczby x jest obliczalna.
Rozwiązanie Przyjmijmy, że f (x) = 0 dla liczby nieparzystej x. Wtedy wartość f (x) równa się najmniejszej liczbie naturalnej k dla której 2k jest dzielnikiem x, ale 2k+1 nie jest dzielnikiem x. Zakładając, że funkcja g(x, y) = x mod y jest obliczalna wystarczy zastosować operator minimalizacji;
f (x) = µ k (g(x, 2k) = 0 ∧ g(x, 2k+1) 6= 0)
Zadanie 0.4 Wykaż, że funkcja Fibonacciego: f(0)=1,f(1)=1, f(n+2)=f(n)+f(n+1);
jest obliczalna.
Rozwiązanie Zauważmy, że definicja ta nie jest prostą rekursją, w której wartość funkcji na n + 1 zależy tylko od wartości na n. Tym niemniej łatwo jest obliczać f przez prostą iterację; aby ułatwić sobie zadanie zapiszemy ją używając pętli for:
z[0] = 1;
z[2] = 1;
f or i = 2 to z[1] do begin
z[3] := z[0] + z[2];
z[2] := z[0];
z[0] := z[3]end;
Pomysł jest prosty: w rejestrze 0 jest obliczona wartość w kroku ostatnim, a w rejestrze 2 w kroku przedostatnim. Wtedy należy wyznaczyć ich sumę (w
rejestrze 3) i dokonać odpowiedniej zamiany przed ewentualnym powtórze- niem czynności.
Przykład ma pokazywać, że rekursja jest prostszym sposobem definiowa- nia funkcji obliczalnych niż rekurencja dopuszczana w wielu językach progra- mowania. Rekursja jest raczej iteracją.
Zadanie 0.5 Skonstruuj maszynę Turinga obliczającą funkcję 1. f (x) = x mod 4;
2. g(x) = x div 2;
Rozwiązanie Ponieważ w definicji maszyny Turinga obliczającej funkcję za- kładamy, że wejściem jest zapis binarny bez zbędnych zer liczby x w pierw- szym wypadku wystarczy odszykać dwie ostatnie cyfry zapisu, w drugim usunąć ostatnią cyfrę. Należy to zrobić dbająć o poprawność wyniku (też musi być zpisem binarnym..).
Zadanie 0.6 Wyznacz program o numerze 2002. Jaką funkcję dwuargumen- tową oblicza ten program?
Zadanie 0.7 Wyznacz jakokolwiek numer funkcji f (x) = x mod 3.
Wskazówka Należy napisać dowolny program obliczający funkcję f i wy- znaczyć jego numer.
Zadanie 0.8 Wykaż, że problem φx = φy jest nierozstrzygalny.
Rozwiązanie Formalnie: rozważmy zbiór A tych par liczb naturalny (x, y), że program o numerze x oblicza tę samą funkcję jednoargumentową co pro- gram o numerze y. Chcemy wykazać, że funkcja charakterystyczna tego zbio- ru:
cA(x, y) =
( 1 (x, y) ∈ A 0 (x, y) 6∈ A
nie jest obliczalna. Z wykładu wiemy, że nie jest rozstrzygalny problem
”φx = 0, czyli nie jest obliczalna funkcja charakterystyczna zbioru B tych liczb naturalnych x, które są numerami programów obliczających funkcję jednoargumentową tożsamościowo równą zero. Niech e będzie ustalonym ele- mentem zbioru B. Wobec równości cB(x) = cA(x, e) mamy, że obliczalność fukcji cA pociąga obliczalność funkcji cB. Zatem cA nie jest obliczalna.
Zadanie 0.9 Wykaż, że istnieje totalna funkcja k ∈ C1 taka, że ∀x∈NWk(x) = {x}.
Zadanie 0.10 Rozstrzygnij, czy podane języki są regularne:
1. L = {0n1m; n 6= m};
2. S = {0p; p jest liczbą pierwszą };
3. język P tych słów w ∈ {0, 1}?, które są postaci uw, gdzie u ∈ L.
Rozwiązanie Ponieważ każde słowo ma prefiks należący do języka L otrzy- mujemy: P = {0, 1}?. Język ten jest z definicji regularny.
Aby zanalizować pozostałe języki posłużymy się twierdzeniem Kleene, które mówi, że język jest regularny wtw gdy jest skończenie akceptowalny.
Wykorzystamy twierdzenie Nerode’a aby pokazać, że L nie jest skończenie akceptowalny. Rozważmy ciąg słów an = 0n, n ∈ N . Wystarczy wykazać, że każde dwa słowa w nim występujące wyznaczają różne klasy abstrakcji relacji ρrL, czyli zbiór ilorazowy {0, 1}?\ρrL wszystkich klas abstrakcji jest nieskoń- czony. Przypomnijmy, że xρrLy wtw gdy ∀wxw ∈ L ⇔ yw ∈ L. Ponieważ dla n 6= m mamy an0m = 0n1m ∈ L i am1m = 0m1m 6∈ L orzymujemy żądaną tezę.
Język S również nie jest skończenie akceptowalny, co wykażemy z zde- finicji! Przypuśćmy, że A =< {0}, Q, F, δ, q0 > jest RS-automatem akcep- tującym S o n stanach. Rozważmy liczbę pierwszą p większą od n. Niech c = q0, q1, . . . , qp będzie ciągiem stanów opisującym działanie A prowadzące do zaakceptowania słowa 0p (czyli qp ∈ F ). Ciąg ten jest długości p + 1 > n, więc dla pewnych i < j, i, j ¬ p mamy qi = qj. Niech u = 0i, v = 0j−i, w = 0p−j. Wtedy 0p = uvw, słowo v jest niepuste i każde słowo uvkw dla każde- go k ∈ N jest akceptowane przez A, bo jeden z ciągów stanów pojawiają- cych się w czasie obliczeń A na takim słowie można uzyskać z c powtarzając wielokrotnie qi, . . . , qj. Wtedy słowo uw ∈ L, weźmy k = |u| + |w|, wtedy
|uvkw| = |u| + k|v| + |w| = k(|v| + 1). Ponieważ k jest liczbą pierwszą, a
|v| + 1 2 liczba ta jest złożona, co jest sprzeczne z tym, że uvkw ∈ S.
Otrzymujemy zatem, że żaden RS-automat nie akceptuje języka S.
Zadanie 0.11 Niech X-język L będzie skończenie akceptowalny. Zdefiniuj- my przez indukcję ze względu na długość słowa funkcję R : X? 7→ X?:
R = ; (wa)R = awR dla a ∈ X, w ∈ X?. Łatwo zauważyć, że funkcja ta
”odwraca litery w słowie”. Odbiciem zwierciadlanym języka L nazywamy ję- zyk LR będący obrazem L przez zdefiniowaną funkcję. Wykaż, że język LR jest skończenie akceptowalny.
Rozwiązanie Wykorzystamy twierdzenie Myhill’a wykazując, że dla dowol- nych słów x, y ∈ X? xρLy wtw gdy xRρLRyR, co pociąg, że te relacje (ρL, ρLR) mają tyle samo klas abstrakcji. Jeśli więc L jest skończenie akceptowalnyh, to LR również. Zauważmy, że (uw)R = wRuR dla dowolnych słów u, w; przy- pomnijmy, że xρLy wtw gdy z definicji ∀u,w∈X?uxw ∈ L ⇔ uyw ∈ L. Ale uxw ∈ L wtw gdy wRxRuR = (uxw)R ∈ LR. Dla dowolnych u, w zdanie uxw ∈ L ⇔ uyw ∈ L równoważne jest zdaniu wRxRuR = (uxw)R ∈ LR ⇔ wRyRuR = (uyw)R ∈ LR, co wobec dowolności u, w i równości (uR)R = u kończy dowód.
Zadanie 0.12 Skonstruuj RS-automaty rozpoznające języki:
1. wszystkich słów nad alfabetem {a, b} nie zaczynających się słowem aba;
2. opisany wyrażeniem regularnym (a + ba + bba)?( + b + bb);
3. wszystkich słów nad alfabetem {a, b}, w których ilość wystąpień litery a jest parzysta.
Rozwiązanie, wskazówki W zadaniu pierwszym należy skonstruować de- terministyczny i zupełny RS-automat dla języka wszystkich słów zaczynają- cych się aba i zamienić zbiór stanów końcowych na jego dopełnienie.
W zadaniu drugim należy zauważyć, że do wyrażenia pasują dokładnie te słowa, które nie zawierają słowa bbb.
Zadanie 0.13 Skonstruuj gramatyki bezkontekstowe generujące jeżyki:
1. K = {a2nb3m; n, m 1};
2. L = {anbman+m; n, m 1};
Które z wymienionych języków są prawostronnie liniowe?
Rozwiązanie, wskazówki Przypomnijmy, że język jest generowany przez gramatykę prawostronnie liniową wtw, gdy jest regularny wtw, gdy jest skoń- czenie akceptowalny. Oto gramatyka generująca drugi język: S → aSa|aBa B → ba|bBa. Uzasadnienie jej poprawności opiera się o dwie obserwacje:
1. B generuje język wszystkich słów postaci bmam dla m 1;
2. słowo w ∈ L wtw, gdy jest postaci vwv, gdzie v = an, n 1 i w ma wyprowadzenie z B.