Teoria obliczeń czyli czego komputery zrobić nie mogą

Podobne dokumenty
Języki, automaty i obliczenia

Maszyna Turinga języki

Imię, nazwisko, nr indeksu

Hierarchia Chomsky ego Maszyna Turinga

Obliczenia inspirowane Naturą

Efektywność Procedur Obliczeniowych. wykład 5

Modele Obliczeń. Wykład 1 - Wprowadzenie. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

Języki, automaty i obliczenia

PROBLEMY NIEROZSTRZYGALNE

Języki, automaty i obliczenia

10110 =

Dopełnienie to można wyrazić w następujący sposób:

O ALGORYTMACH I MASZYNACH TURINGA

Zadanie 4 Zadanie 5 Zadanie 6. Repetytorium z JFiZO. Jakub Michaliszyn 25 maja 2017

Dowód pierwszego twierdzenia Gödela o. Kołmogorowa

Zadanie 1. (6 punktów) Słowo w nazwiemy anagramem słowa v jeśli w można otrzymać z v poprzez zamianę kolejności liter. Niech

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

Matematyczne Podstawy Informatyki

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

(j, k) jeśli k j w przeciwnym przypadku.

Złożoność informacyjna Kołmogorowa. Paweł Parys

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Elementy Teorii Obliczeń

0 + 0 = 0, = 1, = 1, = 0.

Definicje. Algorytm to:

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Rekurencyjna przeliczalność

ZLOŻONOŚĆ OBLICZENIOWA - WYK. 2

Maszyny Turinga. Jerzy Pogonowski. Funkcje rekurencyjne. Zakład Logiki Stosowanej UAM

Rozwiązania około dwustu łatwych zadań z języków formalnych i złożoności obliczeniowej i być może jednego chyba trudnego (w trakcie tworzenia)

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Wstęp do programowania

MODELOWANIE RZECZYWISTOŚCI

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka

Alan M. TURING. Matematyk u progu współczesnej informatyki

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Logika i teoria mnogości Wykład 14

Obliczenia inspirowane Naturą

Kombinowanie o nieskończoności. 3. Jak policzyć nieskończone materiały do ćwiczeń

Minimalizacja automatów niedeterministycznych na słowach skończonych i nieskończonych

7. CIĄGI. WYKŁAD 5. Przykłady :

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

O ISTOTNYCH OGRANICZENIACH METODY

Jaki język zrozumie automat?

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

Równoliczność zbiorów

2.8. Algorytmy, schematy, programy

Złożoność obliczeniowa. wykład 1

EGZAMIN MATURALNY Z INFORMATYKI

Klasyczne i kwantowe podejście do teorii automatów i języków formalnych p.1/33

Lista zadań - Relacje

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

O LICZBACH NIEOBLICZALNYCH I ICH ZWIĄZKACH Z INFORMATYKĄ

Zapisywanie algorytmów w języku programowania

Języki programowania zasady ich tworzenia

2 Rodziny zbiorów. 2.1 Algebry i σ - algebry zbiorów. M. Beśka, Wstęp do teorii miary, rozdz. 2 11

Języki, automaty i obliczenia

Technologie informacyjne - wykład 12 -

Rodzinę spełniającą trzeci warunek tylko dla sumy skończonej nazywamy ciałem (algebrą) w zbiorze X.

LOGIKA I TEORIA ZBIORÓW

Uwaga 1. Zbiory skończone są równoliczne wtedy i tylko wtedy, gdy mają tyle samo elementów.

Napisy i ich znaczenia

Podstawy Programowania Algorytmy i programowanie

Algorytm. Krótka historia algorytmów

Zadania do Rozdziału X

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Poprawność semantyczna

Teoretyczne podstawy informatyki

Podstawy Informatyki Maszyna Turinga

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Część wspólna (przekrój) A B składa się z wszystkich elementów, które należą jednocześnie do zbioru A i do zbioru B:

Struktura danych. Sposób uporządkowania informacji w komputerze.

Matematyka dyskretna dla informatyków

Początki informatyki teoretycznej. Paweł Cieśla

O ROLI TEZY CHURCHA W DOWODZIE PEWNEGO TWIERDZENIA

Języki formalne i automaty Ćwiczenia 1

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

Topologia zbioru Cantora a obwody logiczne

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Teoria obliczeń i złożoność obliczeniowa

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

1 Działania na zbiorach

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Rodzinę F złożoną z podzbiorów zbioru X będziemy nazywali ciałem zbiorów, gdy spełnione są dwa następujące warunki.

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Metody numeryczne w przykładach

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Temperatura w atmosferze (czy innym ośrodku) jako funkcja dł. i szer. geogr. oraz wysokości.

Teoria miary. WPPT/Matematyka, rok II. Wykład 5

Metoda Tablic Semantycznych

Wykład 1: Przestrzeń probabilistyczna. Prawdopodobieństwo klasyczne. Prawdopodobieństwo geometryczne.

Odmiany maszyny Turinga. dr hab. inż. Joanna Józefowska, prof. PP 1

Zbiory, relacje i funkcje

Wprowadzenie do algorytmiki

PRZEWODNIK PO PRZEDMIOCIE

zbiorów domkniętych i tak otrzymane zbiory domknięte ustawiamy w ciąg. Oznaczamy

Transkrypt:

Teoria obliczeń czyli czego komputery zrobić nie mogą Marek Zaionc Uniwersytet Jagielloński

Materiały do wykładu: P. Odifreddi, Classical Recursion Theory, North Holland 1989. J.H. Hopcroft, J.D. Ullman Introduction to Automata Theory, Languages, and Computation, Addison-Wesley 1979 Marek Zaionc, materiały do wykładu Teoria programowania

W naszych rozważaniach będziemy abstrahować od języka programowania w jakim wyrażane będą algorytmy. Może to być język wysokiego poziomu, PASCAL, C++,... język niskiego poziomu, assembler,... abstrakcyjne urządzenie obliczające, maszyna Turinga, Posta,... funkcje rekurencyjne

Teza Churcha: Wszystkie modele obliczeń, które znamy mają taką samą jak maszyny Turinga siłę ekspresji.

Składnia każdego z formalizmów w którym wyrażane są algorytmy pozwala na konstrukcję przeliczalnego, nieskończonego zbioru algorytmów.

Przykładowo dla języka wysokiego poziomu, PASCAL, C++ możemy wygenerować przeliczalnie wiele programów.

Przykładowo dla abstrakcyjnych urządzeń obliczających możemy zbudować przeliczalnie wiele maszyn Turinga, lub maszyn Posta

Zbiór programów lub maszyn jest mocy przeliczalnej.

Zbiór funkcji jest mocy kontinuum. 2 N m N N m (2 N ) N m 2 N N m 2 N

Moc zbioru funkcji f : N N jest istotnie większa od mocy zbioru programów lub od zbioru maszyn Turinga.

MORAŁ: Większość funkcji, asymptotycznie prawie wszystkie, nie mają programów do ich obliczania. Istnieją funkcje nieobliczalne

Jak wiele jest podzbiorów liczb naturalnych dla których istnieją programy rozpoznające, które elementy należą do tych zbiorów?

MORAŁ: Większość zbiorów, które można reprezentować przez ich funkcje charakterystyczne, nie ma programów do rozstrzygania które elementy do tych zbiorów należą. Istnieją zbiory nierekurencyjne

Istnieje program, który rozpoznaje co jest programem, a co nie jest programem. ciąg znaków Yes P No

Programy możemy ponumerować. Ponumerować trzeba najpierw wszystkie słowa, a następnie uruchomić program P który będzie rozpoznawał, czy ciąg znaków jest programem czy też nie.

Istnieje program, który mając na wejściu liczbę naturalną i N zwraca i-ty program. i N Q program i Program i-ty będziemy nazywali M i lub programem o indeksie i.

Istnieje program, który mając na wejściu ciąg znaków sprawdza czy jest ten ciąg znaków programem i wtedy zwraca jego indeks. W przypadku gdy nie jest to program zwraca komunikat to nie jest program. ciąg znaków R i N to nie jest program

Problemy decyzyjne (1) Problemy dla których odpowiedziami są wyłącznie TAK lub NIE. (2) Każda instancja takiego problemu ma skończony opis.

Przykłady problemów decyzyjnych: Problem stopu Problem semantycznej równoważności programów Problem syntaktycznej równoważności programów Dziesiąty problem Hilberta Dziesiąty problem Hilberta ograniczony Problem domina (Wang) Problem odpowiedniości Posta

Będziemy w tej części mówić jedynie o programach, (maszynach Turinga) które mając na wejściu ciąg znaków w Σ odpowiadają tak/nie. Językiem takiego programu nazywamy zbiór tych słów, które on akceptuje, czyli tych słów dla których odpowiedz brzmi tak. Jeżeli M jest takim programem a S językiem to zapisujemy to L(M) = S.

Program lub maszyna decyzyjna ma własność STOPU gdy zatrzymuje się na każdym wejściu.

Zbiór S słów nad alfabetem Σ nazywamy rekurencyjnie przeliczalnym, jeżeli istnieje program (maszyna Turinga) nad Σ, który akceptuje każde słowo z S, czyli L(M) = S.

Zbiór S słów nad alfabetem Σ nazywamy rekurencyjnym, jeżeli istnieje program (maszyna Turinga) z własnością STOPU nad Σ, który akceptuje każde słowo z S czyli L(M) = S.

Klasa zbiorów rekurencyjnych jest zamknięta na sumę mnogościową i uzupełnienia. Zamknięcie na sumę pokazujemy przez sekwencyjne podłączenie maszyn (programów). Zamknięcie na uzupełnienie pokazujemy przez zamianę styków YES/NO.

Klasa zbiorów rekurencyjnie przeliczalnych jest zamknięta na sumę mnogościową. Dowód tego faktu pokazujemy przez równoległe podłączenie maszyn (programów).

Jeżeli zbiory S i \S są rekurencyjnie przeliczalne to są rekurencyjne.

Dowód podajemy przez równoległe podłączenie maszyn rozpoznających odpowiednio S i \S.

Język diagonalny Zbiór L diag = {w i Σ : w i / L(M i )}. Twierdzenie: L diag nie jest rekurencyjnie przeliczalny.

Dowód: (1) Stawiamy hipotezę, że L diag jest rekurencyjnie przeliczalny. (2) Istnieje zatem maszyna M diag rozpoznająca L diag czyli L(M diag ) = L diag (3) Maszyna M diag ma indeks (numer) i 0. (4) Stawiamy pytanie czy M i0 akceptuje słowo w i0. (5) Pokazujemy w i0 L(M i0 ) wtedy i tylko wtedy w i0 L(M i0 ).

Język uniwersalny L u L u = {Mw Σ : M jest programem i w L(M)} Język L u jest rekurencyjnie przeliczalny.

Dowód: Konstrukcja uniwersalnego symulatora maszyn Turinga.

Twierdzenie: Język L u nie jest rekurencyjny.

Dowód: 1. Hipoteza - L u jest rekurencyjny. 2. Zatem \L u też jest rekurencyjny. 3. Istnieje zatem maszyna M rozpoznająca \L u. 4. Budujemy nowy program decyzyjny (maszynę), który będzie używał M jako swojej procedury, który będzie rozpoznawał L diag.

Oto program dla L diag. (1) wczytaj słowo w. (2) policz indeks i 0 tego słowa. (3) wygeneruj i 0 -wą maszynę Turinga M i0. ( instrukcje tą wykona procedura Q. ) (4) podaj na wejście maszyny M parę M i0 w i0. jeżeli M z wejściem M i0 w i0 odpowie YES to odpowiedz YES jeżeli M z wejściem M i0 w i0 odpowie NO to odpowiedz NO

Naszą hipotezę doprowadziliśmy do sprzeczności.

Problemy rozstrzygalne i częściowo rozstrzygalne

Problem rozstrzygalny to taki, którego język kodujący jest rekurencyjny. Problem częściowo rozstrzygalny to taki, którego język kodujący jest rekurencyjnie przeliczalny.

Uniwersalny problem decyzyjny: Dany jest program M i dane jest słowo w Σ. Podejmij decyzję czy w L(M).

Problem diagonalny nie jest nawet częściowo rozstrzygalny Problem uniwersalny nie jest rozstrzygalny. Problem uniwersalny jest częściowo rozstrzygalny

Problem stopu Rozważmy język L HP = {M, x : M zatrzymuje się na x}

L u L HP TWIERDZENIE: L HP nie jest rekurencyjny (dowód pochodzi od Minsky ego). Hipoteza L HP jest rekurencyjny. Niech M HP będzie maszyną ze STO- PEM rozpoznającą L HP. Budujemy nową maszynę o nazwie N, która analizuje kody innych maszyn.

<M> N Copy <M>, <M> Yes Yes M HP No Loop

<M> N Copy <M>, <M> Yes Yes M HP No Loop Specyfikacja maszyny N. N akceptuje kod maszyny M wtw M pętli się na swoim własnym kodzie.

Problem STOPU jest nierozstrzygalny, ale jest częściowo rozstrzygalny. Problem dualny czyli problem PĘTLENIA SIĘ nie jest nawet częściowo rozstrzygalny.

Przykłady 1. Pustość lub niepustość języka. Rozważmy języki L empty = {w Σ : jeżeli maszyna M taka że w = M to L(M) = } L notempty = {M Σ : L(M) } L empty L noempty = Σ

Twierdzenie: L empty nie jest rekurencyjny.

Dowód: Stawiamy hipotezę: L empty jest rekurencyjny. Niech zatem M empty będzie maszyną ze STOPEM rozpoznającą L empty. Dokonamy konstrukcji maszyny B budującej inne maszyny. Maszyna B jest rodzajem konstruktora maszyn i działa według następującego schematu:

MASZYNA B ma na wejściu dowolny problem uniwersalny czyli parę M, w. Efektem jej działania jest wypisanie nowej maszyny M M, w B program M Maszyna B jest rodzajem pisarza programów. Napisany przez B nowy program będzie spełniał następującą specyfikacje: Jeżeli M akceptuje słowo w to M akceptuje Σ. Jeżeli M nie akceptuje słowa w to M akceptuje.

Napisane przez konstruktora B program M jest następujący: M w x M Yes Yes

M, w B Yes M M empty No Yes No

L noempty nie jest rekurencyjny.

Napiszemy program rozpoznający L noempty. Niech NEXT : N 2 N 2 będzie funkcją, która punktowi na płaszczyźnie N N przyporządkowuje następny punkt w porządku liniowym przy pomocy którego możemy liniowo przeglądać pary punktów. Łatwo napisać program, który zrealizuje funkcje N EXT.

(1) Wczytaj słowo w. (2) Sprawdź czy w jest programem przy pomocy procedury P. Jeżeli w nie było programem to zakończ i wypisz NO Jeżeli w jest programem M to kontynuuj (3) (j, k) := (0, 0); (4) Symuluj pierwsze k kroków programu M na j-tym słowie z Σ. (5) Jeżeli M akceptuje w to odpowiedz Y ES i zatrzymaj program. (6) Jeżeli M nie akceptuje w to (j, k) := NEXT (j, k); i powtarzaj 4.

Program poprawnie rozpoznaje język L noempty aczkolwiek nie ma własności STOPU.

L empty nie jest nawet rekurencyjnie przeliczalny.

Problemy decyzyjne związane z parą języków L empty i L noempty. Problem niepustości języka jest częściowo rozstrzygalny ale nierozstrzygalny. Problem pustości języka nie jest nawet częściowo rozstrzygalny

Przykład 2. Rozważmy języki L rek = {M Σ : L(M) jest rekurencyjny } L norek = {M Σ : L(M) nie jest rekurencyjny } L empty L noempty = Wszytkie programy

Przykład 3. Równoważność programów. L eq = {MN Σ : L(M) = L(N)}

Twierdzenie: L eq nie jest nawet rekurencyjnie przeliczalny. Hipoteza: Załóżmy że L eq jest rekurencyjnie przeliczalny i rozpoznawany przez M eq, czyli L(M eq ) = L eq. Ustalmy maszynę N 0, która nie akceptuje żadnego słowa. W konstrukcji posłużymy się również poznanym wcześniej konstruktorem programów B. Przy pomocy maszyn N 0, B oraz hipotetycznej maszyny M eq zbudujmy następującą maszynę:

M, w B N 0 M M eq Yes No Yes No

Twierdzenie Rice a Klasę S języków rekurencyjnie przeliczalnych nazywamy trywialną gdy S = lub S = REC. Na klasę języków należy patrzeć jak na własność języków. Klasa jest nietrywialna jeżeli nie jest trywialna.

Język L S skojarzony z klasą języków S to język wszystkich kodów maszyn Turinga, których języki leżą w S, czyli L S = {M : L(M) S}

Obserwacja: Dopełnienie nietrywialnej klasy jest klasą nietrywialną

Twierdzenie Rice a: Każda nietrywialna własność języków rekurencyjnie przeliczalnych jest nierozstrzygalna. Dowód nie wprost: Niech S będzie nietrywialną klasą. Zakładamy, że pomimo nietrywialności S istnieje dla niej maszyna M S ze STO- PEM rozpoznająca L S.

Bez szkody dla ogólności mogę założyć, że język pusty nie należy do klasy S, czyli S.

Jednocześnie z niepustości klasy S istnieje w niej język rekurencyjnie przeliczalny L 0. Niech maszyna M L0 rozpoznaje L 0 czyli L(M L0 ) = L 0.

Budujemy maszynę E będącą rodzajem pisarza programów. Pisarz E akceptuje problem uniwersalny M w i przerabia je na nowy programy M zgodnie z następującą specyfikacją: Jeżeli M akceptuje słowo w to M akceptuje L 0 S. Jeżeli M nie akceptuje słowa w to M akceptuje / S. M, w E program M

Konstrukcja programu M x w M yes M L0 Yes No Yes No

Przy pomocy programu E oraz rozpoznawacza klasy M S napiszemy program ze stopem rozwiązujący problem uniwersalny. Oto on: Yes M, w E M M S No Yes No

Twierdzenie Rice a: Wnioskowanie w stronę przeciwną jest proste. Każda trywialna własność języków rekurencyjnie przeliczalnych jest rozstrzygalna.

Mamy dwie klasy trywialne, klasę pustą i klasę pełną. Mamy: L = {M : L(M) } = L REC = {M : L(M) REC} = Maszyny Turinga Oba te języki są rekurencyjne.

Przykłady zastosowań: Szybkie dowody nierozstrzygalności semantycznych własności maszyn Turinga.

O zachowaniu się programów: Każde nietrywialne zachowanie programów jest nierozstrzygalne.

Przykład 2. Rozważmy języki L rek = {M Σ : L(M) jest rekurencyjny } L norek = {M Σ : L(M) nie jest rekurencyjny } L empty L noempty = Wszytkie programy

Przykład 4. L = {MNK : L(M) L(N) = L(K)} Czy język L jest rekurencyjny?

Twierdzenie Rice a dla języków rekurencyjnie przeliczalnych: Jakie własności powinna mieć klasa języków S aby język kodujący tą klasę L S był rekurencyjnie przeliczalny. Innymi słowy: jaka powinna być klasa S aby problem przynależności do L S był częściowo rozstrzygalny.

Warunkiem koniecznym i wystarczającym na to by problem przynależności do L S był częściowo rozstrzygalny jest: Klasa S jest monotoniczna. Każdy język z S posiada podjęzyk skończony w S. Klasa S posiada numerator języków skończonych należących do S.