|
|
Linia 1: |
Linia 1: |
| {tw}{Twierdzenie}[section]
| | Sformułujemy definicje podstawowych klas |
| {fa}[tw]{Fakt}
| | złożoności w języku maszyn Turinga oraz metodę ich porównywania. |
| {AZbioruPustego}{Aksjomat Zbioru Pustego}
| | Przeanalizujemy związki między rodziną języków określonych przez maszyny Turinga a |
| {APary}{Aksjomat Pary}
| | rodziną języków typu '''(0)''' z hierarchii Chomsky'ego. Podamy dalsze własności |
| {ASumy}{Aksjomat Sumy}
| | języków kontekstowych i typu '''(0)'''. |
| | Wprowadzimy pojęcie języka rekurencyjnie |
| | przeliczalnego oraz przedstawimy tezę Churcha. Następnie omówimy |
| | teoretyczne podstawy teorii rozstrzygalności oraz przeanalizujemy |
| | kilka problemów nierozstrzygalnych w teorii języków. |
|
| |
|
| {}{0pt}
| | __FORCETOC__ |
| {}{0pt}
| |
| {}{0in}
| |
| {}{-0.5in}
| |
| {}{6.3in}
| |
| {}{9in}
| |
|
| |
|
| {cwicz}[section]
| | ==Klasy złożoności obliczeniowej== |
| {obra}[section]
| |
| {hint}
| |
|
| |
|
| {thm}{Twierdzenie}[section]
| | Jednym z podstawowych celów wprowadzania maszyn Turinga jest dążenie |
| {defn}[thm]{Definicja}
| | do formalnej definicji złożoności obliczeniowej. Na podstawie |
| | wcześniejszych uwag możemy '''utożsamiać akceptację słowa''' |
| | przez maszynę Turinga z jej '''zatrzymaniem się'''. Intuicyjnie, |
| | można takie zachowanie maszyny Turinga utożsamić z wykonaniem |
| | programu, który zwraca odpowiedź "Tak" na postawione przez nas |
| | pytanie. |
|
| |
|
| {Zadanie}[thm]{Zadanie} | | {{definicja|1.1|| |
| {Uwaga}[thm]{Uwaga} | | Ustalmy funkcje <math>\displaystyle t,s:\mathbb{N}\rightarrow \mathbb{N}</math>. Mówimy, że |
| {Przykład}[thm]{Przykład} | | maszyna Turinga <math>\displaystyle \mathcal{MT}</math> (deterministyczna lub |
| {Rozwiązanie}[thm]{Rozwiązanie} | | niedeterministyczna) '''akceptuje słowo <math>\displaystyle w\in \Sigma_I^*</math> w |
| {Hint}[thm]{Hint} | | czasie <math>\displaystyle t(|w|)</math>''', jeśli istnieje ciąg <math>\displaystyle k\leqslant t(|w|)</math> konfiguracji |
| | <math>\displaystyle d_1,d_2,\dots, d_k</math> takich, że <math>\displaystyle d_1=\sharp s_0 w \sharp</math>, <math>\displaystyle d_k= |
| | \sharp w_{1}s_{F}w_{2}\sharp</math> dla pewnych <math>\displaystyle w_{1},w_{2}\in \Sigma |
| | _{T}^{*},s_{F}\in S_{F}</math> oraz <math>\displaystyle d_i \mapsto d_{i+1}</math> dla |
| | <math>\displaystyle i=1,\dots,k-1</math>. |
|
| |
|
| {equation}{section} | | Jeśli istnieje ciąg konfiguracji <math>\displaystyle d_1 \mapsto d_2 \mapsto \dots |
| | \mapsto d_m</math>, gdzie <math>\displaystyle d_1=\sharp s_0 w \sharp</math>, <math>\displaystyle d_m</math> jest |
| | konfiguracją akceptującą (tzn. <math>\displaystyle d_m= \sharp w_{1}s_{F}w_{2}\sharp</math> |
| | dla pewnych <math>\displaystyle w_{1},w_{2}\in \Sigma _{T}^{*},s_{F}\in S_{F}</math>) oraz |
| | dodatkowo <math>\displaystyle |d_i|\leqslant s(|w|)+2</math>, to mówimy, że maszyna <math>\displaystyle \mathcal{MT}</math> |
| | '''akceptuje słowo <math>\displaystyle w\in \Sigma_I^*</math> w pamięci <math>\displaystyle s(|w|)</math>'''. |
|
| |
|
| {kuba_preamble1} | | Mówimy, że '''język <math>\displaystyle L</math> jest akceptowany w czasie <math>\displaystyle t(n)</math> |
| {kuba_preamble2} | | (pamięci <math>\displaystyle s(n)</math>)''', jeśli istnieje maszyna Turinga <math>\displaystyle \mathcal{MT}</math>, dla |
| | której <math>\displaystyle L(\mathcal{MT})=L</math> oraz każde słowo <math>\displaystyle w\in L</math> jest |
| | akceptowane w czasie <math>\displaystyle t(|w|)</math> (pamięci <math>\displaystyle s(|w|)</math> odpowiednio). |
| | }} |
|
| |
|
| 0mm
| | {{uwaga|1.1|| |
| 2ex
| | W niektórych podejściach wykorzystuje się, do definicji złożoności |
| | pamięciowej, tak zwanych maszyn Turinga off-line. Pomysł polega na |
| | tym, aby nie uwzględniać komórek taśmy, z których maszyna czytała |
| | informacje, a jedynie te, do których następował zapis. Dzięki temu |
| | zabiegowi można w sposób "rozsądny" mówić o akceptacji słowa w |
| | pamięci <math>\displaystyle \log n</math> itp. W ujęciu prezentowanym w tym wykładzie |
| | zajmujemy się akceptacją w pamięci <math>\displaystyle n^k</math>, dla <math>\displaystyle k\geqslant 1</math>, zatem nie ma |
| | potrzeby dodatkowego definiowania maszyn Turinga off-line. |
| | }} |
|
| |
|
| {lem}[thm]{ Lemat } | | {{definicja|1.2|| |
| {fakt}{ Fakt }
| | Oznaczmy przez <math>\displaystyle Dtime(t(n))</math> oraz <math>\displaystyle Dspace(s(n))</math> rodzinę języków |
| {mtw}[tw]{Meta twierdzenie}
| | akceptowanych w czasie <math>\displaystyle t(n)</math> i odpowiednio pamięci <math>\displaystyle s(n)</math> przez |
| | deterministyczną maszynę Turinga. Dla maszyn niedeterministycznych |
| | wprowadzamy w identyczny sposób klasy <math>\displaystyle Ntime(t(n))</math> oraz |
| | <math>\displaystyle Nspace(s(n))</math>. |
|
| |
|
| {CwiczenieINS}[thm]{Ćwiczenie}
| | Określamy następujące klasy złożoności (klasy języków): |
|
| |
|
| ''' Logika i teoria mnogości'''
| | <center><math>\displaystyle \aligned \textbd{P} \displaystyle =\bigcup_{k=0}^\infty Dtime(n^k), &\qquad\qquad& |
| | \textbd{NP} \displaystyle =\bigcup_{k=0}^\infty Ntime(n^k), |
| | \\ |
| | \textbd{PSPACE} \displaystyle =\bigcup_{k=0}^\infty Dspace(n^k), && |
| | \textbd{NSPACE} \displaystyle =\bigcup_{k=0}^\infty Nspace(n^k). |
| | \endaligned</math></center> |
|
| |
|
| '''Wykład 8'''
| | }} |
|
| |
|
| Zawartość wykładu: Konstrukcje liczbowe, liczby całkowite,
| | Wprost z definicji otrzymujemy zależności '''P''' <math>\displaystyle \subset </math> '''NP''' oraz '''PSPACE''' <math>\displaystyle \subset </math> '''NPSPACE''' . W dalszej części wykładu udowodnimy kilka mniej oczywistych zależności. |
| wymierne, konstrukcja Cantora liczb rzeczywistych: działania i
| |
| porządek na liczbach.
| |
|
| |
|
| ==Liczby całkowite==
| | {{przyklad|1.1|| |
| | | Rozważmy język: |
| Na wykładzie poprzednim skonstruowaliśmy przy pomocy aksjomatu
| | <center><math>\displaystyle |
| nieskończoności liczby naturalne. Określiliśmy dla nich podstawowe
| | L=\left\{1^i 2^j 3^k\: k=i\cdot j,\: i,j\geqslant 1\right\}. |
| operacje takie jak dodawanie i mnożenie. Teraz własności tych
| |
| operacji będą użyte do dalszych konstrukcji liczbowych. Pokażemy,
| |
| że mając liczby naturalne zbudowane na bazie liczby <math>0</math> czyli
| |
| zbioru pustego możemy definiować bardziej skomplikowane twory
| |
| liczbowe takie jak liczby całkowite, wymierne i w końcu liczby
| |
| rzeczywiste. Wszystkie te obiekty maja ogromne zastosowanie w
| |
| praktyce matematycznej i informatycznej. Będziemy później w innych
| |
| wykładach odwoływać się do niebanalnej reprezentacji tych
| |
| obiektów, które stworzymy w tym rozdziale.
| |
| | |
| ===Konstrukcja liczb całkowitych===
| |
| | |
| Niech <math>\approx</math> będzie relacją określoną na
| |
| <math>\mathbb{N} \times \mathbb{N}</math> następująco:
| |
| | |
| <center><math>(n,k)\approx (p,q) \mbox{ wtw } n+q = k+p
| |
| </math></center> | | </math></center> |
|
| |
|
| Relacja <math>\approx</math> jest relacją równoważności o polu
| | Język <math>\displaystyle L\in </math> '''P''' . Deterministyczna maszyna Turinga |
| <math>\mathbb{N} \times \mathbb{N}</math>. | | <math>\displaystyle MT_3</math> akceptująca taki język może wyglądać następująco (zaczynamy |
| | od konfiguracji <math>\displaystyle \sharp s_0 w \sharp</math>): |
| | # Jeśli symbol pod głowicą, to <math>\displaystyle 1</math> zamień go na <math>\displaystyle\sharp</math>. Inaczej odrzuć. |
| | # Przejdź od lewego ogranicznika do prawego, sprawdzając, czy po <math>\displaystyle 1</math> występuje <math>\displaystyle 1</math> lub <math>\displaystyle 2</math>, po <math>\displaystyle 2</math> tylko <math>\displaystyle 2</math> lub <math>\displaystyle 3</math>, a po <math>\displaystyle 3</math> kolejny symbol <math>\displaystyle 3</math> lub ogranicznik. Jeśli ta zależność nie jest spełniona, odrzuć. Gdy osiągniesz ogranicznik wykonaj następny krok. |
| | # Gdy przed ogranicznikiem nie znajduje się symbol <math>\displaystyle 3</math>, odrzuć. W przeciwnym razie zamień symbol <math>\displaystyle 3</math> na <math>\displaystyle \sharp</math>, a następnie poruszaj się w lewo, aż dotrzesz do symbolu innego niż <math>\displaystyle 3</math> i <math>\displaystyle \diamondsuit</math>. |
| | # Jeśli symbol do którego dotarłeś to <math>\displaystyle 2</math>, zamień go na <math>\displaystyle \diamondsuit</math>. Sprawdź symbol po lewej. Jeśli to <math>\displaystyle 2</math>, poruszaj się w prawo aż do ogranicznika. Następnie przejdź do kroku 3. |
| | # Jeśli dotarłeś do symbolu <math>\displaystyle 1</math>, poruszaj się w lewo aż do ogranicznika. Zamień symbol <math>\displaystyle 1</math> przy ograniczniku na <math>\displaystyle \sharp</math>, a następnie idź w prawo, zamieniając wszystkie symbole <math>\displaystyle \diamondsuit</math> na <math>\displaystyle 2</math>. Gdy dojdziesz do ogranicznika, przejdź do kroku <math>\displaystyle 3</math>. |
| | # Jeśli dotarłeś do ogranicznika, oznacza to, że skasowano już wszystkie symbole <math>\displaystyle 1</math>. Przejdź w prawo aż do ogranicznika. Jeśli natrafisz na symbol <math>\displaystyle 3</math>, odrzuć. W przeciwnym przypadku, akceptuj. |
|
| |
|
| {hint}{0}
| | Nietrudno zaobserwować, że maszyna <math>\displaystyle MT_3</math> przechodzi przez taśmę w prawo i w lewo tyle |
| | razy, ile symboli <math>\displaystyle 3</math> zawiera taśma oraz wykonuje jeden dodatkowy |
| | przebieg na starcie. Zatem słowa z <math>\displaystyle L</math> są akceptowane w |
| | czasie ograniczonym wielomianowo. |
| | }} |
|
| |
|
| ; Rozwiązanie.
| | {{kotwica|prz.1.2|}}{{przyklad|1.2|| |
| : Wykażemy, że relacja <math>\approx</math> jest relacją równoważności na
| |
| <math>\mathbb{N} \times \mathbb{N}</math>. Dla dowolnych liczb naturalnych <math>n</math> i <math>k</math>
| |
| mamy <math>(n,k)\approx (n,k)</math> ponieważ <math>n+k = n+k</math>, więc relacja jest
| |
| zwrotna. Podobnie, dla dowolnych liczb <math>n, k, p, q</math> jeśli
| |
| <math>(n,k)\approx(p,q)</math>, to <math>n+q = k+p</math> i, korzystając z
| |
| przemienności dodawania, otrzymujemy <math>p+k = q+n</math> czyli
| |
| <math>(p,q)\approx(n,k)</math> i relacja jest symetryczna.
| |
|
| |
|
| Aby wykazać przechodniość ustalmy trzy dowolne pary <math>(n,k),(p,q)</math>
| | Rozważmy teraz język |
| i <math>(m,l)</math> spełniające <math>(n,k)\approx (p,q)</math> oraz <math>(p,q)\approx
| | <center><math>\displaystyle |
| (m,l)</math>. Wtedy <math>n+q = k+p</math> oraz <math>p+l=q+m</math>, więc <math>(n+q)+(p+l) =
| | L=\left\{3^k\: : \: k=i\cdot j </math> dla pewnych <math>\displaystyle i,j> 1\rbrace. |
| (k+p)+(q+m)</math> i na mocy łączności i przemienności dodawania w
| |
| liczbach naturalnych otrzymujemy <math>(n+l) + (q+p) = (k+m)+(q+p)</math>.
| |
| Skracamy czynnik <math>(p+q)</math> (na mocy własności skracania dla
| |
| dodawanie) i otrzymujemy <math>n+l=k+m</math>, czyli <math>(n,k)\approx (m,l)</math> co
| |
| dowodzi przechodniości relacji <math>\approx</math>. Wykazaliśmy, że
| |
| <math>\approx</math> jest relacją równoważności.
| |
| '''Koniec ćwiczenia
| |
| '''
| |
| | |
| Wykaż, że dla dowolnej pary <math>(n,k)\in\mathbb{N}\times \mathbb{N}</math> istnieje
| |
| para <math>(p,q)\in \mathbb{N}\times \mathbb{N}</math> taka, że <math>(n,k)\approx (p,q)</math>
| |
| oraz <math>p=0</math> lub <math>q=0</math>. {hint}{0}
| |
| | |
| ; Rozwiązanie.
| |
| : Ustalmy dowolną parę | |
| <math>(n,k)\in\mathbb{N}\times \mathbb{N}</math>. Jeśli <math>n=k</math>, to mamy
| |
| <math>(n,k)\approx(0,0)</math> i warunek jest spełniony. Jeśli <math>n\neq k</math> to,
| |
| na mocy własności liczb naturalnych, istnieje liczba naturalna <math>l</math>
| |
| taka, że <math>n=k+l</math> (lub, że <math>n+l =k</math>). Wtedy <math>n+0=k+l</math> (lub <math>n+l =
| |
| k+0</math>), czyli <math>(n,k)\approx(l,0)</math> (lub <math>(n,k)\approx(0,l)</math>) co
| |
| należało dowieść.
| |
| '''Koniec ćwiczenia
| |
| '''
| |
| Niech <math>\mathbb{Z} = \mathbb{N}
| |
| \times\mathbb{N} / \approx</math>
| |
| | |
| Które z liczb całkowitych <math>[(n,k)]_{\approx}</math> są relacjami równoważności
| |
| na <math>\mathbb{N}</math>? {hint}{0}
| |
| | |
| ; Rozwiązanie.
| |
| : Aby liczb całkowita była relacją | |
| równoważności koniecznym jest <math>(0,0)\in[(k,n)]_{\approx}</math>, a więc
| |
| jedynym kandydatem na liczbę będącą relacją równoważności na
| |
| <math>\mathbb{N}</math> jest <math>[(0,0)]_{\approx}</math>. Weźmy teraz dowolną parę liczb
| |
| naturalnych <math>(n,k)</math>, jeśli <math>(0,0)\approx(n,k)</math>, to <math>0+k = n+0</math>,
| |
| czyli <math>n=k</math>. Liczba całkowita <math>[(0,0)]_{\approx}</math> jest relacją
| |
| równoważności na <math>\mathbb{N}</math> i żadna inna liczba całkowita nie jest
| |
| relacją równoważności.
| |
| '''Koniec ćwiczenia
| |
| '''
| |
| | |
| === Operacje na <math>\mathbb{Z}</math> ===
| |
| | |
| Element zero <math>0 \in \mathbb{Z}</math> to element <math>[ (0,0) ]_{\approx}</math>.
| |
| | |
| Element przeciwny do danego: jeżeli <math>x = [ (n,k) ]_{\approx}</math> to
| |
| przez <math>-x = [ (k,n) ]_{\approx}</math>
| |
| | |
| Dodawanie: <math>[ (n,k) ]_{\approx} + [ (p,q) ]_{\approx} = [
| |
| (n+p,k+q) ]_{\approx}</math>.
| |
| | |
| Mnożenie: <math>[ (n,k) ]_{\approx} \cdot [ (p,q) ]_{\approx} = [ (n
| |
| \cdot p + k \cdot q \;,\; n \cdot q + k \cdot p )
| |
| ]_{\approx}</math>{Dla przejrzystości zapisu będziemy czasami
| |
| pomijać znak <math>\cdot</math> pisząc <math>xy</math> zamiast <math>x\cdot y</math>}.
| |
| | |
| Odejmowanie: <math>x-y = x+ (-y)</math>
| |
| | |
| Proszę o zwrócenie uwagi na pewną kolizję oznaczeń. Po lewej
| |
| stronie definicji (dodawania, mnożenia i odejmowania) używamy tych
| |
| samych znaków działań co po stronie prawej. Jest to ewidentna
| |
| kolizja oznaczeń, którą wykonujemy z pełną świadomością. W
| |
| praktyce matematycznej i informatycznej przyjęło się używać te
| |
| same znaki działań wiedząc, że mają one zgoła inne znaczenie.
| |
| Również element <math>0</math> będziemy oznaczać identycznie jak <math>0</math> w
| |
| liczbach naturalnych pomimo, że jest to zupełnie inny zbiór. Pod
| |
| koniec tej konstrukcji podamy naturalne włożenie (iniekcje
| |
| wkładającą liczby naturalne w całkowite) takie, które zachowuje
| |
| działania na liczbach co upewni nas, że stosowanie tych samych
| |
| oznaczeń nie grozi konfliktem.
| |
| | |
| Pokazać, że działania na liczbach całkowitych są dobrze określone.
| |
| To znaczy pokazać, że zbiory (klasy równoważności) będące wynikiem
| |
| działań nie nie zależą od wyboru reprezentantów : {hint}{0}
| |
| {hint}{1}
| |
| ; Wskazówka .
| |
| : Zapisz w jaki sposób wynik działań jest niezależny od wyboru
| |
| reprezentantów.
| |
| | |
| ; Rozwiązanie.
| |
| : Dla dowodu wykazującego dobre zdefiniowanie operacji na
| |
| liczbach całkowitych ustalmy dowolne pary
| |
| <math>(n,k),(p,q),(m,l),(r,s)</math> spełniające <math>(n,k)\approx (m,l)</math> oraz
| |
| <math>(p,q)\approx (r,s)</math>.
| |
| | |
| Dla dowodu dobrego zdefiniowania elementów przeciwnych musimy
| |
| wykazać, że <math>-[(n,k)]_{\approx} = -[(m,l)]_{\approx}</math>, czyli, że
| |
| <math>[(k,n)]_{\approx} =[(l,m)]_{\approx}</math>. Potrzebujemy
| |
| <math>(k,n)\approx(l,m)</math> co jest równoważne stwierdzeniu, że <math>k+m =
| |
| n+l</math>, który to fakt jest oczywistą konsekwencją <math>(n,k)\approx
| |
| (m,l)</math>. Wykazaliśmy, że definicja elementu przeciwnego nie zależy
| |
| od wyboru reprezentantów dla klas.
| |
| | |
| Analogiczny dowód przeprowadzamy dla dodawania. Musimy wykazać, że
| |
| <math>[(n,k)]_{\approx}+[(p,q)]_{\approx} = [(m,l)]_{\approx} + [(r,s)]_{\approx}</math>. Równość ta | |
| jest prawdą wtedy i tylko wtedy, kiedy <math>[(n+p,k+q)]_{\approx}
| |
| =[(m+r,l+s)]_{\approx}</math>, czyli kiedy <math>(n+p,k+q)\approx(m+r,l+s)</math>.
| |
| Korzystając z definicji relacji <math>\approx</math> potrzebujemy
| |
| <math>(n+p)+(l+s) = (k+q)+(m+r)</math>. Z założeń wynika, że <math>n+l=k+m</math>, oraz
| |
| <math>p+s = q+r</math> -- dodając te równości stronami i korzystając z
| |
| łączności i przemienności dodawania w liczbach naturalnych
| |
| otrzymujemy żądany fakt.
| |
| | |
| Wykażemy, że mnożenie dwóch liczb całkowitych nie zależy od wyboru
| |
| reprezentantów w klasach równoważności. Niewątpliwie, używając
| |
| założeń i przemienności, łączności i definicji mnożenia mamy
| |
| | |
| <center><math>(n+l+k+m)(q+r) = 2 (k+m)(q+r) = 2(q+r)(k+m) = (p+s+q+r)(k+m)
| |
| </math></center> | | </math></center> |
|
| |
|
| i dalej, używając rozdzielności mnożenia
| | Najprostszą metodą uzasadnienia, że <math>\displaystyle L\in </math> '''NP''' jest |
| | konstrukcja tak zwanej wyroczni. Polega ona na następującej |
| | dwuetapowej procedurze: |
| | # Skonstruuj niedeterministyczną maszynę Turinga (wyrocznia) generującą pewne słowo (certyfikat). |
| | # Zweryfikuj w sposób deterministyczny spełnienie założeń przez certyfikat. |
|
| |
|
| <center><math>n(q+r)+l(q+r)+k(q+r)+m(q+r) = p(k+m)+s(k+m)+q(k+m)+r(k+m). | | W naszym przykładzie Etap 1 wygląda następująco: |
| </math></center> | | # Użyj dwóch taśm. Na pierwszej z nich znajduje się <math>\displaystyle 3^k</math>. |
| | # Idź po pierwszej taśmie, wykorzystując niedeterministyczną funkcję przejść. Napotykając <math>\displaystyle 3</math>, możesz wypisać <math>\displaystyle 1</math> na taśmie drugiej i przejść o jedną komórkę w prawo na taśmie pierwszej lub przejść do następnego kroku. Jeśli dotarłeś do prawego ogranicznika taśmy pierwszej, przejdź do kroku 3. |
| | # Powróć do początku pierwszej taśmy. Wykonaj sekwencję jak w kroku <math>\displaystyle 2</math>, z tą różnicą, że teraz na drugiej taśmie wypisuj symbole <math>\displaystyle 2</math>. |
| | # Jako ostatnią część tego etapu przekopiuj symbole <math>\displaystyle 3</math> z pierwszej taśmy na drugą (po symbolach <math>\displaystyle 1</math> i <math>\displaystyle 2</math>). |
|
| |
|
| Używamy raz jeszcze założeń i dostajemy
| | W konstrukcji wykorzystaliśmy dwie taśmy, ale oczywiście w |
| | nawiązaniu do wcześniejszych uwag, całą konstrukcję można wykonać na |
| | jednej taśmie (z odpowiednio rozszerzonym alfabetem i bardziej |
| | skomplikowaną funkcją przejść). |
|
| |
|
| <center><math>n(p+s)+l(q+r)+k(q+r)+m(p+s) = p(k+m) + s(l+n) +q(l+n)+r(k+m) | | Etap 2 polega na weryfikacji, czy na taśmie drugiej znajduje się |
| </math></center> | | słowo postaci <math>\displaystyle 1^i 2^j 3^k</math>, gdzie <math>\displaystyle i,j>1</math> oraz <math>\displaystyle k=i\cdot j</math>. Jeśli tak, to słowo wejściowe <math>\displaystyle 3^k</math> pochodziło z języka <math>\displaystyle L</math> i akceptujemy. Można do tego wykorzystać deterministyczną maszynę Turinga, niemal identyczną z opisaną w przykładzie poprzednim. |
|
| |
|
| co, po wymnożeniu daje
| | Jeśli słowo wejściowe pochodzi z języka <math>\displaystyle L</math>, to jedno z obliczeń maszyny niedeterministycznej z Etapu 1. prowadzi do konstrukcji odpowiedniego słowa na drugiej taśmie. Nie wiemy, jaka dokładnie ścieżka obliczeń ma być wykorzystana, ale dla akceptacji języka <math>\displaystyle L</math> nie ma to znaczenia. |
|
| |
|
| <center><math>np + ns + lq + lr + kq + kr +mp + ms = pk + pm + sl +sn + ql +qn | | Zastanów się, czy da się wykazać, że także <math>\displaystyle L\in </math> '''P''' |
| +rk+rm.
| | (Ćwiczenie '''1.3''', do tego wykładu). |
| </math></center>
| | }} |
|
| |
|
| Stosujemy prawo skracania dla liczb naturalnych do <math> ns + lq + kr
| | {{definicja|1.3|| |
| +mp</math> i dostajemy
| | Funkcja <math>\displaystyle s(n)</math> jest '''konstruowalna pamięciowo''', jeśli istnieje maszyna Turinga <math>\displaystyle \mathcal{MT}=(\Sigma _{T},S,f,s_{0},S_{F})</math>, dla |
| | której <math>\displaystyle d_1 \mapsto^* d_2</math>, gdzie <math>\displaystyle d_1=\sharp s_0 1^n \sharp</math>, |
| | <math>\displaystyle d_2=\sharp s_1 1^{s(n)} w \sharp</math> dla <math>\displaystyle s_1\in S_F</math>, <math>\displaystyle w\in |
| | (\Sigma_T\setminus \left\{1\right\})^*</math> oraz dodatkowo <math>\displaystyle d_2</math> jest |
| | konfiguracją końcową. |
| | }} |
|
| |
|
| <center><math>np+lr +kq + ms = pk + sl + qn + rm | | Inaczej mówiąc, funkcję <math>\displaystyle s(n)</math> nazywamy konstruowalną pamięciowo, jeśli istnieje maszyna Turinga <math>\displaystyle \mathcal{MT}</math>, otrzymując na wejściu |
| </math></center> | | słowo <math>\displaystyle w</math> długości <math>\displaystyle |w|=n</math>, zaznacza na taśmie roboczej <math>\displaystyle s(n)</math> klatek i zatrzymuje się (akceptując słowo <math>\displaystyle w</math>). |
|
| |
|
| co, używając przemienności mnożenia i przemienności i łączności
| | {{przyklad|1.3|| |
| dodawania daje
| | Funkcja <math>\displaystyle s(n)=2n</math> jest konstruowalna pamięciowo. Maszyna <math>\displaystyle MT_4</math>, |
| | która konstruuje <math>\displaystyle s(n)</math> działa według schematu: |
| | # Przejdź do prawego markera. Jeśli napotkano symbol inny niż <math>\displaystyle 1</math>, to odrzuć. |
| | # Idź w lewo aż do pierwszego symbolu <math>\displaystyle 1</math> lub markera <math>\displaystyle \sharp</math> |
| | # Jeśli napotkałeś symbol <math>\displaystyle 1</math>, zamień go na <math>\displaystyle \clubsuit</math> i przejdź do prawego markera. Dopisz do słowa symbol <math>\displaystyle \clubsuit</math> (zwiększając tym samym długość słowa na taśmie o <math>\displaystyle 1</math>). Następnie powtórz cykl od <math>\displaystyle 2</math>. |
| | # Jeśli napotkałeś marker, idź w prawo, zamieniając wszystkie wystąpienia <math>\displaystyle \clubsuit</math> na <math>\displaystyle 1</math>. Następnie wracaj do lewego markera i zatrzymaj się, akceptując. |
|
| |
|
| <center><math>(np +kq, nq + kp)\approx (mr +ls, ms +lr).
| | }} |
| </math></center>
| |
|
| |
|
| Wywnioskowaliśmy, że <math>[(n,k)]_{\approx}\cdot [(p,q)]_{\approx} =
| | {{kotwica|tw.1.1|}}{{twierdzenie|1.1 liniowa kompresja pamięci|| |
| [(m,l)]_{\approx}\cdot [(r,s)]_{\approx}</math>, co oznacza, że definicja mnożenia
| |
| nie zależy od wyboru reprezentantów dla klas.
| |
| '''Koniec ćwiczenia
| |
| '''
| |
|
| |
|
| Pokaż własności działań dodawania i mnożenia. Dla dowolnych liczb
| | Niech będzie dany język <math>\displaystyle L</math> oraz maszyna Turinga |
| całkowitych <math>x,y,z</math> zachodzą równości:
| | <math>\displaystyle \mathcal{TM}</math> akceptująca <math>\displaystyle L</math> w pamięci <math>\displaystyle s(n)</math>. Dla dowolnego |
| | <math>\displaystyle \varepsilon>0</math> istnieje maszyna Turinga <math>\displaystyle \mathcal{TM}'</math> akceptująca <math>\displaystyle L</math> w |
| | pamięci <math>\displaystyle \max\left\{n,\varepsilon s(n)\right\}</math>. |
| | }} |
|
| |
|
| # <math>x+y = y+x</math> (przemienność dodawania) | | {{dowod||| |
| | (''Szkic'') |
| | Ustalamy liczbę naturalną <math>\displaystyle k</math>, dla której <math>\displaystyle \varepsilon k\geqslant 2</math>. Maszynę |
| | <math>\displaystyle \mathcal{TM}'</math> definiujemy następująco: |
| | # Przekoduj słowo wejściowe, łącząc po <math>\displaystyle r</math> kolejnych symboli w jeden blok stanowiący nowy symbol na taśmie. |
| | # Symuluj maszynę <math>\displaystyle \mathcal{MT}</math> na skompresowanej taśmie. Położenie głowicy wewnątrz bloku zakoduj w stanach maszyny <math>\displaystyle \mathcal{MT}'</math>. |
|
| |
|
| # <math>x \cdot y = y \cdot x</math> (przemienność mnożenia)
| | Zauważmy, że w kroku <math>\displaystyle 1</math>. maszyna <math>\displaystyle \mathcal{MT}'</math> wykorzystuje <math>\displaystyle n</math> |
| | komórek pamięci do odczytania słowa wejściowego. Kompresja taśmy |
| | zapewnia, że podczas symulowania maszyny <math>\displaystyle \mathcal{MT}</math> nie |
| | wykorzystamy więcej niż <math>\displaystyle \lceil \frac{s(n)}{k}\rceil \leqslant \varepsilon s(n)</math> |
| | komórek. Jednocześnie można założyć, że <math>\displaystyle \mathcal{MT}'</math> akceptuje |
| | słowa wejściowe z języka <math>\displaystyle L</math> o długości mniejszej niż <math>\displaystyle k</math> bez |
| | symulowania <math>\displaystyle \mathcal{MT}</math>. |
| | }} |
|
| |
|
| # <math> x \cdot y = z \cdot y</math> oraz <math>y\neq 0</math> to <math> x=z</math> (prawo
| | {{twierdzenie|1.2 Savitch|| |
| skracania)
| |
|
| |
|
| # <math>x \cdot(y+z) = x\cdot y + x\cdot z</math> (rozdzielność)
| | Dla dowolnej funkcji <math>\displaystyle s(n)</math> konstruowalnej pamięciowo spełniającej |
| | warunek <math>\displaystyle s(n)\geqslant \log_2 n</math> prawdziwa jest inkluzja |
| | <math>\displaystyle Nspace(s(n))\subset DSpace(s^2(n))</math>. |
| | }} |
|
| |
|
| {hint}{0} | | {{dowod||| |
| {hint}{1} | | Niech <math>\displaystyle \mathcal{NMT}</math> będzie niedeterministyczną maszyną Turinga |
| ; Wskazówka .
| | akceptującą język <math>\displaystyle L=L(\mathcal{NMT})</math> w pamięci <math>\displaystyle s(n)</math>. Niech |
| : Zapisz każde z powyższych praw ujawniając strukturę
| | <math>\displaystyle k(n)</math> oznacza liczbę konfiguracji potrzebną do zaakceptowania słowa |
| liczb całkowitych.
| | o długości <math>\displaystyle n</math>. Istnieje liczba <math>\displaystyle c>1</math>, dla której <math>\displaystyle k(n)\leqslant c^{s(n)}</math>, co z kolei oznacza, że każde słowo o długości <math>\displaystyle n</math> jest akceptowane w <math>\displaystyle c^{s(n)}</math> krokach czasowych. |
| Zauważ, że w dowodzie będą interweniowały udowodnione już prawa
| | }} |
| łączności, przemienności i prawo skreśleń i skracania dla
| | Rozważmy algorytm: |
| liczb naturalnych.
| |
|
| |
|
| ; Rozwiązanie.
| | {{algorytm||| |
| : Dla dowodu powyższych własności ustalmy dowolne liczby | | 1 Wejście: słowo <math>\displaystyle w</math> długości <math>\displaystyle |w|=n</math> |
| całkowite <math>[(n,k)]_{\approx},[(p,q)]_{\approx},[(m,l)]_{\approx}</math>.
| | 2 oblicz <math>\displaystyle s(n)</math> |
| | 3 '''for''' każda konfiguracja akceptująca <math>\displaystyle d_A</math> dla której <math>\displaystyle |d_A|\leqslant s(n)</math> |
| | 4 '''do if''' Test(<math>\displaystyle \sharp s_0 w \sharp</math>, <math>\displaystyle d_A</math>, <math>\displaystyle s(n) \log_2 c</math>) '''then''' akceptuj |
| | }} |
|
| |
|
| :# Dla dowodu przemienności dodawania zauważmy, | | gdzie procedura Test ma następującą postać: |
| że <math>[(n,k)]_{\approx} + [(p,q)]_{\approx} = [(n+p,k+q)]_{\approx}</math> i korzystając z
| |
| przemienności dodawania dla liczb naturalnych otrzymujemy
| |
| <math>[(n+p,k+q)]_{\approx} = [(p+n,q+k)]_{\approx} =[(p,q)]_{\approx}+[(n,k)]_{\approx}</math>.
| |
| Wykazaliśmy, że dodawanie liczb całkowitych jest przemienne.
| |
|
| |
|
| :# Podobne rozumowanie stosujemy dla mnożenia
| | {{algorytm|'''Procedure''' Test(<math>\displaystyle d</math>,<math>\displaystyle d'</math>,<math>\displaystyle i</math>)|| |
| <math>[(n,k)]_{\approx}\cdot[(p,q)]_{\approx} = [(np+kq,nq+kp)]_{\approx}</math> i, stosując
| | 1 '''if''' <math>\displaystyle i=0</math> '''and''' [ (<math>\displaystyle d=d'</math>) '''or''' (<math>\displaystyle d\mapsto d'</math>)] '''then return true''' |
| przemienność mnożenia i dodawania <math>[(np+kq,nq+kp)]_{\approx} =
| | 2 '''else for''' każda konfiguracja <math>\displaystyle d''</math> dla której <math>\displaystyle |d''|\leqslant s(n)</math> |
| [(pn+qk,pk+qn)]_{\approx} =[(p,q)]_{\approx}\cdot[(n,k)]_{\approx}</math> co należało
| | 3 '''do if''' Test(<math>\displaystyle d</math>,<math>\displaystyle d''</math>,<math>\displaystyle i-1</math>) '''and''' Test <math>\displaystyle d''</math>,<math>\displaystyle d'</math>,<math>\displaystyle i-1</math>) |
| wykazać.
| | 4 '''then return true'''; |
| :# Dla dowodu prawa skracania dla liczb całkowitych
| | 5 '''return false''' |
| załóżmy, że
| | }} |
| <math>[(n,k)]_{\approx}\cdot[(p,q)]_{\approx}=[(m,l)]_{\approx}\cdot[(p,q)]_{\approx}</math>, oraz,
| |
| że dokładnie jedna z liczb <math>p, q</math> jest równa zero. Na mocy
| |
| Ćwiczenia [[##Cw:reprzero|Uzupelnic Cw:reprzero|]] reprezentacja taka istnieje dla
| |
| każdej, różnej od zera, liczby całkowitej. Wnioskujemy, że
| |
| <math>[(np+kq,nq+kp)]_{\approx}=[(mp+lq,mq+lp)]_{\approx}</math>. Wnioskujemy stąd, że
| |
| <math>(np+kq,nq+kp)\approx(mp+lq,mq+lp)</math>, czyli, że <math>np+kq+mq+lp =
| |
| nq+kp+mp+lq</math>. Jeśli <math>p=0</math> to otrzymujemy, korzystając z
| |
| rozdzielności, <math>(k+m)q = (n+l)q</math> i, korzystając z prawa skracania
| |
| dla liczb naturalnych <math>k+m =n+l</math>, czyli <math>[(k,l)]_{\approx}=[(m,l)]_{\approx}</math>
| |
| co należało dowieść. Podobnie, jeśli <math>q=0</math> to <math>(n+l)p = (k+m)p</math> i,
| |
| podobnie jak w poprzednim przypadku <math>[(k,l)]_{\approx}=[(m,l)]_{\approx}</math>.
| |
| Wykazaliśmy, że mnożenie liczb całkowitych jest skracalne.
| |
| :# Dla dowodu rozdzielności postępujemy następująco. Liczby
| |
| <math>[(n,k)]_{\approx}\cdot([(p,q)]_{\approx}+[(m,l)]_{\approx})=[(n(p+m) + | |
| k(q+l),n(q+l)+k(p+m))]_{\approx}</math>. Korzystając z rozdzielności,
| |
| przemienności i łączności działań na liczbach naturalnych
| |
| dostajemy <math>[(n(p+m) + k(q+l),n(q+l)+k(p+m))]_{\approx}= [((np + kq)
| |
| +
| |
| (nm+kl),(nq+kp)+(nl+km)]_{\approx}=[(np+kq,nq+kp)]_{\approx}+[(nm+kl,nl+km)]_{\approx}</math>,
| |
| co równa się <math>[(n,k)]_{\approx}\cdot
| |
| [(p,q)]_{\approx}+[(n,k)]_{\approx}\cdot[(m,l)]_{\approx}</math> co należało wykazać.
| |
| | |
| '''Koniec ćwiczenia | |
| ''' | |
| | |
| ===Porządek liczb całkowitych===
| |
| | |
| Liczba <math>[ (n,k) ]_{\approx} \leq [ (p,q) ]_{\approx}</math> zachodzi gdy
| |
| <math>n+q \leq p+k</math>.
| |
| | |
| Pokaż, że definicja porządku nie jest zależna od wyboru
| |
| reprezentanta. {hint}{0}
| |
| {hint}{1}
| |
| ; Wskazówka .
| |
| : Do dowodu zastosuj własności dodawania
| |
| liczb naturalnych.
| |
| ; Rozwiązanie.
| |
| : Niech <math>(n,k),(m,l),(p,q),(r,s)</math> będą
| |
| parami liczb naturalnych takimi, że <math>(n,k)\approx (m,l)</math> oraz
| |
| <math>(p,q)\approx (r,s)</math>. Załóżmy dodatkowo, że
| |
| <math>[(n,k)]_{\approx}\leq[(p,q)]_{\approx}</math>. Wykażemy, że w takim przypadku
| |
| również <math>[(m,l)]_{\approx}\leq [(r,s)]_{\approx}</math>, czyli, że porządek na
| |
| liczbach całkowitych jest niezależny od wyboru reprezentantów dla
| |
| klas równoważności. Skoro <math>[(n,k)]_{\approx}\leq[(p,q)]_{\approx}</math>, to <math>n+q
| |
| \leq p+k</math> i z wykładu o liczbach naturalnych wiemy, że istnieje
| |
| liczba naturalna <math>t</math> taka, że <math>n+q+t = p+k</math>. Równocześnie nasze
| |
| założenia gwarantują, że <math>n+l=k+m</math> i <math>p+s=q+r</math>, czyli, że
| |
| | |
| <center><math>n+l+q+r = k+m+p+s.
| |
| </math></center>
| |
| | |
| Korzystając z udowodnionej własności <math>t</math> podstawiamy liczby do
| |
| wzoru otrzymując
| |
| | |
| <center><math>n+l+q+r=n+m+q+t+s,
| |
| </math></center>
| |
| | |
| co z kolei możemy skrócić przez <math>n+q</math> otrzymując
| |
| | |
| <center><math>l+r = m+s+t \text{ co oznacza } l+r\geq m+s.
| |
| </math></center>
| |
| | |
| Czyli <math>[(m,l)]_{\approx}\leq[(r,s)]_{\approx}</math>, co należało wykazać.
| |
| '''Koniec ćwiczenia | |
| ''' | |
| | |
| Pokaż, że porządek liczb całkowitych spełnia postulaty porządku
| |
| liniowego to znaczy jest zwrotny, antysymetryczny, przechodni i
| |
| spójny. {hint}{0}
| |
| {hint}{1}
| |
| ; Wskazówka .
| |
| : Do dowodu zastosuj własności dodawania liczb
| |
| naturalnych i porządku liczb naturalnych.
| |
| ; Rozwiązanie.
| |
| : Porządek na
| |
| liczbach całkowitych jest zwrotny. Dla dowolnej liczby całkowitej
| |
| <math>[(n,k)]_{\approx}</math> mamy <math>[(n,k)]_{\approx}\leq [(n,k)]_{\approx}</math> ponieważ <math>
| |
| n+k\leq n+k</math>.
| |
| | |
| Dla dowodu antysymetrii załóżmy, że dla dwu liczb całkowitych mamy
| |
| <math>[(n,k)]_{\approx}\leq [(p,q)]_{\approx}</math> oraz <math>[(p,q)]_{\approx}\leq [(n,k)]_{\approx}</math>.
| |
| Wnioskujemy natychmiast, że <math>n+q\leq k+p</math> oraz, że <math>p+k \leq q+n</math>.
| |
| Korzystając z przemienności dodawania, przechodniości i
| |
| antysymetrii porządku na liczbach naturalnych dostajemy <math>n+q =
| |
| k+p</math>, czyli <math>(n,k)\approx(p,q)</math>, co należało wykazać.
| |
| | |
| Aby wykazać przechodniość ustalmy trzy dowolne liczby całkowite,
| |
| takie, że <math>[(n,k)]_{\approx}\leq [(p,q)]_{\approx}\leq [(m,l)]_{\approx}</math>. Definicja
| |
| porządku gwarantuje, że
| |
| | |
| <center><math>n+q\leq k+p \text{ oraz, że } p+l\leq q+m.
| |
| </math></center> | |
| | |
| Operując ćwiczeniami z Wykład 7 możemy łatwo pokazać, że
| |
| jeśli dodamy do obu stron nierówności tą samą liczbę, to
| |
| nierówność pozostanie zachowana. W związku z tym
| |
| | |
| <center><math>n+q+l\leq k+p+l \text{ oraz, że } p+l+k\leq q+m+k.
| |
| </math></center>
| |
| | |
| i używając przechodniości dostajemy <math> n+q+l\leq q+m+k</math>. Jeszcze
| |
| raz wykorzystując ćwiczenia dotyczące liczb naturalnych możemy
| |
| skrócić <math>q</math> i otrzymać <math>n+l\leq m+k</math>, czyli <math>[(n,k)]_{\approx}\leq
| |
| [(m,l)]_{\approx}</math>, co należało wykazać.
| |
| | |
| Dowód spójności porządku na liczbach całkowitych jest trywialną
| |
| konsekwencją faktu, że dla dowolnych dwóch par liczb naturalnych
| |
| <math>(n,k)</math> i <math>(p,q)</math> mamy <math>n+q\leq p+k</math> lub <math>p+k\leq q+n</math>.
| |
| '''Koniec ćwiczenia | |
| ''' | |
| | |
| Rozważmy funkcje <math>i:\mathbb{N} \rightarrow \mathbb{Z}</math> zadaną wzorem
| |
| | |
| <center><math>i(n) = [ (n,0)]_{\approx}
| |
| </math></center>
| |
| | |
| Funkcja ta jest naturalnym włożeniem zbioru <math>\mathbb{N}</math> w zbiór
| |
| <math>\mathbb{Z}</math>. Jako ćwiczenie pokażemy, że funkcja <math>i</math> jest
| |
| iniektywna i zgodna z działaniami. Dzięki włożeniu <math>i</math> będziemy
| |
| utożsamiali liczbę naturalną <math>n</math> z odpowiadającą jej liczbą
| |
| całkowitą <math>i(n)</math>. W ten sposób każdą liczbę naturalną możemy
| |
| traktować jak całkowitą.
| |
| | |
| Pokaż, że funkcja <math>i</math> jest iniekcją. Pokaż, że <math>i</math> jest zgodne z
| |
| działaniami i porządkiem to znaczy:
| |
| | |
| # <math>i(0) =0</math>
| |
| | |
| # <math>i(n+m) = i(n)+i(m)</math>
| |
| | |
| # <math>i(n \cdot m) = i(n) \cdot i(m)</math>
| |
| | |
| # jeżeli <math>n \leq k</math> to <math>i(n) \leq i(k)</math>
| |
| | |
| {hint}{0}
| |
| {hint}{1}
| |
| ; Wskazówka .
| |
| : Pamiętaj, że znaki działań i porządku (oraz <math>0</math>) po
| |
| prawej i po lewej stronie równości znaczą co innego. Zapisz każde
| |
| z powyższych praw ujawniając strukturę liczb całkowitych. Zauważ,
| |
| że w dowodzie będą interweniowały udowodnione już prawa
| |
| łączności, przemienności, prawo skreśleń i skracania oraz własności
| |
| porządkowe
| |
| dla liczb naturalnych. | |
| | |
| ; Rozwiązanie.
| |
| : Aby wykazać iniektywność funkcji <math>i</math> wybierzmy dwie dowolne
| |
| liczby naturalne <math>m,n</math>. Jeśli <math>i(n)=i(m)</math>, to
| |
| <math>[(n,0)]_{\approx}=[(m,0)]_{\approx}</math>, czyli <math>n+0=m+0</math> i używając prawa
| |
| skracania dla liczb naturalnych dostajemy <math>n=m</math>, co należało
| |
| wykazać. Nasze rozumowanie wykazało, że funkcja <math>i</math> jest iniekcją.
| |
| Przechodzimy teraz do dowodu własności funkcji <math>i</math>.
| |
| | |
| :# Oczywiście <math>i(0)=0</math>, ponieważ <math>i(0)=[(0,0)]_{\approx} = 0</math>.
| |
| :# Dla
| |
| dowolnych dwóch liczb naturalnych <math>n,m</math> mamy <math>i(n+m) = [(n+m,0)]_{\approx} =
| |
| [(n,0)]_{\approx}+[(m,0)]_{\approx} = i(n) +i(m)</math>, co należało wykazać.
| |
| :# Podobnie jak w poprzednim przypadku ustalmy dowolne dwie liczby
| |
| naturalne <math>n</math> i <math>m</math>. Wtedy, używając całego arsenału identyczności
| |
| prawdziwych dla liczb naturalnych, mamy <math>i(n\cdot m) = [(nm,0)]_{\approx} =
| |
| [(nm+00,n0+0m)]_{\approx}=[(n,0)]_{\approx}\cdot[(m,0)]_{\approx}=i(n)\cdot i(m)</math>, co
| |
| należało wykazać.
| |
| :# Jeśli <math>n\leq k</math>, to niewątpliwie <math> n+0\leq
| |
| k+0</math>, czyli <math>[(n,0)]_{\approx}\leq [(k,0)]_{\approx}</math> co oznacza, że <math>i(n)\leq
| |
| i(k)</math>. Dowód jest zakończony.
| |
| | |
| '''Koniec ćwiczenia | |
| ''' | |
| | |
| ==Liczby wymierne==
| |
| | |
| Niech <math>\mathbb{Z}^* = \mathbb{Z} \setminus \left\{\emptyset\right\}\$.
| |
| Określamy relację na zbiorze </math>{Z}
| |
| {Z}^*<math> następująco.
| |
| | |
| </math></center>(a,b) (c,d) wtw a d <nowiki>=</nowiki> c b
| |
| <center><math>
| |
| | |
| \beginCwiczenieINS
| |
| Relacja jest równoważnością.
| |
| | |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| | |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Zwrotność i symetria są trywialne. Przy dowodzie
| |
| przechodniości zastosuj prawo skracania
| |
| [[##wlasnosci liczb_calkowitych|Uzupelnic wlasnosci liczb_calkowitych|]]
| |
| dla liczb całkowitych.
| |
| | |
| ; Rozwiązanie.
| |
| : Zwrotność relacji wynika z faktu, że dla dowolnych
| |
| liczb całkowitych mamy </math>a b <nowiki>=</nowiki> a b<math>.
| |
| | |
| Dla dowodu symetrii załóżmy, że </math>(a,b) (c,d)<math>. Wtedy </math>a
| |
| d <nowiki>=</nowiki> c b<math>, czyli </math>c b<nowiki>=</nowiki>a d<math> co oznacza, że </math>(c,d)
| |
| (a,b)<math>. Wykazaliśmy symetrię relacji .
| |
| | |
| Aby dowieść przechodniości ustalmy trzy dowolne elementy
| |
| </math>{Z} {Z}^*<math> spełniające </math>(a,b) (c,d)<math>
| |
| oraz </math>(c,d)(e,f)<math>. Wtedy </math>a d <nowiki>=</nowiki> c b<math>, oraz </math>c f
| |
| <nowiki>=</nowiki> e d<math> używając przemienności i łączności\footnote{Dowód
| |
| łączności mnożenia liczb całkowitych zostawiamy zainteresowanym
| |
| czytelnikom} mnożenia liczb całkowitych otrzymujemy </math>a d
| |
| f <nowiki>=</nowiki> c b f <nowiki>=</nowiki> e b d<math>. Korzystając z prawa
| |
| skracania dla liczb całkowitych, korzystając z założenia, że
| |
| </math>d 0<math>, dostajemy </math>a f <nowiki>=</nowiki> e b<math>, czyli </math>(a,b)
| |
| (e,f)<math> co należało wykazać.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
| | |
| \begindefn Niech </math>{Q} <nowiki>=</nowiki> {Z}
| |
| {Z}^* / <math>
| |
| \enddefn
| |
| | |
| OZNACZENIE: Będziemy tradycyjne oznaczać ułamek
| |
| </math>{a}{b}<math>. Oznacza on zbiór </math>[ (a,b) ]_{}<math>.
| |
| \beginCwiczenieINS
| |
| Dla jakich liczb wymiernych </math>[(a,b)]_{}<math> mamy </math>
| |
| [(a,b)]_{} <nowiki>=</nowiki> {Z}<math>? \endCwiczenieINS \setcounter{hint}{0}
| |
| | |
| ; Rozwiązanie.
| |
| : Po pierwsze zauważmy, że
| |
| </math> [(a,b)]_{} <nowiki>=</nowiki> c{Z}: d
| |
| (a,b) (c,d) (a,b) (d,c) <math>. Niewątpliwie musimy więc
| |
| mieć </math>(0,d)(a,b)<math> dla pewnego </math>d{Z}<math>~(gdyż </math>0<math> nie
| |
| może występować na drugiej współrzędnej). Definicja relacji
| |
| implikuje, że </math>0 b <nowiki>=</nowiki> d a<math>, czyli, że </math>a<nowiki>=</nowiki>0<math>. Co więcej
| |
| dla dowolnej liczby całkowitej </math>c<math> mamy </math>(0,d)(0,c)<math> ponieważ
| |
| </math>0 c <nowiki>=</nowiki> 0 d<math>. Tak więc jedyną klasą równoważności relacji
| |
| spełniającą nasz warunek jest zbiór
| |
| | |
| </math></center>(0,d): d{Z}0,
| |
| <center><math>
| |
| | |
| który zostanie później nazwany ``zerem'' liczb wymiernych.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
| | |
| ===Działania na ułamkach===
| |
| | |
| Definiujemy stałe i standardowe działania na ułamkach.
| |
| | |
| * Zero w liczbach wymiernych </math>0 {Q}<math> to </math>[(0, 1) ]_{}<math>.
| |
| | |
| * Jedynka w liczbach wymiernych </math>1 {Q}<math> to ułamek </math>[(1, 1) ]_{}<math>.
| |
| | |
| * </math> - [ (a,b) ]_{} <nowiki>=</nowiki> [(-a, b) ]_{}<math>
| |
| | |
| * dodawanie </math>[ (a,b) ]_{} + [ (c,d) ]_{} <nowiki>=</nowiki> [(ad +bc, bd) ]_{}<math>
| |
| | |
| * odejmowanie </math>[ (a,b) ]_{} - [ (c,d) ]_{} <nowiki>=</nowiki> [(ad - bc, bd)]_{}<math>
| |
| | |
| * mnożenie </math>[ (a,b) ]_{} [ (c,d) ]_{} <nowiki>=</nowiki>
| |
| [(ac, bd) ]_{}<math>
| |
| | |
| * dzielenie, </math>[ (a,b) ]_{} : [ (c,d) ]_{} <nowiki>=</nowiki> [(ad, bc)
| |
| ]_{}<math> gdy </math>[ (c,d) ]_{} [(0, d) ]_{}<math>
| |
| | |
| Tak jak poprzednio w przypadku liczb całkowitych będziemy starali
| |
| się utożsamiać liczby całkowite z pewnymi ułamkami.
| |
| | |
| Proszę tak jak poprzednio o zwrócenie uwagi na kolizję oznaczeń.
| |
| Jest to zamierzona kolizja oznaczeń, którą
| |
| wprowadzamy z pełną świadomością. Po lewej stronie definicji
| |
| (dodawania, mnożenia, odejmowania i liczby przeciwnej) używamy
| |
| tych samych znaków działań co po stronie prawej. Pod koniec tej
| |
| konstrukcji podamy naturalne włożenie (iniekcje wkładającą liczby
| |
| całkowite w wymierne) takie, które zachowuje działania na
| |
| liczbach. Upewni nas to, że stosowanie tych samych oznaczeń de
| |
| facto nie grozi konfliktem.
| |
| | |
| \beginCwiczenieINS | |
| Pokazać, że działania na liczbach wymiernych są dobrze określone.
| |
| To znaczy pokazać, że zbiory (klasy równoważności) będące wynikiem
| |
| działań nie nie zależą od wyboru reprezentantów:
| |
| | |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| | |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Zapisz w jaki sposób wynik działań jest niezależny od wyboru
| |
| reprezentantów.
| |
| | |
| ; Rozwiązanie.
| |
| : Pierwszym działaniem, które może zależeć od reprezentantów z
| |
| wybranych z klasy równoważności jest branie elementu przeciwnego.
| |
| Załóżmy, że </math>(a,b) (c,d)<math>. Wtedy </math>ad<nowiki>=</nowiki>cb<math> i korzystając z
| |
| własności liczb całkowitych\footnote{Tylko niektóre z niezbędnych
| |
| własności liczb całkowitych zostały wykazane we wcześniejszej
| |
| części wykładu. Pozostawiamy dociekliwym czytelnikom możliwość
| |
| dowiedzenie wszystkich faktów niezbędnych do rozumowań na liczbach
| |
| wymiernych}, </math>(-1) a d <nowiki>=</nowiki> (-1) c b<math> i dalej
| |
| </math>-a d <nowiki>=</nowiki> -c b<math>, czyli </math>[(-a,b)]_{}<nowiki>=</nowiki>[(-c,d)]_{}<math>, co | |
| należało wykazać.
| |
| | |
| Aby dowieść niezależności dodawania ustalmy cztery elementy
| |
| </math>{Z}{Z}^*<math> takie, że </math>(a,b) (e,f)<math>, oraz
| |
| </math>(c,d)(g,h)<math>. Natychmiast wnioskujemy, że </math>a f <nowiki>=</nowiki> e
| |
| b<math>, oraz </math>c h <nowiki>=</nowiki> g d<math> i dalej
| |
| | |
| </math></center>a f d h <nowiki>=</nowiki> e b d h { oraz }
| |
| c h b f <nowiki>=</nowiki> g d b f.
| |
| <center><math>
| |
| | |
| Sumując obie równości i wyłączając wspólne czynniki otrzymujemy
| |
| | |
| </math></center>(f h) (a d + c b) <nowiki>=</nowiki> (b d) ( e h
| |
| + g f)
| |
| <center><math>
| |
| | |
| czyli </math>(a d + c b, b d) ( e h + g f,
| |
| f h)<math> i dalej
| |
| | |
| </math></center>[(a,b)]_{}+[(c,d)]_{} <nowiki>=</nowiki> [(a d + c b,b d)]_{} <nowiki>=</nowiki>
| |
| [(e h + g f,f h)]_{} <nowiki>=</nowiki> [(e,f)]_{} + [(g,h)]_{},
| |
| <center><math>
| |
| | |
| co należało wykazać.
| |
| | |
| Niezależność odejmowania jest bezpośrednią konsekwencją faktów
| |
| dowiedzionych powyżej. Wystarczy zauważyć, że
| |
| </math>[(a,b)]_{}-[(c,d)]_{} <nowiki>=</nowiki> [(a,b)]_{}+ (-[(c,d)]_{})<math>, co wynika
| |
| wprost z definicji odejmowania. Ponieważ dodawanie i znajdowanie
| |
| elementu przeciwnego są niezależne od wyboru reprezentantów z klas
| |
| to również ich złożenie jest od niego niezależne -- czego należało
| |
| dowieść.
| |
| | |
| Dla dowodu mnożenia ustalmy cztery elementy
| |
| </math>{Z}{Z}^*<math> takie, że </math>(a,b) (e,f)<math>, oraz
| |
| </math>(c,d)(g,h)<math>. Z założeń wnioskujemy, że </math>af <nowiki>=</nowiki> be<math>, oraz, że
| |
| </math>ch <nowiki>=</nowiki> dg<math>. W związku z tym </math>afch <nowiki>=</nowiki> bedg<math> i, korzystając z
| |
| przemienności i łączności mnożenia liczb całkowitych </math>(ac,bd)
| |
| (eg,fh)<math>, czyli
| |
| | |
| </math></center>[(a,b)]_{}[(c,d)]_{} <nowiki>=</nowiki> [(ac,bd)]_{}
| |
| <nowiki>=</nowiki>[(eg,fh)]_{}<nowiki>=</nowiki>[(e,f)]_{}[(g,h)]_{},
| |
| <center><math>
| |
| | |
| co należało wykazać.
| |
| | |
| Dla dowodu dzielenia zauważmy, że dla dowolnego
| |
| </math>(c,d)(g,h)<math>~(</math>c,g<math> różne od </math>0<math>) mamy </math>(d,c)(h,g)<math>,
| |
| ponieważ oba fakty są równoważne </math>ch<nowiki>=</nowiki>gd<math>~(korzystając z
| |
| przemienności mnożenia liczb całkowitych). W związku z tym
| |
| ``zamiana miejscami'' nie zależy od wyboru reprezentanta klasy
| |
| równoważności. Zauważmy, że </math>[(a,b)]_{}:[(c,d)]_{}
| |
| <nowiki>=</nowiki>[(a,b)]_{}[(d,c)]_{}<math> i ponieważ założyliśmy </math>c 0<math>, to
| |
| dzielenie jest złożeniem dwóch operacji niezależnych od wyboru
| |
| reprezentantów dla klas równoważności -- co należało wykazać.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
| | |
| ===Porządek ułamków.===
| |
| | |
| \begindefn | |
| | |
| </math> {a}{b} {c}{d}<math> gdy </math>(a d - b c)
| |
| b d 0<math>
| |
| \enddefn | |
| | |
| \beginCwiczenieINS
| |
| Pokaż, że definicja porządku nie jest zależna od wyboru
| |
| reprezentanta.
| |
| | |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Do dowodu zastosuj własności dodawania, mnożenia i
| |
| odejmowania liczb całkowitych.
| |
| | |
| ; Rozwiązanie.
| |
| : Ustalmy dowolne </math>{a}{b} {c}{d}<math>. Wtedy </math>(a
| |
| d - b c) b d 0<math> jest równoważne </math>((a d
| |
| - b c) 1 -(b d) 0 )( b d) 1
| |
| 0<math>, co z kolej znaczy, że
| |
| </math>{a}{b}-{c}{d}{0}{1}<math>. Ponieważ wykazaliśmy
| |
| wcześniej, że odejmowanie liczb wymiernych nie zależy od wyboru
| |
| reprezentantów dla klasy pozostaje wykazać, że dla
| |
| </math>{a}{b}<nowiki>=</nowiki>{e}{f}<math> mamy </math>{a}{b}{0}{1}<math> wtedy | |
| i tylko wtedy, kiedy </math>{e}{f}{0}{1}<math>. Pierwsza
| |
| nierówność jest prawdą wtedy i tylko wtedy, kiedy </math>(a 1 -
| |
| b 0) b 1<nowiki>=</nowiki>a b 0<math>, a druga, kiedy </math>e f
| |
| 0<math>. W świetle założenia mówiącego, że
| |
| </math>{a}{b}<nowiki>=</nowiki>{e}{f}<math>, czyli, że </math>a f <nowiki>=</nowiki> b e<math>
| |
| równoważność otrzymujemy przez analizę dodatniości </math>a,b,e<math> i </math>f<math>.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
| | |
| \beginCwiczenieINS
| |
| Pokaż, że porządek liczb wymiernych spełnia postulaty porządku
| |
| liniowego to znaczy jest zwrotny, antysymetryczny, przechodni i
| |
| spójny.
| |
| | |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Do dowodu zastosuj własności dodawania liczb
| |
| całkowitych i porządku dla liczb całkowitych.
| |
| ; Rozwiązanie.
| |
| : Zwrotność
| |
| porządku na liczbach wymiernych jest trywialna. Nierówność
| |
| </math>{a}{b}{a}{b}<math> oznacza </math>(ab-ba)bb 0<math> co jest
| |
| zawsze prawdą.
| |
| | |
| Dla dowodu antysymetrii załóżmy, że </math>{a}{b}{c}{d}<math>,
| |
| oraz </math>{c}{d} {a}{b}<math>. Wtedy </math>(ad-bc)bd 0<math> i
| |
| </math>(cb-da)db 0<math>. Ponieważ definicja liczb wymiernych gwarantuje,
| |
| że </math>db 0<math> to </math>ad-bc<nowiki>=</nowiki>0<math>, czyli </math>ad<nowiki>=</nowiki>bc<math> co jest definicją
| |
| równości </math>{a}{b}<nowiki>=</nowiki>{c}{d}<math>. Antysymetria jest pokazana.
| |
| | |
| Aby pokazać przechodniość wybierzmy trzy liczby wymierne
| |
| </math>{a}{b}{c}{d}{e}{f}<math>. Z założeń wynika, że
| |
| </math>(ad-bc)bd 0<math>, oraz </math>(cf-de)df 0<math>. Wnioskujemy, że
| |
| | |
| </math></center>adbd bcbd oraz cfdf dedf
| |
| <center><math>
| |
| | |
| mnożąc nierówności przez, odpowiednio </math>ff<math> i </math>bb<math>~(założenia
| |
| gwarantują </math>f 0 b<math>) otrzymujemy
| |
| | |
| </math></center>adbdff bcbdff oraz cfdfbb dedfbb
| |
| <center><math>
| |
|
| |
|
| i korzystając z przechodniości nierówności </math>adbdff dedfbb<math>, co | | Przedstawiony algorytm można zrealizować za pomocą wielotaśmowej |
| możemy przekształcić do </math>(af-be)bfdd 0<math>. Ponieważ założenia
| | maszyny Turinga. Założenie dotyczące konstruowalności pamięciowej |
| gwarantują, że </math>d 0<math>, to </math>(af-be)bf 0<math>, czyli
| | jest istotnie wykorzystywane w tej konstrukcji przy implementacji |
| </math>{a}{b}{e}{f}<math>, co należało pokazać. | | linii 3 algorytmu i linii 2 procedury Test. Musimy zaznaczyć <math>\displaystyle s(n)</math> |
| | komórek taśmy, aby móc konstruować konfiguracje o długości |
| | ograniczonej przez <math>\displaystyle s(n)</math> i móc następnie wykonywać na nich |
| | symulację maszyny <math>\displaystyle \mathcal{NMT}</math>. |
|
| |
|
| Pozostała nam do wykazania spójność porządku. Bardzo łatwo
| | Zauważmy, że ilość konfiguracji jest ograniczona przez <math>\displaystyle s(n)</math>, a |
| zauważyć, że dla dwóch liczb wymiernych </math>{a}{b}<math> i
| | głębokość rekursji przez <math>\displaystyle \log c^{s(n)}</math>. Oznacza to, że jesteśmy w |
| </math>{c}{d}<math> mamy </math>(ad-bc)bd 0<math> lub </math>(bc-ad)db 0<math> co | | stanie skonstruować maszynę Turinga, która wymaga <math>\displaystyle c' s^2(n)</math> pamięci, gdzie <math>\displaystyle c'</math> jest pewną stałą. Na mocy Twierdzenia [[#tw.1.1|1.1]] jesteśmy w stanie określić maszynę <math>\displaystyle \mathcal{MT}</math> działającą w pamięci <math>\displaystyle s^2(n)</math>. |
| kończy dowód spójności.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
|
| |
|
| Do rozważań nad konstrukcją liczb rzeczywistych potrzebna nam będzie
| | {{wniosek|1.1|| |
| definicja wartości bezwzględnej
| | <center> '''PSPACE''' <math>\displaystyle = </math> '''NPSPACE''' </center> |
|
| |
|
| \begindefn
| |
| </math> | x | <nowiki>=</nowiki>
| |
|
| |
| x & { gdy }, x 0 <br>
| |
| -x & { w przeciwnym przypadku}.
| |
| <math>
| |
| \enddefn
| |
|
| |
| \beginCwiczenieINS
| |
| Pokaż, warunek trójkąta czyli:
| |
|
| |
| </math></center> | x+y | | x | + | y | <center><math>
| |
|
| |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Rozważ przypadki, kiedy obie liczby są dodatnie, obie
| |
| ujemne, jedna dodatnia a druga ujemna. W każdym z przypadków
| |
| rozumowanie jest trywialne.
| |
|
| |
| ; Rozwiązanie.
| |
| : Dowód przeprowadzimy wprowadzając podobną notację dla liczb
| |
| całkowitych. Jeśli uda nam się zdefiniować funkcję moduł w ten
| |
| sposób, że </math> | n+k | | n | + | k | <math>,
| |
| </math> | nk | <nowiki>=</nowiki> | n | | k | <math>, </math> | n | 0<math> dla dowolnych
| |
| liczb całkowitych, oraz
| |
| </math> | {a}{b} | <nowiki>=</nowiki>{ | a | }{ | b | }<math>, to
| |
|
| |
| </math></center> | {a}{b}+{c}{d} | <nowiki>=</nowiki> | {ad+bc}{bd} | <nowiki>=</nowiki>
| |
| { | ad+bc | }{ | bd | }
| |
| <center><math>
| |
|
| |
| oraz
| |
|
| |
| </math></center> | {a}{b} | + | {c}{d} | <nowiki>=</nowiki>
| |
| { | a | }{ | b | }+{ | c | }{ | d | } <nowiki>=</nowiki>
| |
| { | a | | d | + | b | | c | }{ | b | | d | }.
| |
| <center><math>
| |
|
| |
| Żądana nierówność będzie prawdą, jeśli uda nam się wykazać, że
| |
|
| |
| </math></center>[( | a | | d | + | b | | c | ) | bd | -
| |
| | ad+bc | | b | | d | ] | b | | d | | bd |
| |
| 0,
| |
| <center><math>
| |
|
| |
| ale korzystając z właściwości modułu dla liczb całkowitych~(które
| |
| wkrótce wykażemy) przekształcamy wzór do
| |
|
| |
| </math></center>[( | ad | + | bc | -
| |
| | ad+bc | ] | b | | c | | b | | d | | b | | d |
| |
| 0,
| |
| <center><math>
| |
|
| |
| i ponieważ </math> | b | <math> i </math> | d | <math> są stale większe od zera, a
| |
| </math> | ad | + | bc | | ad+bc | <math> w liczbach całkowitych,
| |
| nierówność jest dowiedziona.
| |
|
| |
| Pozostaje zdefiniować funkcję moduł w liczbach całkowitych.
| |
| Definiujemy ją jako: </math> | [(n,k)]_{} | <nowiki>=</nowiki> [(l,0)]_{}<math> gdzie </math>l<math>
| |
| jest unikalną liczbą naturalną taką, że </math>[(n,k)]_{}<nowiki>=</nowiki>[(l,0)]_{}<math>
| |
| lub </math>[(n,k)]_{}<nowiki>=</nowiki>[(0,l)]_{}<math>. Liczba taka istnieje na podstawie
| |
| Ćwiczenia~[[##Cw:reprzero|Uzupelnic Cw:reprzero|]] i jest unikalna, ponieważ
| |
| </math>[(l,0)]_{}<nowiki>=</nowiki>[(0,p)]_{}<math> implikuje </math>p<nowiki>=</nowiki>l<nowiki>=</nowiki>0<math>, a
| |
| </math>[(l,0)]_{}<nowiki>=</nowiki>[(p,0)]_{}<math> implikuje </math>p<nowiki>=</nowiki>l<math>. Pozostaje wykazać
| |
| wymagane fakty o funkcji moduł.
| |
|
| |
| Ustalmy dwie liczby całkowite </math>[(n,k)]_{}<math> i </math>[(l,m)]_{}<math> --
| |
| wykażemy, że </math> | [(n,k)]_{} +[(l,m)]_{} |
| |
| | [(n,k)]_{} | + | [(l,m)]_{} | <math>. Ponieważ zarówno
| |
| dodawanie, jak i porządek nie zależą od wyboru reprezentantów dla
| |
| klas równoważności możemy założyć, że </math>n<nowiki>=</nowiki>0<math> lub </math>k<nowiki>=</nowiki>0<math>~(i
| |
| równocześnie </math>l<nowiki>=</nowiki>0<math> lub </math>m<nowiki>=</nowiki>0<math>). Jeśli </math>k<nowiki>=</nowiki>0<math> oraz </math>m<nowiki>=</nowiki>0<math> to mamy
| |
| </math> | [(n,k)]_{} | <nowiki>=</nowiki> [(n,k)]_{}<math> oraz
| |
| </math> | [(l,m)]_{} | <nowiki>=</nowiki>[(l,m)]_{}<math> i nierówność jest prawdziwa.
| |
| Jeśli z kolei </math>n<nowiki>=</nowiki>0<math> i </math>l<nowiki>=</nowiki>0<math>, to
| |
|
| |
| </math></center> | [(n,k)]_{} +[(l,m)]_{} | <nowiki>=</nowiki> | [(0,k+m)]_{} | <nowiki>=</nowiki>
| |
| [(k+m,0)]_{} <nowiki>=</nowiki>[(k,0)]_{}+[(m,0)]_{} <nowiki>=</nowiki> | [(0,k)]_{} |
| |
| + | [(0,m)]_{} |
| |
| <center><math>
| |
|
| |
| i nierówność znowu jest spełniona. Pozostają dwa symetryczne
| |
| przypadki. Bez straty ogólności możemy założyć, że </math>n<nowiki>=</nowiki>0<math> i </math>m<nowiki>=</nowiki>0<math>.
| |
| Wtedy </math> | [(n,k)]_{} +[(l,m)]_{} | <nowiki>=</nowiki> | [(l,k)]_{} | <math>
| |
| jest niewątpliwie mniejszy od
| |
| </math> | [(k,n)]_{} | + | [(l,m)]_{} | <nowiki>=</nowiki> [(l+k,0)]_{}<math>
| |
| ponieważ, zgodnie z definicją modułu pierwsza współrzędna
| |
| </math> | [(l,k)]_{} | <math> jest mniejsza lub równa większej z liczb
| |
| </math>k<math>, </math>l<math>, która jest z kolei mniejsza lub równa </math>l+k<math>.
| |
|
| |
| Aby dowieść, że w liczbach całkowitych moduł jest rozdzielny
| |
| względem mnożenia ustalmy dwie liczby </math>[(n,k)]_{}<math> i
| |
| </math>[(l,m)]_{}<math> i, podobnie jak poprzednio, załóżmy, że że </math>n<nowiki>=</nowiki>0<math> lub
| |
| </math>k<nowiki>=</nowiki>0<math>~(i równocześnie </math>l<nowiki>=</nowiki>0<math> lub </math>m<nowiki>=</nowiki>0<math>). Wtedy
| |
| </math>[(n,k)]_{}[(l,m)]_{} <nowiki>=</nowiki> [(nl+km,lk+mn)]_{}<math>, gdzie co
| |
| najwyżej jeden z czterech sumandów jest niezerowy. Moduł
| |
| otrzymanej liczby będzie liczbą całkowitą posiadającą na pierwszej
| |
| współrzędnej ten właśnie sumand, a na drugiej zero. Równocześnie
| |
| </math> | [(n,k)]_{} | | [(l,m)]_{} | <math> będzie posiadał na
| |
| pierwszej współrzędnej dokładnie ten sumand, a na drugiej zero, co
| |
| dowodzi żądanej równości.
| |
|
| |
| Aby dowieść, że </math> | [(n,k)]_{} | 0<math> wystarczy zauważyć, że
| |
| druga współrzędna pary reprezentującej liczbę jest równa zero i w
| |
| związku z tym warunek nierówności jest zawsze spełniony.
| |
|
| |
| Pozostaje wykazać, że
| |
| </math> | {a}{b} | <nowiki>=</nowiki>{ | a | }{ | b | }<math>. Rozważmy dwa
| |
| przypadki: jeśli </math>{a}{b} 0<math>, to </math> | {a}{b} | <nowiki>=</nowiki>
| |
| {a}{b}<math>. W tym przypadku nierówność implikuje, że
| |
| </math>(a1-b0)b1 0<math>, czyli, że </math>a<math> i </math>b<math> są liczbami całkowitymi
| |
| tego samego znaku. To znaczy, że posiadają reprezentacje postacie
| |
| </math>[(n,0)]_{}<math> i </math>[(k,0)]_{}<math>~(lub </math>[(0,n)]_{}<math> i
| |
| </math>[(0,k)]_{}<math>). Wnioskujemy, że </math>a | b | <nowiki>=</nowiki> b
| |
| | a | <math>, czyli </math>{a}{b} <nowiki>=</nowiki> { | a | }{ | b | }<math> co
| |
| należało wykazać. W drugim przypadku mamy </math>{a}{b}< 0<math>, czyli
| |
| </math>(a1-b0)b1< 0<math>, więc znaki </math>a<math> i </math>b<math> są przeciwne~(posiadają
| |
| reprezentacje </math>[(n,0)]_{}<math> i </math>[(0,k)]_{}<math>, lub na odwrót). Wtedy
| |
| mamy </math> | {a}{b} | <nowiki>=</nowiki> {-a}{b}<math> i znowu </math>-a
| |
| | b | <nowiki>=</nowiki> b | a | <math> jest prawdą. Wykazaliśmy, że moduł
| |
| zdefiniowany w liczbach wymiernych jest zgodny z modułem dla liczb
| |
| całkowitych, co było ostatnim brakującym faktem w dowodzie.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
|
| |
| \begindefn
| |
| Rozważmy teraz funkcje </math>j:{Z} {Q}<math>
| |
| identyfikującą liczby całkowite jako pewne specjalne liczby
| |
| wymierne zadaną wzorem
| |
|
| |
| </math></center>j(a) <nowiki>=</nowiki> [ (a,1)]_{}
| |
| <center><math>
| |
|
| |
| \enddefn
| |
|
| |
| Funkcja ta jest naturalnym włożeniem zbioru </math>{Z}<math> w zbiór
| |
| </math>{Q}<math>. Jest iniektywna, zgodna z działaniami i zachowująca
| |
| stałe. Pokazanie tych własności będzie treścią następnego
| |
| ćwiczenia.
| |
|
| |
| \beginCwiczenieINS
| |
|
| |
| Pokaż własności włożenia </math>j<math>.
| |
|
| |
| # </math>j(0) <nowiki>=</nowiki> 0<math>
| |
|
| |
| # </math>j(1)<nowiki>=</nowiki>1<math>
| |
|
| |
| # </math>j(a+b) <nowiki>=</nowiki> j(a)+j(b)<math>
| |
|
| |
| # </math>j(a-b) <nowiki>=</nowiki> j(a)-j(b)<math>
| |
|
| |
| # </math>j(a b) <nowiki>=</nowiki> j(a) j(b)<math>
| |
|
| |
| # jeżeli </math>x y<math> to </math>j(x) j(y)<math>
| |
|
| |
| \endCwiczenieINS \setcounter{hint}{0}
| |
| \addtocounter{hint}{1}
| |
| ; Wskazówka \thehint.
| |
| : Pamiętaj, że znaki działań i porządku (oraz </math>0<math> i
| |
| </math>1<math>) po prawej i po lewej stronie równości znaczą co innego.
| |
| Zapisz każde z powyższych praw ujawniając strukturę liczb
| |
| wymiernych.
| |
| Zauważ, że w dowodzie będą interweniowały udowodnione już prawa
| |
| łączności, przemienności, prawo skreśleń i skracania oraz własności
| |
| porządkowe dla liczb całkowitych.
| |
| ; Rozwiązanie.
| |
| : Włożenie </math>j<math> przekształca </math>0<math>
| |
| w </math>0<math> i
| |
| </math>1<math> w </math>1<math>, co jest trywialną konsekwencją definicji funkcji </math>j<math>.
| |
|
| |
| Aby wykazać, że włożenie jest zgodne z dodawanie, ustalmy dwie
| |
| dowolne liczby całkowite </math>a<math> i </math>b<math>. Wtedy
| |
| </math>j(a+b)<nowiki>=</nowiki>[(a+b,1)]_{}<nowiki>=</nowiki>[((a1+1b)11,11)]_{} <nowiki>=</nowiki> [(a,1)]_{}
| |
| +[(b,1)]_{} <nowiki>=</nowiki> j(a) + j(b)<math> co należało wykazać.
| |
|
| |
| Dla dowodu różnicy ustalmy ponownie </math>a<math> i </math>b<math>, wtedy
| |
| </math>j(a-b)<nowiki>=</nowiki>[(a-b,1)]_{}<nowiki>=</nowiki>[((a1-1b)11,11)]_{} <nowiki>=</nowiki> [(a,1)]_{}
| |
| -[(b,1)]_{} <nowiki>=</nowiki> j(a) - j(b)<math>, co kończy dowód podobnie jak w
| |
| poprzednim przypadku.
| |
|
| |
| Dla dowodu iloczynu, ustalmy znów </math>a<math> i </math>b<math> mamy </math>j(a b) <nowiki>=</nowiki>
| |
| [(ab,1)]_{} <nowiki>=</nowiki> [(ab,11)]_{} <nowiki>=</nowiki> [(a,1)]_{}[(b,1)]_{} <nowiki>=</nowiki>
| |
| j(a) j(b)<math>, co dowodzi wymaganego faktu.
| |
|
| |
| Dla dowodu zgodności z porządkiem załóżmy, że </math>a b<math> wtedy
| |
| </math>b-a 0<math> i dalej </math>(b1-1a)11 0<math> co oznacza, że
| |
| </math>[(b,1)]_{}[(a,1)]_{}<math>.
| |
| {\bf Koniec ćwiczenia
| |
| \thethm}\par\noindent\ignorespacesafterend
| |
|
| |
| Dzięki włożeniu </math>j<math> będziemy utożsamiali liczbę całkowitą </math>a<math> z
| |
| odpowiadającą jej liczbą wymierną </math>j(a) <nowiki>=</nowiki> [ (a,1)]_{}<math>.
| |
|
| |
| ==Konstrukcja Cantora liczb rzeczywistych==
| |
|
| |
| \begindefn Ciągiem elementów zbioru </math>A<math> nazywamy
| |
| każdą funkcje </math>a: {N} A<math>.
| |
| Przez </math>a_n<math> oznaczamy element ciągu </math>a(n)<math>.
| |
| \enddefn
| |
|
| |
| Konstrukcja liczb rzeczywistych pochodzi od \underline{\bf Georg Cantor}\ . Genialny
| |
| pomysł \underline{\bf Georg Cantor}\ polega na rozważaniu nieskończonych ciągów liczb
| |
| wymiernych spełniających warunek \underline{\bf Augustin Louis Cauchy}\ . Wiemy z analizy (patrz
| |
| wykład analiza 1), że ciągi takie są zbieżne. Dlatego ciąg ten
| |
| można uważać za aproksymacje liczby rzeczywistej. Będziemy za
| |
| liczbę rzeczywistą brać wszystkie takie ciągi aproksymacji, które
| |
| w sensie poniższych definicji będą \emph{dowolnie bliskie siebie}.
| |
|
| |
| \begindefn Ciągiem Cauchy'ego zbioru liczb
| |
| wymiernych </math>{Q}<math> nazywamy każdy taki ciąg </math>a: {N}
| |
| {Q}<math> który spełnia warunek (Cauchy'ego)
| |
|
| |
| </math></center>_{ {Q} {0.1mm}
| |
| >0} _{n_0 {N}} _{p,k {N}} (
| |
| p>n_0 k >n_0 {0.1mm} | a_p - a_k | < )
| |
| <center><math>
| |
|
| |
| \enddefn
| |
|
| |
| \begindefn Ciąg </math>a: {N}
| |
| {Q}<math> nazywamy ograniczonym gdy spełnia:
| |
|
| |
| </math></center>_{M>0} _{n {N}} | a_n | <M
| |
| <center><math>
| |
|
| |
| \enddefn
| |
|
| |
| \bigskip
| |
|
| |
| {{fakt|[Uzupelnij]||
| |
| Ciągi Cauchy'ego są ograniczone
| |
| }} | | }} |
|
| |
|
| {{dowod|[Uzupelnij]|| | | {{lemat|1.1|| |
| | | Jeśli <math>\displaystyle g(n)\geqslant n</math>, to <math>\displaystyle Dtime(g(n))\subset Dspace(g(n))</math> oraz |
| Do ciągu Cauchy'ego </math>a<math> będziemy dobierać ograniczenie </math>M<math>.
| | <math>\displaystyle Ntime(g(n))\subset Nspace(g(n))</math>. |
| Weźmy dodatnią liczbę wymierną . Dla niej, zgodnie z
| |
| definicją [[##defn:ciagc|Uzupelnic defn:ciagc|]] znajdziemy
| |
| tak duże </math>n_0<math>, że dla wszystkich liczb naturalnych </math>p,k<math> poczynając
| |
| od </math>n_0 +1<math> będzie zachodzić </math> | a_p - a_k | < <math>.
| |
| Połóżmy za </math>M<math> największą z pośród liczb </math> | a_0 | ,...
| |
| | a_{n_0} | <math> oraz </math> | a_{n_0 +1} | + <math> powiększoną o </math>1<math>.
| |
| Łatwo sprawdzić, że tak zdefiniowane </math>M<math> majoryzuje moduły wszystkich
| |
| liczb ciągu.
| |
| }} | | }} |
|
| |
|
| Poniżej wprowadzimy relacje równoważności na zborze ciągów
| | {{dowod||| |
| Cauchy'ego, taką która skleja ciągi, które leżą \emph{dowolnie
| | Niech będzie dana maszyna deterministyczna <math>\displaystyle \mathcal{MT}</math> |
| blisko}. Każdy taki ciąg będzie inną aproksymacją tej samej liczby
| | akceptująca dany język <math>\displaystyle L</math> w czasie <math>\displaystyle g(n)</math>. Do akceptacji słowa <math>\displaystyle w</math> |
| rzeczywistej. Zbiór wszystkich takich aproksymacji będzie dla nas
| | o długości <math>\displaystyle n</math> maszyna wykorzystuje co najwyżej <math>\displaystyle g(n)</math> kroków |
| właśnie liczbą rzeczywistą.
| | czasowych, czyli odwiedza co najwyżej <math>\displaystyle g(n)+1</math> komórek taśmy. |
| | |
| \begindefn Niech
| |
| </math>X<nowiki>=</nowiki> a: {N}
| |
| {Q} : a jest ciągiem Cauchy'ego
| |
| | |
| Na zbiorze <math>X</math> ciągów Cauchy'ego określamy relację następująco:
| |
| dwa ciągi <math>a</math> i <math>b</math> są równoważne co zapisujemy jako <math>a \simeq b</math>
| |
| gdy:
| |
| | |
| <center><math>\forall_{\varepsilon >0} \;\; \exists_{n_0 \in \mathbb{N}} \;\; \forall_{n
| |
| \in \mathbb{N}} \;\; ( n>n_0 \hspace*{0.1mm} \Rightarrow \left| a_n - b_n \right| < \varepsilon )
| |
| | |
| </math></center>
| |
| | |
| {{twierdzenie|[Uzupelnij]||
| |
| Relacja <math>\simeq </math> określona na <math>X</math> jest relacją
| |
| równoważności. }}
| |
| | |
| {{dowod|[Uzupelnij]||
| |
| | |
| Zwrotność i symetria relacji <math>\simeq </math> są oczywiste. Zajmijmy się
| |
| dowodem przechodniości. Niech <math>a \simeq b</math> oraz <math>b\simeq c</math>.
| |
| Oznacza to:
| |
| | |
| <center><math>\aligned\forall_{\varepsilon >0} \;\; \exists_{n_1 \in \mathbb{N}} \;\; \forall_{n
| |
| \in \mathbb{N}} \;\; ( n>n_1 \hspace*{0.1mm} \Rightarrow \left| a_n - b_n \right| < \varepsilon ) \\
| |
| \forall_{\varepsilon >0} \;\; \exists_{n_2 \in \mathbb{N}} \;\; \forall_{n
| |
| \in \mathbb{N}} \;\; ( n>n_0 \hspace*{0.1mm} \Rightarrow \left| b_n - c_n \right| < \varepsilon )
| |
| \endaligned</math></center>
| |
| | |
| Weźmy <math>\varepsilon >0</math>. Będziemy dobierać niezależnie liczby <math>n_1</math>
| |
| i <math>n_2</math> do <math>\varepsilon /2</math> dla pierwszej i drugiej pary ciągów.
| |
| Mamy zatem parę nierówności: dla <math>n>n_1</math> zachodzi <math> \left| a_n -
| |
| b_n \right| < \varepsilon/2</math> oraz dla <math>n>n_2</math> zachodzi <math> \left| b_n -
| |
| c_n \right| < \varepsilon/2</math>. Biorąc większą z tych dwóch liczb będziemy
| |
| oczywiście jednocześnie spełniać obie nierówności. Zatem dla
| |
| <math>n>\max(n_1 , n_2)</math> zachodzą <math> \left| a_n - b_n \right| < \varepsilon/2</math>
| |
| oraz <math> \left| b_n - c_n \right| < \varepsilon/2</math>. Używając nierówności
| |
| trójkąta udowodnionego w ćwiczeniu w rozdziale
| |
| [[##cwiczenie_nier_troj|Uzupelnic cwiczenie_nier_troj|]] mamy:
| |
|
| |
|
| <center><math> \left| a_n - c_n \right| \leq \left| a_n - b_n \right| + \left| b_n - c_n \right| < | | Na podstawie Twierdzenia [[#tw.1.1|1.1]] istnieje maszyna Turinga |
| \varepsilon/2 + \varepsilon/2 = \varepsilon
| | <math>\displaystyle \mathcal{MT}'</math> wykorzystująca |
| | <center><math>\displaystyle |
| | \max \left\{n, \frac{1}{2}(g(n)+1)\right\}\leqslant g(n) |
| </math></center> | | </math></center> |
|
| |
|
| co kończy dowód.
| | komórek pamięci. Dla niedeterministycznych maszyn Turinga argumentacja |
| | jest identyczna. |
| }} | | }} |
|
| |
|
| Przez liczby rzeczywiste będziemy rozumieli zbiór <math>X/\simeq </math> i
| | {{wniosek|1.2|| |
| oznaczamy przez <math>\mathbb{R}</math>.
| | <center> '''P''' <math>\displaystyle \subset </math> '''NP''' <math>\displaystyle \subset |
| | | </math> '''PSPACE''' <math>\displaystyle = </math> '''NPSPACE''' </center> |
| Liczbą rzeczywistą jest zatem zbiór ciągów Cauchy'ego które leżą
| |
| ''dowolnie blisko'' siebie. Na każdy taki ciąg można patrzeć | |
| jak na pewną aproksymacje danej liczby rzeczywistej.
| |
| | |
| Ile razy należy poprzedzić znakiem <math>\bigcup</math> zbiór <math>\mathbb{R}</math>,
| |
| aby otrzymać <math>\mathbb{N}</math>? {hint}{0}
| |
| | |
| ; Rozwiązanie.
| |
| : Mamy <math>\mathbb{R}\subseteq
| |
| \mathcal{P}(\mathcal{P}(\mathbb{N}\times\mathbb{Q}))</math>, a więc
| |
| <math>\bigcup\bigcup\bigcup\bigcup \mathbb{R}\subseteq
| |
| \mathbb{N}\cup\mathbb{Q}</math>. Rozumując dalej mamy
| |
| <math>\mathbb{Q}\subseteq\mathcal{P}(\mathbb{Z}\times\mathbb{Z})</math>, a więc
| |
| <math>\bigcup\bigcup\bigcup\mathbb{Q}\subseteq \mathbb{Z}</math>. W końcu
| |
| <math>\mathbb{Z}\subseteq\mathcal{P}(\mathbb{N}\times\mathbb{N})</math> i
| |
| <math>\bigcup\bigcup\bigcup\mathbb{Z}\subseteq \mathbb{N}</math>. Reasumując
| |
| otrzymujemy
| |
| | |
| <center><math>\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup(\mathbb{R})
| |
| \subseteq
| |
| \bigcup\bigcup\bigcup\bigcup\bigcup\bigcup(\mathbb{N}\cup
| |
| \mathbb{Q}) \subseteq \mathbb{N}.
| |
| </math></center>
| |
| | |
| Pozostaje wykazać, że po tylu iteracjach nie otrzymamy niczego mniejszego niż
| |
| <math>\mathbb{N}</math>. Niech <math>z:\mathbb{N}\rightarrow\mathbb{Q}</math> będzie funkcją taką, że <math>z(n) = [(0,1)]_{\sim}</math>
| |
| dla dowolnego <math>n</math>. Wtedy <math>z</math> jest ciągiem Cauchego i <math>[z]_{\simeq}\in\mathbb{R}</math>.
| |
| Ponieważ <math>\bigcup\bigcup z = \mathbb{N}\cup\{[(0,1)]_{\sim}\}</math>, to <math>\bigcup\bigcup\bigcup
| |
| [z]_{\simeq} \supset \mathbb{N}\cup\{[(0,1)]_{\sim}\}</math> co implikuje, że
| |
| | |
| <center><math>\mathbb{N}\subseteq\bigcup\bigcup\bigcup\bigcup\mathbb{R},
| |
| </math></center> | |
| | |
| a ponieważ <math>\bigcup\mathbb{N} = \mathbb{N}</math>
| |
| | |
| <center><math>\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\bigcup\mathbb{R }
| |
| =\mathbb{N}
| |
| </math></center>
| |
| | |
| i każda większa ilość jest również odpowiednia.
| |
| '''Koniec ćwiczenia | |
| ''' | |
| | |
| ===Działania na <math>\mathbb{R}</math>===
| |
| | |
| Dla ciągów <math>a</math> i <math>b</math> ciąg <math>a+ b</math> oraz <math>a \cdot b</math> oznaczają ciągi
| |
| zadane jako <math>(a +b)(i) = a(i) + b(i)</math> dla każdego <math>i</math>. Tak samo
| |
| definiujemy mnożenie: <math>(a \cdot b)(i) = a(i) \cdot b(i)</math>
| |
| | |
| Dodawanie i mnożenie ciągów liczb wymiernych definiujemy po
| |
| współrzędnych to znaczy:
| |
| | |
| * dodawanie <math>[ a ]_{\simeq} + [b]_{\simeq} = [a+b]_{\simeq}</math>
| |
| | |
| * mnożenie <math>[ a ]_{\simeq} \cdot [b]_{\simeq} = [a \cdot b]_{\simeq}</math>
| |
| | |
| Poniższe ćwiczenie odpowiada dowodowi ciągłości dodawania i
| |
| mnożenia. W innej wersji będziecie państwo zapoznawać się z tym
| |
| zagadnieniem na wykładzie 8 analizy matematycznej. Pokazać, że
| |
| definicja dodawania i mnożenia liczb rzeczywistych jest poprawna i
| |
| niezależna od wyboru reprezentantów:
| |
| | |
| {hint}{0}
| |
| {hint}{1}
| |
| ; Wskazówka .
| |
| : Dowód poprawności definicji dodawania oprzeć na
| |
| dowodzie twierdzenia [[##thm:def_R|Uzupelnic thm:def_R|]].
| |
| | |
| ; Rozwiązanie.
| |
| : Pokażemy poprawność definicji mnożenia (lub ciągłość mnożenia w
| |
| sensie wykładu 8 analizy matematycznej)
| |
| | |
| {{dowod|[Uzupelnij]||
| |
| | |
| Niech <math>[ a ]_{\simeq} = [a']_{\simeq}</math> oraz <math>[ b ]_{\simeq} =
| |
| [b']_{\simeq}</math>. Pokazujemy, że <math>[ a\cdot b ]_{\simeq} = [a' \cdot
| |
| b']_{\simeq}</math>. Weźmy <math>\varepsilon >0</math>. Ciągi <math>a'</math> i <math>b</math> jako ciągi
| |
| Cauchy'ego są ograniczone. Niech <math>M</math> będzie wspólnym ograniczeniem
| |
| tych ciągów. Dla <math>\varepsilon/(2 \cdot M)</math> dobierzmy takie <math>n_1</math> i
| |
| <math>n_2</math> aby <math> \left| a_k - a'_k \right| < \varepsilon/(2 \cdot M)</math> i
| |
| <math> \left| b_p - b'_p \right| < \varepsilon/(2 \cdot M)</math> dla <math>k>n_1</math> i
| |
| <math>p>n_2</math>. Obie nierówności będą zachodzić jednocześnie dla
| |
| wszystkich <math>k</math> poczynając od <math>\max(n_1 ,n_2)</math>. Prosty rachunek
| |
| korzystający z nierówności trójkąta kończy dowód:
| |
| | |
| <center><math>\aligned \left| a_k \cdot b_k - a'_k \cdot b'_k \right| =
| |
| \left| (a_k - a'_k)\cdot b_k + (b_k - b'_k)\cdot a'_k \right| & \leq & \nonumber \\
| |
| \left| (a_k - a'_k)\cdot b_k \right| + \left| (b_k - b'_k)\cdot a'_k \right| =
| |
| \left| (a_k - a'_k) \right| \cdot \left| b_k \right| + \left| (b_k - b'_k) \right| \cdot \left| a'_k \right|
| |
| & \leq & \nonumber\\
| |
| \varepsilon/(2 \cdot M ) \cdot M +
| |
| \varepsilon/(2 \cdot M ) \cdot M = \varepsilon \nonumber
| |
| \endaligned</math></center>
| |
|
| |
|
| }} | | }} |
|
| |
|
| '''Koniec ćwiczenia | | {{uwaga|1.2|| |
| ''' | | Nie jest znany przykład wykazujący silną inkluzję '''P''' <math>\displaystyle \varsubsetneq </math> '''NP''' ani dowód wykluczający istnienie takiego przykładu. Powszechnie uznawana |
| | | hipoteza głosi: |
| ===Porządek na <math>\mathbb{R}</math>===
| | <center> '''P''' <math>\displaystyle \neq </math> '''NP'''. </center> |
| | |
| Relacja <math> [ a ]_{\simeq} < [b]_{\simeq}</math> na
| |
| zbiorze liczb rzeczywistych <math>\mathbb{R}</math> jest zdefiniowana jako
| |
| | |
| <center><math>\exists_{\varepsilon > 0} \;\; \exists_{n_0 \in | |
| \mathbb{N}} \;\; \forall_{k>n_0} \;\; a_k +\varepsilon <b_k
| |
| </math></center> | |
| | |
| Będziemy mówili, że liczba wymierna <math>\varepsilon > 0</math> rozdziela
| |
| dwa ciągi Cauchy'ego poczynając od elementu <math>a_{n_0 +1}</math>.
| |
| | |
| Słaby porządek definiujemy tak jak zazwyczaj: dla liczb
| |
| rzeczywistych <math>x \leq y</math> gdy <math>x < y</math> (patrz definicja
| |
| [[##defn:porzadeknaR|Uzupelnic defn:porzadeknaR|]]) lub gdy <math>x=y</math> (patrz definicja
| |
| [[##relacja_na_ciagach_Cauchyego|Uzupelnic relacja_na_ciagach_Cauchyego|]]).
| |
| | |
| {{twierdzenie|[Uzupelnij]||
| |
|
| |
|
| Porządek na <math>\mathbb{R}</math> jest liniowy.
| | Rozstrzygnięcie jej prawdziwości lub fałszywości stanowi jeden z |
| | najważniejszych, a zarazem najtrudniejszych problemów współczesnej |
| | informatyki. Jak widzieliśmy w Przykładzie [[#prz.1.2|1.2]], nawet w |
| | przypadku konkretnego języka <math>\displaystyle L\in </math> '''NP''', problem |
| | uzasadnienia, że także <math>\displaystyle L\in </math> '''P''', jest nietrywialny, |
| | gdyż wymaga zazwyczaj konstrukcji całkiem nowej maszyny Turinga niż |
| | ta do weryfikacji <math>\displaystyle L\in </math> '''NP''' . |
| }} | | }} |
|
| |
|
| {{dowod|[Uzupelnij]||
| | ==Redukcja i problemy zupełne== |
|
| |
|
| Pokażemy, że dla dowolnych ciągów Cauchy'ego <math>a</math> i <math>b</math> jeżeli <math> [
| | {{definicja|2.1 transformacja wielomianowa|| |
| a ]_{\simeq} \neq [b]_{\simeq}</math> to <math> [ a ]_{\simeq} <
| |
| [b]_{\simeq}</math> lub <math> [ a ]_{\simeq} > [b]_{\simeq}</math>. Niech zatem <math>
| |
| [ a ]_{\simeq} \neq [b]_{\simeq}</math>. Zgodnie z definicją <math>\simeq</math>
| |
| oznacza to:
| |
|
| |
|
| <center><math> | | Niech <math>\displaystyle L_1,L_2</math> będą dowolnymi językami nad pewnym alfabetem |
| \exists_{\varepsilon>0} \;\; \forall_{n\in\mathbb{N}} \;\; \exists_{p\in\mathbb{N}} \;\; p>n \hspace*{0.1mm} \wedge \left| a_p -b_p \right| \geq \varepsilon | | <math>\displaystyle \Sigma_I</math>. Mówimy, że <math>\displaystyle L_1</math> redukuje się do <math>\displaystyle L_2</math> w czasie |
| | wielomianowym, co oznaczamy <math>\displaystyle L_1 \propto L_2</math>, gdy istnieje |
| | deterministyczna maszyna Turinga <math>\displaystyle \mathcal{MT}=(\Sigma |
| | _{T},S,f,s_{0},S_{F})</math> taka, że dla dowolnego <math>\displaystyle w\in \Sigma_I^*</math> |
| | istnieje <math>\displaystyle w'\in \Sigma_I^*</math> i stan <math>\displaystyle s_1\in S_F</math> o własności |
| | <center><math>\displaystyle |
| | \sharp s_0 w \sharp \mapsto^* \sharp s_1 w' \sharp |
| </math></center> | | </math></center> |
|
| |
|
| Dobierzmy do <math>\varepsilon/3</math> liczby <math>n_a</math> i <math>n_b</math> odpowiednio dla ciągów <math>a</math> i <math>b</math>
| | oraz |
| tak aby dla wszystkich <math>k,r > \max(n_a ,n_b)</math> zachodziło
| | <center><math>\displaystyle |
| <math> \left| a_k - a_r \right| < \varepsilon/3</math> oraz
| | w\in L_1 \quad \Longleftrightarrow \quad w' \in L_2. |
| <math> \left| b_k - b_r \right| < \varepsilon/3</math>.
| |
| Zgodnie z formulą powyżej dla <math> \max(n_a ,n_b)</math> musi istnieć
| |
| <math>p_0 > \max(n_a ,n_b)</math>
| |
| takie, że <math> \left| a_{p_0} -b_{p_0} \right| \geq \varepsilon</math>. Ustalmy, że to
| |
| <math> a_{p_0} < b_{p_0}</math> (gdy będzie odwrotnie rozumowania jest identyczne).
| |
| Weźmy zatem dowolne <math>k>p_0</math>. Zachodzą następujące nierówności:
| |
| | |
| <center><math>\aligneda_{p_0} + \varepsilon & \leq & b_{p_0} \\ | |
| a_k - \varepsilon/3 & < & a_{p_0} < a_k + \varepsilon/3 \\
| |
| b_k - \varepsilon/3 & < & b_{p_0} < b_k + \varepsilon/3
| |
| \endaligned</math></center>
| |
| | |
| Łatwo pokazać stosując powyższe nierówności, że poczynając od
| |
| <math>p_0</math> liczba wymierna <math>\varepsilon/3</math> będzie rozdzielała obydwa
| |
| ciągi Cauchy'ego. Mianowicie,
| |
| | |
| <center><math>a_k + \varepsilon/3 < a_{p_0} + 2 \varepsilon/3 \leq b_{p_0} -
| |
| \varepsilon/3 < b_{p_0}
| |
| </math></center> | | </math></center> |
|
| |
|
| }} | | }} |
|
| |
|
| ===Włożenie <math>\mathbb{Q}</math> w <math>\mathbb{R}</math>===
| | {{lemat|2.1|| |
| | Załóżmy, że <math>\displaystyle L_1 \propto L_2</math>. Wtedy zachodzą implikacje: |
| | # <math>\displaystyle L_2 \in </math> '''P''' <math>\displaystyle \quad \Longrightarrow \quad L_1 \in </math> '''P''', |
| | # <math>\displaystyle L_2 \in </math> '''NP''' <math>\displaystyle \quad \Longrightarrow \quad L_1 \in </math> '''NP''', |
| | # <math>\displaystyle L_2 \in </math> '''PSPACE''' <math>\displaystyle \quad \Longrightarrow \quad L_1 \in </math> '''PSPACE'''. |
|
| |
|
| Rozważmy funkcje <math>k:\mathbb{Q} \rightarrow \mathbb{R}</math> zadaną
| | }} |
| następująco: dla liczby wymiernej <math>q\in \mathbb{Q}</math> liczba
| |
| rzeczywista <math>k(q)</math> jest klasą równoważności ciągu stale równego
| |
| <math>q</math> czyli <math>k(q) = [b]_{\simeq}</math> gdzie <math>b(n) = q</math>. Tak więc liczby
| |
| wymierne stają się częścią liczb rzeczywistych. Funkcja <math>k</math> jest
| |
| naturalnym włożeniem zbioru <math>\mathbb{Q}</math> w zbiór <math>\mathbb{R}</math>.
| |
| Jest ona iniektywna i zgodna z działaniami i porządkiem.
| |
| | |
| # <math>k(a+b) = k(a)+k(b)</math>
| |
| | |
| # <math>k(a-b) = k(a)-k(b)</math>
| |
| | |
| # <math>k(a \cdot b) = k(a) \cdot k(b)</math>
| |
| | |
| # jeżeli <math>a<b</math> to <math>k(a) < k(b)</math>
| |
| | |
| Dzięki włożeniu <math>k</math> będziemy utożsamiali liczbę wymierną <math>q</math> z
| |
| odpowiadającą jej liczbą rzeczywistą <math>k(q)</math>.
| |
| | |
| ===Rozwijanie liczb rzeczywistych przy podstawie <math>2</math>===
| |
| | |
| {{twierdzenie|[Uzupelnij]||
| |
| Dla każdej liczby rzeczywistej <math>0\leq
| |
| x <1</math> istnieje ciąg <math>a_x \in 2^{\mathbb{N}}</math> taki, że ciąg jego
| |
| sum częściowych <math>b_x: \mathbb{N} \rightarrow \mathbb{Q}</math> dany jako <math> b_k
| |
| = \sum_{i=0}^{k} \frac{a_i}{2^{i+1}} </math> spełnia:
| |
| | |
| # <math>b_x</math> jest ciągiem Cauchy'ego
| |
| | |
| # <math>[ b_x ]_{\simeq} = x</math>
| |
|
| |
|
| Taki ciąg <math>a_x</math> nazywamy rozwinięciem liczby <math>x</math> przy
| | {{dowod||| |
| podstawie <math>2</math>.
| | Dane słowo <math>\displaystyle w</math> transformujemy do <math>\displaystyle w'</math> w czasie wielomianowym, co gwarantuje założenie <math>\displaystyle L_1 \propto L_2</math>. Dzięki założeniu <math>\displaystyle L_2 \in </math> '''P''' możemy rozstrzygnąć, czy <math>\displaystyle w'\in L_2</math> (tzn. jeśli akceptujemy <math>\displaystyle w'</math>, to robimy to w czasie wielomianowym). Tym sposobem (korzystając z definicji transformacji wielomianowej) akceptujemy <math>\displaystyle w</math> w czasie wielomianowym, o ile tylko <math>\displaystyle w\in L_1</math>. Dowód dla pozostałych implikacji jest identyczny. |
| }} | | }} |
|
| |
|
| {{dowod|[Uzupelnij]|| | | {{definicja|2.2|| |
| | | Niech <math>\displaystyle \mathcal{C}</math> oznacza pewną klasę języków. Język <math>\displaystyle L</math> nazywamy '''<math>\displaystyle \mathcal{C}</math>-trudnym''', jeśli spełniony jest warunek: |
| Dla liczby rzeczywistej <math>x</math> podamy indukcyjną konstrukcję ciągu
| | <center><math>\displaystyle |
| <math>a</math> będącego rozwinięciem dwójkowym liczby <math>x</math> i równolegle ciąg
| | \forall\; L' \in \mathcal{C} \quad L'\propto L. |
| <math>b</math> jego sum częściowych. Jeżeli <math>0 \leq x < 1/2</math> to definiujemy
| |
| <math>a_0 = 0</math>, w przeciwnym wypadku to znaczy kiedy <math>1/2 \leq x < 1</math>
| |
| definiujemy <math>a_0 =1</math>. Załóżmy, że mamy zdefiniowany ciąg <math>a</math> do
| |
| wyrazu <math>k</math>. Wyraz <math>k+1</math> definiujemy
| |
| | |
| {| border=1
| |
| |+ <span style="font-variant:small-caps">Uzupelnij tytul</span> | |
| |-
| |
| | definiujemy <math>a_{k+1} = 1</math> || jeżeli <math>\sum_{i=0}^{k}
| |
| \frac{a_i}{2^{i+1}} + \frac{1}{2^{k+2}} \leq x</math> | |
| |-
| |
| | definiujemy <math>a_{k+1} = 0</math> || jeżeli <math>\sum_{i=0}^{k}
| |
| \frac{a_i}{2^{i+1} }+ \frac{1}{2^{k+2}} > x</math> | |
| | |
| |}
| |
| | |
| Ciąg <math>b</math> definiujemy tak jak w tezie twierdzenia to znaczy,
| |
| <math>b_k = \sum_{i=0}^{k} \frac{a_i}{2^{i+1}}</math>. | |
| | |
| Pokażemy indukcyjnie, że dla każdego <math>k</math> zachodzi
| |
| | |
| <center><math> | |
| \sum_{i=0}^{k} \frac{a_i}{2^{i+1}} \leq x \leq \sum_{i=0}^{k} | |
| \frac{a_i}{2^{i+1}} + \frac{1}{2^{k+1}} . | |
| </math></center> | | </math></center> |
|
| |
|
| Dowód tego faktu pozostawimy jako ćwiczenie [[##do_tw_o_rozwijaniu|Uzupelnic do_tw_o_rozwijaniu|]].
| | Jeżeli dodatkowo spełniony jest warunek <math>\displaystyle L\in \mathcal{C}</math>, to język <math>\displaystyle L</math> nazywamy '''<math>\displaystyle \mathcal{C}</math>-zupełnym'''. |
| Z powyższej nierówności mamy pierwszy fakt, a mianowicie ciąg sum częściowych
| |
| <math>b</math> jest ciągiem Cauchy'ego. | |
| | |
| }} | | }} |
|
| |
|
| Uzupełnij dowód indukcyjny nierówności
| | Intuicyjnie, fakt, że język jest <math>\displaystyle \mathcal{C}</math>-zupełny, oznacza, że jest on najbardziej skomplikowany (pod względem obliczeniowym) wśród języków z klasy <math>\displaystyle \mathcal{C}</math>, natomiast język <math>\displaystyle \mathcal{C}</math>-trudny jest bardziej skomplikowany niż każdy z klasy |
| [[##tw_nierownosc_tw_rozwiniecie|Uzupelnic tw_nierownosc_tw_rozwiniecie|]] pierwszej części tezy
| | <math>\displaystyle \mathcal{C}</math>, choć sam nie musi do niej należeć. |
| twierdzenia [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]]. Wykonaj dowód drugiej części
| |
| tezy twierdzenia [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]]. poprzedzającego to
| |
| ćwiczenie.
| |
| | |
| {hint}{0}
| |
| | |
| ; Rozwiązanie.
| |
| : Dowód części drugiej <math>[ b ]_{\simeq} = x</math>. Niech <math>c</math> będzie
| |
| dowolnym ciągiem Cauchy'ego wyznaczającym liczbę rzeczywistą <math>x</math>
| |
| czyli niech <math>[ c ]_{\simeq} = x</math>. Należy pokazać, że ciągi <math>b</math> i <math>c</math> są
| |
| równoważne w sensie <math>{\simeq}</math>. Weźmy <math>\varepsilon >0</math>.
| |
| Dobierzmy tak duże <math>k</math> aby <math> \frac{1}{2^{k+1}} < \varepsilon</math>.
| |
| Dalej wynika trywialnie z nierówności
| |
| [[##tw_nierownosc_tw_rozwiniecie|Uzupelnic tw_nierownosc_tw_rozwiniecie|]].
| |
| '''Koniec ćwiczenia
| |
| '''
| |
| | |
| Konstrukcja przedstawiona powyżej rozwija liczbę rzeczywistą z przedziału
| |
| <math>[0,1)</math> przy podstawie <math>2</math>. Na każdym etapie konstrukcji
| |
| sprawdzamy czy w przedziale w którym pracujemy aktualnie liczba znajduje się w
| |
| lewej czy tez prawej połówce przedziału. Stosownie do tego wybieramy cyfrę
| |
| <math>0</math> lub <math>1</math> rozwinięcia.
| |
| Jak łatwo można przypuścić podobną konstrukcję jak w twierdzeniu
| |
| [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]]
| |
| można wykonać przy dowolnej innej podstawie <math>k\geq 2</math>. W takim
| |
| wypadku aktualny analizowany przedział dzielilibyśmy na <math>k</math>
| |
| podprzedziałów i
| |
| stosownie do położenia liczby wybieralibyśmy jedną z <math>k</math> cyfr
| |
| ze zbioru <math>\left\{0,\ldots k-1\right\}\$. Przykładowo gdy za </math>k<math> wybierzemy
| |
| </math>k<nowiki>=</nowiki>10<math> dostaniemy przy pomocy takiej konstrukcji rozwinięcie dziesiętne
| |
| danej liczby rzeczywistej.
| |
| | |
| Twierdzenie poniżej upewni nas o pewnej ciekawej
| |
| własności rozwinięć. Otóż rozwinięcie przy podstawie </math>k<nowiki>=</nowiki>2<math> otrzymane
| |
| przy pomocy twierdzenia [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]] zawsze jest takie, że
| |
| zera w tym rozwinięciu występują dowolnie daleko. Innymi słowy, nie
| |
| jest możliwe aby w rozwinięciu od pewnego miejsca występowały same
| |
| jedynki. W przykładzie dotyczącym rozwinięcia dziesiętnego liczby
| |
| odpowiada to sytuacji w której nie występują ciągi które stale od pewnego
| |
| miejsca mają cyfrę </math>9<math>.
| |
| | |
| {{twierdzenie|[Uzupelnij]||
| |
| Rozwinięcia </math>a<math> uzyskane przy pomocy
| |
| konstrukcji twierdzenia [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]] dla liczby </math>0 x
| |
| <1<math> jest zawsze takie że:
| |
| | |
| </math></center>_{k} _{n>k} a_n <nowiki>=</nowiki> 0
| |
| <center><math>
| |
|
| |
|
| | {{uwaga|2.1|| |
| | Rozważając klasę '''P''' , '''NP''' i '''PSPACE''', możemy mówić o językach (problemach) '''P''' -zupełnych, '''NP''' -zupełnych, czy też '''PSPACE''' -zupełnych. To samo odnosi się do |
| | języków trudnych (tzn. klasa języków '''P''' -trudnych, itd.). |
| }} | | }} |
|
| |
|
| {{dowod|[Uzupelnij]|| | | {{przyklad|2.1|| |
| | | Rozważmy języki: |
| Przypuśćmy, że jest przeciwnie niż mówi teza czyli
| | <center><math>\displaystyle |
| </math>_{k} _{n>k} a_n <nowiki>=</nowiki> 0<math>. Weźmy najmniejsze takie | | L_1=\left\{1^i 2^j 3^k\: k=i\cdot j,\: i,j\geqslant 1\right\}\quad,\quad |
| </math>k<math> i nazwijmy go </math>k_0<math>. Mamy zatem </math>a_{k_0} <nowiki>=</nowiki> 0<math> oraz wszystkie
| | L_2=\left\{1^i 2^j 4^{2k}\: k=i\cdot j,\: i,j\geqslant 1\right\}. |
| późniejsze wyrazy </math>a_i <nowiki>=</nowiki>1<math> dla </math>i>k_0<math>. Rozwijana liczba </math>x<math>
| | </math></center> |
| spełniać będzie dla każdego </math>p 1<math> nierówność
| |
| [[##tw_nierownosc_tw_rozwiniecie|Uzupelnic tw_nierownosc_tw_rozwiniecie|]] czyli zachodzić będzie:
| |
| | |
| </math></center>b_{k_0 -1} + {1}{2^{k_0 +2}} + ... +{1}{2^{k_0 +p+1}}
| |
| x b_{k_0 -1} + {1}{2^{k_0 +2}} + ...
| |
| +{1}{2^{k_0+ p+1}} + {1}{2^{k_0 p+ 1}}
| |
| <center><math>
| |
| | |
| Liczbą, która spełnia wszystkie te nierówności jest </math> b_{k_0 -1} +
| |
| {1}{2^{k_0 +1}}<math>. Mamy zatem zamiast rozwinięcia, które
| |
| nieformalnie zapiszemy jako </math>a_0 ... a_{k_0 -1} 0 1 1 1 ...<math>
| |
| rozwinięcie </math>a_0 ... a_{k_0 -1} 1 0 0 0 ...<math>. To właśnie to
| |
| drugie rozwinięcie zostanie znalezione przez procedurę
| |
| rekurencyjną przedstawioną w twierdzeniu [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]].
| |
| }}
| |
|
| |
|
| {{twierdzenie|[Uzupelnij]||
| | Języki: <math>\displaystyle L_1</math> oraz <math>\displaystyle L_2</math> wyglądają na bardzo podobne, zatem wydaje się, że <math>\displaystyle L_1 \propto L_2</math> oraz <math>\displaystyle L_2 \propto L_1</math>. Uzasadnienie tego faktu jest prawie natychmiastowe. |
| Istnieje bijekcja pomiędzy odcinkiem </math>[0;1)<math>
| |
| a zbiorem
| |
| </math>a 2^{{N}}: _{k} _{n>k} a_n <nowiki>=</nowiki> 0 | |
| }} | | }} |
| | Konstruujemy deterministyczną maszynę Turinga która działa w |
| | następujący sposób: |
| | # {{kotwica|prz.1|}} Jeśli słowo wejściowe jest puste, to stop. |
| | # Przejdź do prawego ogranicznika. Jeśli przy ograniczniku nie występuje symbol <math>\displaystyle 4</math>, to wykonaj krok [[#prz.1|1]]. |
| | # Jeśli w słowie wejściowym występuje symbol <math>\displaystyle 4</math>, to sprawdź, czy słowo przetwarzane jest postaci <math>\displaystyle \sharp w 4^s \sharp</math>, gdzie <math>\displaystyle s\geqslant 1</math> oraz <math>\displaystyle w\in (\Sigma_I\setminus \left\{4\right\})^*</math> oraz czy dodatkowo <math>\displaystyle s</math> jest liczbą parzystą. Jeśli nie, to wykonaj krok [[#prz.1|1]]. |
| | # Zamień słowo <math>\displaystyle 4^s</math> na słowo <math>\displaystyle 3^{\frac{s}{2}}\sharp^{\frac{s}{2}}</math> i wykonaj krok [[#prz.1|1]]. |
| | # Przejdź nad pierwszy symbol po lewym ograniczniku i zatrzymaj się. |
|
| |
|
| {{dowod|[Uzupelnij]||
| | W ten sposób zawsze przeprowadzamy konfigurację <math>\displaystyle \sharp s_0 w \sharp |
| | | </math> na konfigurację <math>\displaystyle \sharp s_1 w' \sharp</math>, przy czym <math>\displaystyle w'=1^i 2^j 3^k</math> |
| Bijekcja jest zdefiniowana przy pomocy techniki wprowadzonej w
| | tylko, gdy <math>\displaystyle w=1^i 2^j 4^{2k}</math>. Zatem <math>\displaystyle w\in L_2</math> wtedy i tylko wtedy, gdy <math>\displaystyle w'\in L_1</math>. Wykazaliśmy, że <math>\displaystyle L_2 \propto L_1</math>. |
| twierdzeniu [[##thm:rozwiniecie|Uzupelnic thm:rozwiniecie|]]. Istnienie funkcji przypisującej
| |
| liczbie rzeczywistej <math>x</math> jej rozwinięcie dwójkowe zostało tam
| |
| opisane. Własność tego rozwinięcia
| |
| <math>\forall_{k} \;\; \exists_{n>k} \;\; a_n = 0</math> została pokazana w | |
| twierdzeniu [[##thm:rozwiniecie2|Uzupelnic thm:rozwiniecie2|]]. Pozostaje uzasadnić
| |
| iniektywność takiego przypisania. Niech <math>x \neq y</math>. Załóżmy,
| |
| że <math>x < y</math>. Rozważmy zatem ciągi <math>a</math> oraz <math>a'</math> rozwinięć dwójkowych
| |
| <math>x</math> i <math>y</math>. Nazwijmy ciągi ich sum częściowych odpowiednio przez <math>b</math> i <math>b'</math>.
| |
| Ciągi sum wyznaczają te liczby czyli <math>[ b ]_{\simeq} = x , [b']_{\simeq} =
| |
| y</math>. Ciągi <math>b</math> i <math>b'</math> muszą być różne bo inaczej wyznaczałyby te
| |
| same liczby. W takim razie ciągi rozwinięć <math>a</math> i <math>a'</math> muszą być
| |
| różne.
| |
| }}
| |
|
| |
|
| Powyższe twierdzenie będzie miało fundamentalne znaczenie w
| | Warunek <math>\displaystyle L_1 \propto L_2</math> otrzymujemy w sposób identyczny. Trzeba |
| teorii mocy o którym mowa będzie w wykładzie 9. Pokazuje bowiem że
| | tylko wypisać odpowiednią ilość symboli <math>\displaystyle 4</math> (a wiemy już, jak |
| liczby rzeczywiste są równoliczne ze zbiorem <math>2^\mathbb{N}</math>.
| | konstruować liczbę <math>\displaystyle 2n</math>, mając dane <math>\displaystyle n</math>). |