Oto zestaw zadań do wykładu z Teorii Obliczalności, który (mam

Transkrypt

Oto zestaw zadań do wykładu z Teorii Obliczalności, który (mam
Oto zestaw zadań do wykładu z Teorii Obliczalności, który (mam nadzieję) 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
jest (totalna i) obliczalna.
g(x) x ∈
6 M
1
Rozwiązanie Zauważmy, że definicja h jest klasyczną definicją przez przypadki, 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
2
rejestrze 3) i dokonać odpowiedniej zamiany przed ewentualnym powtórzeniem czynności.
Przykład ma pokazywać, że rekursja jest prostszym sposobem definiowania funkcji obliczalnych niż rekurencja dopuszczana w wielu językach programowania. 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ę zakładamy, że wejściem jest zapis binarny bez zbędnych zer liczby x w pierwszym 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ę dwuargumentową 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 wyznaczyć 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 program o numerze y. Chcemy wykazać, że funkcja charakterystyczna tego zbioru:
(
1 (x, y) ∈ A
cA (x, y) =
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 elementem 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.
3
Zadanie 0.9 Wykaż, że istnieje totalna funkcja k ∈ C1 taka, że ∀x∈N Wk(x) =
{x}.
Zadanie 0.10 Rozstrzygnij, czy podane języki są regularne:
1. L = {0n 1m ; 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 otrzymujemy: 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ρrL y wtw gdy ∀w xw ∈ L ⇔ yw ∈ L. Ponieważ dla
n 6= m mamy an 0m = 0n 1m ∈ L i am 1m = 0m 1m 6∈ L orzymujemy żądaną
tezę.
Język S również nie jest skończenie akceptowalny, co wykażemy z zdefinicji! Przypuśćmy, że A =< {0}, Q, F, δ, q0 > jest RS-automatem akceptują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 uv k w dla każdego 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
|uv k w| = |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 uv k w ∈ 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. Zdefiniujmy przez indukcję ze względu na długość słowa funkcję R : X ? 7→ X ? :
4
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 dowolnych słów x, y ∈ X ? xρL y wtw gdy xR ρLR y R , 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 = wR uR dla dowolnych słów u, w; przypomnijmy, że xρL y wtw gdy z definicji ∀u,w∈X ? uxw ∈ L ⇔ uyw ∈ L. Ale
uxw ∈ L wtw gdy wR xR uR = (uxw)R ∈ LR . Dla dowolnych u, w zdanie
uxw ∈ L ⇔ uyw ∈ L równoważne jest zdaniu wR xR uR = (uxw)R ∈ LR ⇔
wR y R uR = (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ć deterministyczny 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 = {a2n b3m ; n, m ­ 1};
2. L = {an bm an+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:
5
1. B generuje język wszystkich słów postaci bm am dla m ­ 1;
2. słowo w ∈ L wtw, gdy jest postaci vwv, gdzie v = an , n ­ 1 i w ma
wyprowadzenie z B.
6