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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Niwinski (dyskusja | edycje)
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 41 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
==Stała Chaitina==
==Stała Chaitina==


Tak jak w poprzednim wykładzie, ustalamy jakieś bezprefiksowe
Tak jak w poprzednim wykładzie, ustalamy jakieś [[Teoria informacji/TI Wykład 13#wazne_kodowanie| bezprefiksowe kodowanie ]] maszyn Turinga oraz [[Teoria informacji/TI Wykład 13#bezprefiks_uniwers| bezprefiksową maszynę uniwersalną]] <math>U</math>.
kodowanie maszyn Turinga (przypominamy, że przykład takiego kodowania można znaleźć
w 1 wykładzie z Teorii złożoności) oraz  
[[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
''maszyna M zatrzymuje się startując ze słowa wejściowego v''.


{{definicja|[Stała Chaitina]|Chaitin|'''Stałą Chaitina''' określamy jako sumę szeregu
{{definicja|[Stała Chaitina]|Chaitin|'''Stałą Chaitina''' określamy jako sumę szeregu


<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>}}




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).
Stałą Chaitina można interpretować jako prawdopodobieństwo, że losowo wybrane dane dla maszyny <math>U</math>
Oczywiście konkretna wartość <math>\Omega </math> zależy od wyboru kodowania i maszyny uniwersalnej, ale jej  
spowodują jej zatrzymanie; innymi słowy, że losowo wybrany program (z danymi) się zatrzymuje.
 
Dokładniej, rozważmy zbiór nieskończonych ciągów zero-jedynkowych,
<math>\{ 0,1 \}^{\omega }</math>. Dla <math>w_1 \ldots w_n \{ 0,1 \}^{n}</math>, określamy
<center><math>
p ( w_1 \ldots w_n \{ 0,1 \}^{\omega } ) = \frac{1}{2^n}</math>,</center>
w szczególności <math>p (\{ 0,1 \}^{\omega } ) = 1</math>. Funkcję  <math>p</math>
można rozszerzyć na Borelowskie podzbiory <math>\{ 0,1 \}^{\omega }</math> tak, by stanowiła
prawdopodobieństwo. Prawdopodobieśtwo to możemy też określić patrząc na ciąg
<math>x \in  \{ 0,1 \}^{\omega }</math> jak na wynik nieskończonego procesu Bernoulliego
<math>X_1, X_2, \ldots</math>, gdzie <math>p (X_i  = 0) = p (X_i  = 1) = \frac{1}{2}</math>.
 
W szczególności <math>\Omega</math> stanowi prawdopodobieństwo zdarzenia,
że ciąg  <math>x \in  \{ 0,1 \}^{\omega }</math> zawiera prefiks <math>v</math>, dla którego
<math>U ( v) \downarrow</math> (z bezprefiksowości wynika, że jest co najwyżej jeden taki prefiks).
Oczywiście konkretna wartość <math>\Omega</math> zależy od wyboru kodowania i maszyny uniwersalnej, ale jej  
istotne własności od tego nie zależą.
istotne własności od tego nie zależą.


{{twierdzenie||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
cyfry binarnego rozwinięcia  <math>\Omega </math>, która dla danego kodu <math> \langle M \rangle </math>
cyfry binarnego rozwinięcia  <math>\Omega</math>, która dla danego kodu <math>\langle M \rangle</math>
maszyny <math> M </math> odpowiada na pytanie, czy <math>M(\varepsilon ) \downarrow </math>.
maszyny <math> M</math> odpowiada na pytanie, czy <math>M(\varepsilon ) \downarrow</math>.


(3) Istnieje stała <math> c </math> taka, że  
(3) Istnieje stała <math>c</math> taka, że  


<center><math>
<center><math>
K_U (\omega_1 \ldots \omega_n ) \geq n - c, </math></center>
K_U (\omega_1 \ldots \omega_n ) \geq n - c</math></center>
gdzie <math>\omega_1 \ldots \omega_n </math> oznacza pierwszych <math> n </math> bitów liczby <math>\Omega </math>.}}
gdzie <math>\omega_1 \ldots \omega_n</math> oznacza pierwszych <math>n</math> bitów liczby <math>\Omega</math>.}}




Punkt (2) oznacza, że ,,znając" stałą Chaitina potrafilibyśmy rozstrzygać problem stopu, natomiast
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, <math>\Omega </math> jest niekompresowalna.
(3) mówi nam, że z dokładnością do stałej, <math>\Omega</math> jest niekompresowalna.


{{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
<math> \Omega </math>.  Znanym problemem w dowodach własności liczb rzeczywistych jest, że ''a priori'' liczba
<math>\Omega</math>.  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 <math>\Omega </math>
może mieć dwie różne reprezentacje (w szczególności binarne). Działoby się tak, gdyby liczba <math>\Omega</math>
była dwójkowo wymierna, tzn.
była dwójkowo wymierna, tzn.


(a) <math> \Omega = 0. \omega_1 \omega_2 \ldots \omega_k 0 1 1 1 \ldots </math>
(a) <math>\Omega = 0. \omega_1 \omega_2 \ldots \omega_k 0 1 1 1 \ldots</math>


(b) <math> \Omega = 0. \omega_1 \omega_2 \ldots \omega_k 1 0 0 0 \ldots </math>
(b) <math>\Omega = 0. \omega_1 \omega_2 \ldots \omega_k 1 0 0 0 \ldots</math>


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


Niech <center><math>
 
{\cal S} = \{ n : (\exists M) \, M(\varepsilon ) \downarrow \wedge \, | \langle M \rangle | = n \}
 
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  \subseteq L(U)</math>,
taki że liczba wyznaczona przez pierwszych <math>n</math>  cyfr <math>\Omega</math> spełnia
 
<center><math>
0. \omega_1 \omega_2 \ldots \omega_n \leq     
\sum_{x \in {\cal S}_n  } 2^{ - |x| }          
</math></center>
</math></center>
i niech
(pamiętamy, że <math>\sum_{i = n+1}^{\infty } 2^{-i} = \frac{1}{2^n}</math>).
 
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.
Jeśli na wejściu jest słowo <math>w</math>,  <math>|w| = n</math>,
maszyna <math>T</math> symuluje działanie <math>U</math> na <math>w</math>,
a równolegle przegląda kolejne słowa z <math>\{ 0,1 \}^*</math>,
<math>v</math>, powiedzmy w [[Teoria informacji/TI Wykład 13#wojsko|porządku wojskowym]]:
<math>\varepsilon = v_0, v_1, v_2, \ldots</math>
i  symuluje działanie <math>U</math> na <math>v_i</math> ruchem zygzakowym, podobnie jak
w algorytmie z dowodu [[Teoria informacji/TI Wykład 13#bezprefiksy|Faktu]].
 
 
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  tych słów
<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.
 
'''(i)''' <math>T</math> stwierdza, że <math>U (w )\downarrow</math>; wtedy daje odpowiedź
'''TAK'''.
 
'''(ii)''' <math>T</math> stwierdza, że
<center><math>
<center><math>
{\cal S}_n  = {\cal S} \cap \{ 0,1,\ldots , n \}
0. \omega_1 \omega_2 \ldots \omega_n \leq   
\sum_{v \in {\cal S}' } 2^{ - |v | },          
</math></center>
</math></center>
ale <math>w \not\in  {\cal S}'</math>; wtedy  daje odpowiedź
'''NIE'''.
Zauważmy, że w tej chwili możemy już wykluczyć możliwość, że <math>\Omega</math> 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 <math>\Omega</math> była dwójkowo wymierna, to opisaną wyżej
konstrukcję maszyny <math>T</math> można przeprowadzić bez reprezentowania liczby <math>\Omega</math>;
zamiast pobierać bity liczby <math>\Omega</math> z dodatkowej nieskończonej taśmy, maszyna
<math>T</math> mogłaby je sobie łatwo obliczyć. Podobny argument pokazuje znacznie więcej:
<math>\Omega</math> nie jest liczba wymierną ani algebraiczną, ani w ogole "obliczalną"
(zobacz Ćwiczenie).


Jeśli wybierzemy wariant (a), lub jeśli <math> \Omega </math> nie jest dwójkowo wymierna, to liczba
wyznaczona przez pierwszych <math> n </math>  cyfr <math> \Omega </math> przedstawia się


Ad 3.  Opiszemy działanie pewnej maszyny <math>R</math>.  Na słowie wejściowym <math>x</math>,
<math>R</math> najpierw symuluje działanie maszyny uniwersalnej <math>U</math> na
słowie <math>x</math>. Dalszy opis prowadzimy przy założeniu, że obliczenie się zakończyło
z wynikiem <math>U(x)</math> i co więcej
<center><math>
<center><math>
0. \omega_1 \omega_2 \ldots \omega_n =   
U(x) =  \omega_1 \omega_2 \ldots \omega_n ,         
\sum_{i \in {\cal S}_n  } 2^{ - i}         
</math></center>
</math></center>
(pamiętamy, że <math> \sum_{i = n+1}^{\infty } 2^{-i} = \frac{1}{2^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
z naszym opisem będzie wykonywać jakieś działania, których wynik nas nie interesuje. Ważne jest
jednak, że dla ''pewnego'' <math>x</math> istotnie zajdzie <math>U(x) = \Omega_n</math>
(z własności maszyny uniwersalnej).
 
Z kolei, podobnie jak maszyna  <math>T</math> w dowodzie punktu (2), maszyna <math>R</math> ruchem zygzakowym
przegląda  kolejne  słowa  <math>y</math> i symuluje
działanie na <math>U</math> na <math>y</math>, gromadząc w zmiennej <math>{\cal S}'</math>
te słowa <math>y</math>, dla których obliczenie już się zakończyło. Dodatkowo, dla każdego
<math> y \in {\cal S}'</math>, <math>R</math> zapamiętuje
<math>U(y)</math>.
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
<center><math>
\sum_{y \in {\cal S}' } 2^{ - |y | } \geq \Omega_n </math></center>
Niech  <math>v</math> będzie pierwszym w porządku wojskowym słowem takim, że
<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>).
Wtedy wreszcie nasza maszyna <math>R</math> zatrzymuje się z wynikiem <math>R (x) = v</math>.


Ad 3.}}
Zgodnie z [[Teoria informacji/TI Wykład 13#fakt_Kolmogorowa|Faktem]] z poprzedniego wykładu,
istnieje stała
<math>c_{UR}</math>, że
<center><math>
K_U (v) \leq K_R (v) +  c_{UR} </math></center>
Ale <math>K_R (v) \leq |x|</math> (skoro <math>R</math> wygenerowała <math>v</math>
z wejścia <math>x</math>). To daje nam
<center><math>
n \leq K_U (v) \leq K_R (v) +  c_{UR} \leq |x| +  c_{UR}
</math></center>
i nierówność ta zachodzi dla każdego <math>x</math>, takiego że
<math>U (x) = \Omega_n</math>. A zatem
<center><math>
n \leq K_U (\Omega_n ) +  c_{UR}
</math></center>
dla każdego <math>n</math>, tak więc <math>c = c_{UR}</math> może być żądaną stałą.
}}
 
==Związek z entropią Shannona==
 
Jeśli stałą Chaitina interpretujemy jako prawdopodobieństwo, że bezprefiksowa maszyna uniwersalna
<math>U</math> się zatrzymuje, to dla <math>y \in \{ 0,1 \}^*</math>,
 
<center><math>
p_U (y) = \sum_{v: U(v) = y } 2^{ - |v|}
</math></center>
 
stanowi prawdopodobieństwo zdarzenia, że maszyna <math>U</math> zatrzymuje się  z wynikiem <math>y</math>.
 
Zauważmy, że <math>p_U</math> nie stanowi miary prawdopodobieństwa na <math>\{ 0,1 \}^*</math>,
w szczególności
<center><math>
\sum_{y \in \{ 0,1 \}^*} p_U (y) = \Omega </math>,
a nie 1.
</center>
 
Ale już
 
<center>
<math>p(y) = \frac{p_U (y)}{\Omega }</math>
</center>
wyznacza prawdopodobieństwo na <math>\{ 0,1 \}^*</math>.
 
 
Jak pamiętamy z wykładu [[Teoria informacji/TI Wykład 3|3]], dla skończonej przestrzeni probabilistycznej
<math>S</math>, optymalne kodowanie <math>\varphi : S \to \{ 0,1 \}^*</math> było osiągnięte wtedy, gdy
 
<center><math>
|\varphi (y) | \approx - \log_2 (p (y) )
</math></center>
 
Dokładniej, [[Teoria informacji/TI Wykład 3#kod_entropia|równość]] była osiągnięta  dla prawdopodobieństw
będących potęgami <math>\frac{1}{2}</math>, a w ogólności mamy
[[Teoria informacji/TI Wykład 4#pierwsze|zbieżność asymptotyczną]].
 
Otóż podobny związek możemy wskazać dla bezprefiksowej złożoności Kołmogorowa, która w pewnym sensie wyznacza optymalne kodowanie słów w <math>\{ 0,1 \}^*</math>, przy określonym wyżej prawdopodobieństwie <math>p</math>.
 
Mówiąc nieformalnie, mamy
<center><math>
K (y) \approx - \log_2 p (y) </math></center>
 
Dokładniej, pokażemy następujący
 
{{fakt|[Entropia Kołmogorowa]|entro_kol|Istnieje stała <math>c</math>, że dla dowolnego <math>y \in \{ 0,1 \}^*</math>,
<center><math>
K(y) - c \leq - \log_2 p (y)  \leq K(y) + c</math></center>
}}
 
{{dowod|||Oczywiście, wystarczy jeśli pokażemy
<center><math>
K(y) - c \leq - \log_2 p_U (y)  \leq K(y) + c</math></center>
Mamy <math>K(y) = |x|</math>, dla pewnego <math>x</math>,  takiego, że <math>U (x) = y</math>,
a zatem
<center><math>
\frac{1}{2^{|x|}} \leq p_U (y)</math>,</center>
skąd
<center><math>
- \log_2 p_U (y)  \leq |x| = K(y) </math></center>
Pozostaje dowieść, że
<center><math>
K(y) \leq - \log_2 p_U (y)  +c</math>,</center>
dla pewnej stałej <math>c</math>. Wobec [[Teoria informacji/TI Wykład 13#fakt_bez_Kolmogorowa|Faktu]] o niezmienniczości, wystarczy tym celu skonstruować maszynę <math>T</math> taką, że <math>T (w_y) = y</math> oraz
<center><math>
|w_y | \leq - \log_2 p_U (y)  +c</math>,</center>
gdzie <math>T</math> i <math>c</math> nie zależą od <math>y</math>.
 
Ustawmy wszystkie słowa <math>y \in \{ 0,1 \}^*</math> w porządku wojskowym: <math>y_0, y_1, y_2, \ldots</math>
 
Z kolei rozważmy ciąg przedziałów domkniętych na prostej <math>I_{y_0}, I_{y_1}, I_{y_2}, \ldots</math>, gdzie początkiem <math>I_{y_0}</math> jest 0; koniec <math>I_{y_m}</math> jest początkiem <math>I_{y_{m+1}}</math> i długością przedziału <math>I_{y_m}</math> jest <math>p_U (y_m)</math>.
 
Zauważmy, że suma wszystkich przedziałów <math>I_{y_m}</math> zawiera się w odcinku  <math>[0,1]</math>.
 
''Przedziałem binarnym'' jest z definicji przedział postaci
<center><math>
\left[ \underbrace{a_1 \cdot \frac{1}{2} + a_2 \cdot \frac{1}{2^2} + \ldots + a_k \cdot \frac{1}{2^k}}_L, L + \frac{1}{2^k} \right)</math>,</center>
gdzie <math>a_1, \ldots , a_k \in \{ 0, 1\}</math>; <math>a_k = 1</math>.
 
Dla przedziału <math>I_y</math>, znajdźmy największy przedział binarny <math>J</math> w nim zawarty, a gdyby było więcej przedziałów o tej samej długości, to ten, którego początek jest położony najbardziej na lewo. Niech <math>L = a_1 \cdot \frac{1}{2} + a_2 \cdot \frac{1}{2^2} + \ldots + a_k \cdot \frac{1}{2^k}</math> będzie początkiem tego największego przedziału binarnego. Połóżmy
<center><math>
w_y =  a_1 a_2 \ldots a_k
</math></center>
(a zatem <math>|w_y | = k</math>).
 
Oszacujemy teraz długość przedziału <math>I_y</math> (równą <math>p_U (y)</math>) w zależności od <math>k</math>.
 
Kluczowe jest spostrzeżenie, ile kroków długości <math>\frac{1}{2^k}</math> możemy zrobić z punktu <math>L</math> w lewo lub w prawo, pozostając cały czas w przedziale <math>I_y</math>. Analiza przypadków pokazuje, że możemy zrobić co najwyżej 2 kroki w lewo i 5 kroków w prawo. W każdym razie długość przedziału <math>I_y</math> spełnia nierówność
<center><math>
p_U (y) \leq \frac{8}{2^k} = \frac{1}{2^{k-3}}
</math></center>
skąd otrzymujemy
<center><math>
k-3 \leq  - \log p_U (y)</math>,</center>
a zatem
<center><math>
k = | w_y | \leq - \log p_U (y) + 3
</math></center>
Pozostaje pokazać, że znając <math>w_y</math>, potrafimy algorytmicznie odtworzyć <math>y</math>, a zatem żądana maszyna  <math>T</math>,  taka że  <math>T(w_y) = y</math>, istnieje. Konstrukcja jest żmudna, ale rutynowa. Używając ruchu zygzakowego, znajdujemy coraz lepsze przybliżenia końców przedziałów  <math>I_{y_0}, I_{y_1}, I_{y_2}, \ldots</math> tak długo, aż zdobywamy pewność, że liczba reprezentowana przez <math>w_y</math> znajduje się w przedziale <math>I_y</math>, jest to właśnie poszukiwane <math>y</math>. Zauważmy, że dla każdego <math>n</math>, od pewnego momentu krańce przedziałów mogą się przesuwać co najwyżej o <math>\frac{1}{2^n}</math>, a zatem oczekiwana chwila nastąpi.
}}

Aktualna wersja na dzień 22:14, 11 wrz 2023

Stała Chaitina

Tak jak w poprzednim wykładzie, ustalamy jakieś bezprefiksowe kodowanie maszyn Turinga oraz bezprefiksową maszynę uniwersalną U.

Definicja [Stała Chaitina]

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


Stałą Chaitina można interpretować jako prawdopodobieństwo, że losowo wybrane dane dla maszyny U spowodują jej zatrzymanie; innymi słowy, że losowo wybrany program (z danymi) się zatrzymuje.

Dokładniej, rozważmy zbiór nieskończonych ciągów zero-jedynkowych, {0,1}ω. Dla w1wn{0,1}n, określamy

p(w1wn{0,1}ω)=12n,

w szczególności p({0,1}ω)=1. Funkcję p można rozszerzyć na Borelowskie podzbiory {0,1}ω tak, by stanowiła prawdopodobieństwo. Prawdopodobieśtwo to możemy też określić patrząc na ciąg x{0,1}ω jak na wynik nieskończonego procesu Bernoulliego X1,X2,, gdzie p(Xi=0)=p(Xi=1)=12.

W szczególności Ω stanowi prawdopodobieństwo zdarzenia, że ciąg x{0,1}ω zawiera prefiks v, dla którego U(v) (z bezprefiksowości wynika, że jest co najwyżej jeden taki prefiks). 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 równolegle przegląda kolejne słowa z {0,1}*, v, powiedzmy w porządku wojskowym: ε=v0,v1,v2, i symuluje działanie U na vi ruchem zygzakowym, podobnie jak w algorytmie z dowodu Faktu.


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łą.

Związek z entropią Shannona

Jeśli stałą Chaitina interpretujemy jako prawdopodobieństwo, że bezprefiksowa maszyna uniwersalna U się zatrzymuje, to dla y{0,1}*,

pU(y)=v:U(v)=y2|v|

stanowi prawdopodobieństwo zdarzenia, że maszyna U zatrzymuje się z wynikiem y.

Zauważmy, że pU nie stanowi miary prawdopodobieństwa na {0,1}*, w szczególności

y{0,1}*pU(y)=Ω,

a nie 1.

Ale już

p(y)=pU(y)Ω

wyznacza prawdopodobieństwo na {0,1}*.


Jak pamiętamy z wykładu 3, dla skończonej przestrzeni probabilistycznej S, optymalne kodowanie φ:S{0,1}* było osiągnięte wtedy, gdy

|φ(y)|log2(p(y))

Dokładniej, równość była osiągnięta dla prawdopodobieństw będących potęgami 12, a w ogólności mamy zbieżność asymptotyczną.

Otóż podobny związek możemy wskazać dla bezprefiksowej złożoności Kołmogorowa, która w pewnym sensie wyznacza optymalne kodowanie słów w {0,1}*, przy określonym wyżej prawdopodobieństwie p.

Mówiąc nieformalnie, mamy

K(y)log2p(y)

Dokładniej, pokażemy następujący

Fakt [Entropia Kołmogorowa]

Istnieje stała c, że dla dowolnego y{0,1}*,
K(y)clog2p(y)K(y)+c

Dowód

Oczywiście, wystarczy jeśli pokażemy
K(y)clog2pU(y)K(y)+c

Mamy K(y)=|x|, dla pewnego x, takiego, że U(x)=y, a zatem

12|x|pU(y),

skąd

log2pU(y)|x|=K(y)

Pozostaje dowieść, że

K(y)log2pU(y)+c,

dla pewnej stałej c. Wobec Faktu o niezmienniczości, wystarczy tym celu skonstruować maszynę T taką, że T(wy)=y oraz

|wy|log2pU(y)+c,

gdzie T i c nie zależą od y.

Ustawmy wszystkie słowa y{0,1}* w porządku wojskowym: y0,y1,y2,

Z kolei rozważmy ciąg przedziałów domkniętych na prostej Iy0,Iy1,Iy2,, gdzie początkiem Iy0 jest 0; koniec Iym jest początkiem Iym+1 i długością przedziału Iym jest pU(ym).

Zauważmy, że suma wszystkich przedziałów Iym zawiera się w odcinku [0,1].

Przedziałem binarnym jest z definicji przedział postaci

[a112+a2122++ak12kL,L+12k),

gdzie a1,,ak{0,1}; ak=1.

Dla przedziału Iy, znajdźmy największy przedział binarny J w nim zawarty, a gdyby było więcej przedziałów o tej samej długości, to ten, którego początek jest położony najbardziej na lewo. Niech L=a112+a2122++ak12k będzie początkiem tego największego przedziału binarnego. Połóżmy

wy=a1a2ak

(a zatem |wy|=k).

Oszacujemy teraz długość przedziału Iy (równą pU(y)) w zależności od k.

Kluczowe jest spostrzeżenie, ile kroków długości 12k możemy zrobić z punktu L w lewo lub w prawo, pozostając cały czas w przedziale Iy. Analiza przypadków pokazuje, że możemy zrobić co najwyżej 2 kroki w lewo i 5 kroków w prawo. W każdym razie długość przedziału Iy spełnia nierówność

pU(y)82k=12k3

skąd otrzymujemy

k3logpU(y),

a zatem

k=|wy|logpU(y)+3

Pozostaje pokazać, że znając wy, potrafimy algorytmicznie odtworzyć y, a zatem żądana maszyna T, taka że T(wy)=y, istnieje. Konstrukcja jest żmudna, ale rutynowa. Używając ruchu zygzakowego, znajdujemy coraz lepsze przybliżenia końców przedziałów Iy0,Iy1,Iy2, tak długo, aż zdobywamy pewność, że liczba reprezentowana przez wy znajduje się w przedziale Iy, jest to właśnie poszukiwane y. Zauważmy, że dla każdego n, od pewnego momentu krańce przedziałów mogą się przesuwać co najwyżej o 12n, a zatem oczekiwana chwila nastąpi.