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