Teoria informacji/TI Wykład 14: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Niwinski (dyskusja | edycje)
Linia 3: Linia 3:
Tak jak w poprzednim wykładzie, ustalamy jakieś bezprefiksowe
Tak jak w poprzednim wykładzie, ustalamy jakieś bezprefiksowe
kodowanie maszyn Turinga (przypominamy, że przykład takiego kodowania można znaleźć  
kodowanie maszyn Turinga (przypominamy, że przykład takiego kodowania można znaleźć  
w 1 wykładzie z Teorii złożoności) oraz  
w 1 wykładzie z Teorii złożoności) oraz bezprefiksową
[[Teoria informacji/TI Wykład 13#universe|maszynę uniwersalną]] <math>U</math>.
[[Teoria informacji/TI Wykład 13#universe|maszynę uniwersalną]] <math>U</math>.
Będziemy pisać <math>M(v) \downarrow </math> na oznaczenie własności
Będziemy pisać <math>M(v) \downarrow </math> na oznaczenie własności
Linia 11: Linia 11:


<center><math>
<center><math>
\Omega = \sum_{U(v)\downarrow } 2^{ - |v|} = \sum_{M(\varepsilon )\downarrow } 2^{ - | \langle M \rangle |}
\Omega = \sum_{U(v)\downarrow } 2^{ - |v|}  
</math></center>}}
</math></center>}}


Linia 21: Linia 21:
{{twierdzenie|[Własności <math> \Omega </math>]|Chaitin_property|Stała Chaitina ma następujące własności.
{{twierdzenie|[Własności <math> \Omega </math>]|Chaitin_property|Stała Chaitina ma następujące własności.


(1) <math> \Omega < 1</math>.
(1) <math> \Omega \leq 1</math>.


(2) Istnieje maszyna Turinga <math> T</math> z dodatkową taśmą nieskończoną, na której wypisane są kolejne
(2) Istnieje maszyna Turinga <math> T</math> z dodatkową taśmą nieskończoną, na której wypisane są kolejne
Linia 38: Linia 38:


{{dowod|||
{{dowod|||
Ad 1. Wykażemy, że  (*)
Ad 1. Ponieważ zbiór
<center><math>
<center><math>
\sum_{M } 2^{ - | \langle M \rangle |} \leq 1           
L(U) = \{ w : U(w) \downarrow \}
</math></center>
</math></center>
(tu sumowanie rozciąga się na wszystkie maszyny Turinga, a nie tylko te, dla których
jest bezprefiksowy,  
<math> M(\varepsilon )\downarrow </math>). Istotnie, przy bezprefikowsym kodowaniu, dla każdego skończonego
każdy skończony podzbiór
zbioru maszyn <math>{\cal M}</math>, odpowiedni
<math>{\cal S} \subseteq L(U) </math>,  
zbiór kodów tworzy [[Teoria informacji/TI Wykład 1#kod|kod bezprefiksowy]], a zatem z  
tworzy [[Teoria informacji/TI Wykład 1#kod|kod bezprefiksowy]], a zatem z  
[[Teoria informacji/TI Wykład 1#kraft| nierówności Krafta]] spełnia nierówność
[[Teoria informacji/TI Wykład 1#kraft| nierówności Krafta]] spełnia nierówność
<math>
<math>
\sum_{M \in {\cal M}} 2^{ - | \langle M \rangle |} \leq 1
\sum_{x \in {\cal S}} 2^{ - | x |} \leq 1
</math>,
</math>,
co po przejściu do supremum daje nierówność (*). Ponieważ niewątpliwie istnieje maszyna, która nie zatrzymuje się na pustej
co po przejściu do supremum daje żądaną nierówność.
taśmie, <math>\Omega </math> jest ostro mniejsza od lewej strony (*).  


Ad 2. Zanim opiszemy konstrukcję maszyny <math> T </math>, zróbmy pewne obserwacje na temat liczby
Ad 2. Zanim opiszemy konstrukcję maszyny <math> T </math>, zróbmy pewne obserwacje na temat liczby
Linia 70: Linia 69:
1 jak 0.
1 jak 0.


Niech <center><math>
 
{\cal S}  =
\{  M :  M(\varepsilon ) \downarrow \}.
</math></center>


Jeśli wybierzemy wariant (a), lub jeśli <math> \Omega </math> nie jest dwójkowo wymierna, to dla każdego
Jeśli wybierzemy wariant (a), lub jeśli <math> \Omega </math> nie jest dwójkowo wymierna, to dla każdego
<math> n </math> istnieje '''skończony''' podzbiór  <math> {\cal S}_n </math> zbioru <math> {\cal S} </math>,
<math> n </math> istnieje '''skończony''' podzbiór  <math> {\cal S}_n  \subseteq L(U)</math>,
taki że liczba wyznaczona przez pierwszych <math> n </math>  cyfr <math> \Omega </math> przedstawia się
taki że liczba wyznaczona przez pierwszych <math> n </math>  cyfr <math> \Omega </math> spełnia


<center><math>
<center><math>
0. \omega_1 \omega_2 \ldots \omega_n =   
0. \omega_1 \omega_2 \ldots \omega_n \leq     
\sum_{M \in {\cal S}_n  } 2^{ - \langle M \rangle }           
\sum_{x \in {\cal S}_n  } 2^{ - |x|  }           
</math></center>
</math></center>
(pamiętamy, że <math> \sum_{i = n+1}^{\infty } 2^{-i} = \frac{1}{2^n} </math>).
(pamiętamy, że <math> \sum_{i = n+1}^{\infty } 2^{-i} = \frac{1}{2^n} </math>).
Linia 87: Linia 83:
Opiszemy teraz działanie maszyny <math> T </math>. Jak zwykle w takich przypadkach, opiszemy
Opiszemy teraz działanie maszyny <math> T </math>. Jak zwykle w takich przypadkach, opiszemy
algorytm, pozostawiając Czytelnikowi jego formalizację w języku maszyn Turinga.
algorytm, pozostawiając Czytelnikowi jego formalizację w języku maszyn Turinga.
Jeśli na wejściu jest słowo nie będące kodem żadnej maszyny, <math> T </math> je odrzuca.
Jeśli na wejściu jest słowo <math> w </math>, <math> |w| = n </math>,
Przypuśćmy, że na wejściu jest <math> \langle M \rangle </math>;
maszyna <math> T </math> symuluje działanie <math> U </math> na <math> w </math>,
niech <math> n = | \langle M \rangle | </math>.
a także przegląda kolejne słowa
Maszyna <math> T </math> symuluje działanie <math> M </math> na <math> \varepsilon </math>
<math>v </math>, powiedzmy w porządku wojskowym, i
(tzn. na pustej taśmie), a także przegląda kolejne kody maszyn Turinga
symuluje działanie <math> U </math> na <math> v </math>.  
<math>\langle  M' \rangle </math>, powiedzmy w porządku wojskowym, i
symuluje działanie <math> M' </math> na <math> \varepsilon </math>.  
Oczywiście każda z tych maszyn może się zapętlić, dlatego <math> T </math>
Oczywiście każda z tych maszyn może się zapętlić, dlatego <math> T </math>
nie symuluje ich  "po kolei"; zamiast tego wykonuje na przemian po jednej (kolejnej) instrukcji
nie symuluje ich  "po kolei"; zamiast tego wykonuje na przemian po jednej (kolejnej) instrukcji
kolejnych symulowanych maszyn.  
kolejnych symulowanych maszyn.  


Można to sobie wyobrazić jako "ruch zygzakowy". Jeśli przyjąć, że maszyny w porządku wojskowym tworzą
Można to sobie wyobrazić jako "ruch zygzakowy". Jeśli przyjąć, że słowa w porządku wojskowym tworzą
ciąg <math> M_0, M_1, M_2, \ldots </math>, a <math>{\cal W} (M_i) </math> oznacza:
ciąg <math> v_0, v_1, v_2, \ldots </math>, a <math>{\cal W} (u_i) </math> oznacza:
wykonaj kolejną instrukcję maszyny <math> M_i </math> lub ''skip'' jeśli <math> M_i </math> już zakończyła
wykonaj kolejny krok działania maszyny <math> U </math> na wejściu  <math> v_i</math> lub ''skip'' jeśli  
<math> U </math> już zakończyła
działanie,
działanie,
to plan działania maszyny <math> T </math> można przedstawić
to plan działania maszyny <math> T </math> można przedstawić


<center><math>
<center><math>
{\cal W} (M_0 ) \, {\cal W} (M_1 ) \, {\cal W} (M_0 ) \, {\cal W} (M_1 ) \, {\cal W} (M_2 ) \,  
{\cal W} (v_0 ) \, {\cal W} (v_1 ) \, {\cal W} (v_0 ) \, {\cal W} (v_1 ) \, {\cal W} (v_2 ) \,  
\, {\cal W} (M_0 ) \, {\cal W} (M_1 ) \, {\cal W} (M_2 ) \,  
\, {\cal W} (v_0 ) \, {\cal W} (v_1 ) \, {\cal W} (v_2 ) \,  
{\cal W} (M_3) \, {\cal W} (M_0 ) \dots
{\cal W} (v_3) \, {\cal W} (v_0 ) \dots
</math></center>
</math></center>


W trakcie swojego obliczenia, maszyna <math> T </math> utrzymuje zmienną, powiedzmy
W trakcie swojego obliczenia, maszyna <math> T </math> utrzymuje zmienną, powiedzmy
<math> {\cal S}' </math>, której aktualną wartością jest (skończony) zbiór kodów tych maszyn
<math> {\cal S}' </math>, której aktualną wartością jest (skończony) zbiór tych słów
<math> M', </math> dla których już udało się stwierdzić, że <math> M'(\varepsilon )\downarrow </math>.
<math> v, </math> dla których już udało się stwierdzić, że <math> U(v )\downarrow </math>.


Zgodnie z powyższą oberwacją, w skończonym czasie jeden z dwóch przypadków ma miejsce.
Zgodnie z powyższą oberwacją, w skończonym czasie jeden z dwóch przypadków ma miejsce.


'''(i)''' <math> T </math> stwierdza, że <math> M(\varepsilon )\downarrow </math>; wtedy daje odpowiedź
'''(i)''' <math> T </math> stwierdza, że <math> U (w )\downarrow </math>; wtedy daje odpowiedź
'''TAK'''.
'''TAK'''.


'''(ii)''' <math> T </math> stwierdza, że
'''(ii)''' <math> T </math> stwierdza, że
<center><math>
<center><math>
0. \omega_1 \omega_2 \ldots \omega_n =   
0. \omega_1 \omega_2 \ldots \omega_n \leq   
\sum_{\langle M' \rangle \in {\cal S}' } 2^{ - |\langle M' \rangle | },           
\sum_{v \in {\cal S}' } 2^{ - |v | },           
</math></center>
</math></center>
ale <math>M \not\in  {\cal S}'</math>; wtedy  daje odpowiedź
ale <math>w \not\in  {\cal S}'</math>; wtedy  daje odpowiedź
'''NIE'''.
'''NIE'''.


Linia 143: Linia 138:
z wynikiem <math> U(x) </math> i co więcej
z wynikiem <math> U(x) </math> i co więcej
<center><math>
<center><math>
U(x) = \Omega_n = 0. \omega_1 \omega_2 \ldots \omega_n ,           
U(x) = \omega_1 \omega_2 \ldots \omega_n ,           
</math></center>
</math></center>
dla pewnego <math> n </math>.
stanowi pierwsze <math> n </math> cyfr rozwinięcia binarnego <math> \Omega </math>,
dla pewnego <math> n </math>. Niech
<center> <math> \Omega_n =  \omega_1 \omega_2 \ldots \omega_n . </math></center>
 
Oczywiście, dla wielu <math> x </math> nie będzie to prawdą; wtedy maszyna <math> R </math> zgodnie
Oczywiście, dla wielu <math> x </math> nie będzie to prawdą; wtedy maszyna <math> R </math> zgodnie
z naszym opisem będzie wykonywać jakieś działania, których wynik nas nie interesuje. Ważne jest
z naszym opisem będzie wykonywać jakieś działania, których wynik nas nie interesuje. Ważne jest
Linia 152: Linia 150:


Z kolei, podobnie jak maszyna  <math> T </math> w dowodzie punktu (2), maszyna <math> R </math> ruchem zygzakowym
Z kolei, podobnie jak maszyna  <math> T </math> w dowodzie punktu (2), maszyna <math> R </math> ruchem zygzakowym
przegląda  kolejne  maszyny <math> M' </math> i symuluje
przegląda  kolejne  słowa <math> y </math> i symuluje
ich działanie na <math> \varepsilon </math>, gromadząc w zmiennej <math> {\cal S}' </math>
działanie na <math> U </math> na <math> y </math>, gromadząc w zmiennej <math> {\cal S}' </math>
kody tych maszyn, dla których obliczenie już się zakończyło. Dodatkowo, dla każdego
te słowa <math> y </math>, dla których obliczenie już się zakończyło. Dodatkowo, dla każdego
<math> \langle M' \rangle \in {\cal S}' </math>, <math> R </math> zapamiętuje
<math> y \in {\cal S}' </math>, <math> R </math> zapamiętuje
<math> M' (\varepsilon ) </math>.  
<math> U(y) </math>.  
Pamiętamy, że wykluczyliśmy już możliwość podwójnej reprezentacji <math> \Omega</math>. Dlatego też,
Pamiętamy, że wykluczyliśmy już możliwość podwójnej reprezentacji <math> \Omega</math>. Dlatego też,
po pewnym skończonym czasie <math> R </math> stwierdzi, że
po pewnym skończonym czasie <math> R </math> stwierdzi, że
<center><math>
<center><math>
\sum_{\langle M' \rangle \in {\cal S}' } 2^{ - |\langle M' \rangle | } = \Omega_n .
\sum_{y \in {\cal S}' } 2^{ - |y | } \geq \Omega_n .
</math></center>
</math></center>
Niech  <math> v </math> będzie pierwszym w porządku wojskowym słowem takim, że
Niech  <math> v </math> będzie pierwszym w porządku wojskowym słowem takim, że
<math> v \neq M' (\varepsilon ) </math>, dla każdego <math> \langle M' \rangle \in {\cal S}' </math>.
<math> v \neq U(y) </math>, dla każdego <math> y \in {\cal S}' </math>.
Zauważmy, że  <math> K_U ( v ) \geq n </math> (z definicji <math> \Omega</math>).  
Zauważmy, że  <math> K_U ( v ) \geq n </math> (z definicji <math> \Omega</math>).  
Wtedy wreszcie nasza maszyna <math> R </math> zatrzymuje się z wynikiem <math> R (x) = v</math>.
Wtedy wreszcie nasza maszyna <math> R </math> zatrzymuje się z wynikiem <math> R (x) = v</math>.

Wersja z 23:32, 8 sty 2007

Stała Chaitina

Tak jak w poprzednim wykładzie, ustalamy jakieś bezprefiksowe kodowanie maszyn Turinga (przypominamy, że przykład takiego kodowania można znaleźć w 1 wykładzie z Teorii złożoności) oraz bezprefiksową maszynę uniwersalną U. Będziemy pisać M(v) na oznaczenie własności maszyna M zatrzymuje się startując ze słowa wejściowego v.

Definicja [Stała Chaitina]

Stałą Chaitina określamy jako sumę szeregu
Ω=U(v)2|v|


Stała Chaitina jest czasem przedstawiana jako prawdopodobieństwo, że losowo wybrany program się zatrzymuje (ma to miejsce przy pewnym wyborze kodowania i miary prawdopodobieństwa). Oczywiście konkretna wartość Ω zależy od wyboru kodowania i maszyny uniwersalnej, ale jej istotne własności od tego nie zależą.

Twierdzenie [Własności Ω]

Stała Chaitina ma następujące własności.

(1) Ω1.

(2) Istnieje maszyna Turinga T z dodatkową taśmą nieskończoną, na której wypisane są kolejne cyfry binarnego rozwinięcia Ω, która dla danego kodu M maszyny M odpowiada na pytanie, czy M(ε).

(3) Istnieje stała c taka, że

KU(ω1ωn)nc,
gdzie ω1ωn oznacza pierwszych n bitów liczby Ω.


Punkt (2) oznacza, że "znając" stałą Chaitina potrafilibyśmy rozstrzygać problem stopu, natomiast (3) mówi nam, że z dokładnością do stałej, Ω jest niekompresowalna.

Dowód

Ad 1. Ponieważ zbiór

L(U)={w:U(w)}

jest bezprefiksowy, każdy skończony podzbiór 𝒮L(U), tworzy kod bezprefiksowy, a zatem z nierówności Krafta spełnia nierówność x𝒮2|x|1, co po przejściu do supremum daje żądaną nierówność.

Ad 2. Zanim opiszemy konstrukcję maszyny T, zróbmy pewne obserwacje na temat liczby Ω. Znanym problemem w dowodach własności liczb rzeczywistych jest, że a priori liczba może mieć dwie różne reprezentacje (w szczególności binarne). Działoby się tak, gdyby liczba Ω była dwójkowo wymierna, tzn.

(a) Ω=0.ω1ω2ωk0111

(b) Ω=0.ω1ω2ωk1000

Jakkolwiek w przyszłości wykluczymy taką możliwość, w tej chwili musimy jeszcze wziąć ją pod uwagę. Otóż bez zmniejszenia ogólności możemy założyć, że Ω dana jest w postaci (a). Istotnie, gdybyśmy mieli maszynę T dla tego przypadku, to łatwo moglibyśmy ją zmodyfikować do maszyny T, która radziłaby sobie z przypadkiem (b). Maszyna T działałaby tak samo jak maszyna T, z tym że począwszy od k+1-szej cyfry Ω, "widziałaby na odwrót", tzn. 0 traktowałaby jak 1 a 1 jak 0.


Jeśli wybierzemy wariant (a), lub jeśli Ω nie jest dwójkowo wymierna, to dla każdego n istnieje skończony podzbiór 𝒮nL(U), taki że liczba wyznaczona przez pierwszych n cyfr Ω spełnia

0.ω1ω2ωnx𝒮n2|x|

(pamiętamy, że i=n+12i=12n).

Opiszemy teraz działanie maszyny T. Jak zwykle w takich przypadkach, opiszemy algorytm, pozostawiając Czytelnikowi jego formalizację w języku maszyn Turinga. Jeśli na wejściu jest słowo w, |w|=n, maszyna T symuluje działanie U na w, a także przegląda kolejne słowa v, powiedzmy w porządku wojskowym, i symuluje działanie U na v. Oczywiście każda z tych maszyn może się zapętlić, dlatego T nie symuluje ich "po kolei"; zamiast tego wykonuje na przemian po jednej (kolejnej) instrukcji kolejnych symulowanych maszyn.

Można to sobie wyobrazić jako "ruch zygzakowy". Jeśli przyjąć, że słowa w porządku wojskowym tworzą ciąg v0,v1,v2,, a 𝒲(ui) oznacza: wykonaj kolejny krok działania maszyny U na wejściu vi lub skip jeśli U już zakończyła działanie, to plan działania maszyny T można przedstawić

𝒲(v0)𝒲(v1)𝒲(v0)𝒲(v1)𝒲(v2)𝒲(v0)𝒲(v1)𝒲(v2)𝒲(v3)𝒲(v0)

W trakcie swojego obliczenia, maszyna T utrzymuje zmienną, powiedzmy 𝒮', której aktualną wartością jest (skończony) zbiór tych słów v, dla których już udało się stwierdzić, że U(v).

Zgodnie z powyższą oberwacją, w skończonym czasie jeden z dwóch przypadków ma miejsce.

(i) T stwierdza, że U(w); wtedy daje odpowiedź TAK.

(ii) T stwierdza, że

0.ω1ω2ωnv𝒮2|v|,

ale w∉𝒮; wtedy daje odpowiedź NIE.

Zauważmy, że w tej chwili możemy już wykluczyć możliwość, że Ω jest liczbą dwójkowo wymierną. Istotnie, Czytelnik pamięta zapewne doskonale, że problem stopu jest nierozstrzygalny, tzn. nie istnieje maszyna bez dodatkowej taśmy, realizująca postulat z warunku (2). Gdyby jednak Ω była dwójkowo wymierna, to opisaną wyżej konstrukcję maszyny T można przeprowadzić bez reprezentowania liczby Ω; zamiast pobierać bity liczby Ω z dodatkowej nieskończonej taśmy, maszyna T mogłaby je sobie łatwo obliczyć. Podobny argument pokazuje znacznie więcej: Ω nie jest liczba wymierną ani algebraiczną, ani w ogole "obliczalną" (zobacz Ćwiczenie).


Ad 3. Opiszemy działanie pewnej maszyny R. Na słowie wejściowym x, R najpierw symuluje działanie maszyny uniwersalnej U na słowie x. Dalszy opis prowadzimy przy założeniu, że obliczenie się zakończyło z wynikiem U(x) i co więcej

U(x)=ω1ω2ωn,

stanowi pierwsze n cyfr rozwinięcia binarnego Ω, dla pewnego n. Niech

Ωn=ω1ω2ωn.

Oczywiście, dla wielu x nie będzie to prawdą; wtedy maszyna R zgodnie z naszym opisem będzie wykonywać jakieś działania, których wynik nas nie interesuje. Ważne jest jednak, że dla pewnego x istotnie zajdzie U(x)=Ωn (z własności maszyny uniwersalnej).

Z kolei, podobnie jak maszyna T w dowodzie punktu (2), maszyna R ruchem zygzakowym przegląda kolejne słowa y i symuluje działanie na U na y, gromadząc w zmiennej 𝒮' te słowa y, dla których obliczenie już się zakończyło. Dodatkowo, dla każdego y𝒮, R zapamiętuje U(y). Pamiętamy, że wykluczyliśmy już możliwość podwójnej reprezentacji Ω. Dlatego też, po pewnym skończonym czasie R stwierdzi, że

y𝒮2|y|Ωn.

Niech v będzie pierwszym w porządku wojskowym słowem takim, że vU(y), dla każdego y𝒮. Zauważmy, że KU(v)n (z definicji Ω). Wtedy wreszcie nasza maszyna R zatrzymuje się z wynikiem R(x)=v.

Zgodnie z Faktem z poprzedniego wykładu, istnieje stała cUR, że

KU(v)KR(v)+cUR.

Ale KR(v)|x| (skoro R wygenerowała v z wejścia x). To daje nam

nKU(v)KR(v)+cUR|x|+cUR

i nierówność ta zachodzi dla każdego x, takiego że U(x)=Ωn. A zatem

nKU(Ωn)+cUR

dla każdego n, tak więc c=cUR może być żądaną stałą.