Niniejszy projekt obejmuje fragmenty teorii automatów. W teorii
Transkrypt
Niniejszy projekt obejmuje fragmenty teorii automatów. W teorii
Nr wniosku: 200046, nr raportu: 19300. Kierownik (z rap.): dr Paweł Parys Niniejszy projekt obejmuje fragmenty teorii automatów. W teorii automatów poszukuje si˛e modeli automatów, które z jednej strony dobrze opisuja˛ ciekawe procesy, a z drugiej strony sa˛ na tyle proste, że rozstrzygalne sa˛ podstawowe problemy obliczeniowe ich dotyczace. ˛ Przykładowo, z naszego punktu widzenia program komputerowy jest obiektem zbyt skomplikowanym do analizy. Program taki możemy uruchomić i obserwować jak si˛e zachowuje, ale niewiele wi˛ecej da si˛e z nim zrobić. Tymczasem cz˛esto chcielibyśmy si˛e upewnić co do pewnych własności programu, dotyczacych ˛ jego poprawności, na przykład, że po otwarciu pliku zawsze nast˛epuje zamkni˛ecie tego pliku. Możemy sprawdzić ta˛ własność wielokrotnie uruchamiajac ˛ program i patrzac, ˛ że zawsze tak robi, ale mimo to nie mamy pewności, że za kolejnym razem także tak b˛edzie, na przykład gdy użytkownik wpisze jakieś dziwne dane. Aby mieć pewność, musimy przeanalizować kod programu, a nie tylko obserwować jego działanie. W dodatku, aby była możliwa jakaś sensowna automatyczna analiza tego kodu, musi być on najpierw uproszczony. Jako wst˛epny etap takiej analizy, z programu zostana˛ usuni˛ete pewne szczegóły; zapomnimy o tym, jakie konkretnie obliczenia wykonuje, itp. B˛edziemy wiedzieli tylko przez jakie po kolei instrukcje program przechodzi, nie wiedzac ˛ co te instrukcje tak naprawd˛e robia.˛ W ten sposób dostajemy automat: ma on najcz˛eściej skończenie wiele stanów (czyli miejsc, w których wykonanie programu obecnie si˛e znajduje), mi˛edzy którymi istnieja˛ jakieś przejścia, mówiace ˛ jaki stan może być nast˛epny. Zauważmy, że instrukcje niekoniecznie sa˛ wykonywane po kolei od poczatku ˛ do końca, gdyż w programie moga˛ być p˛etle, jak również instrukcje warunkowe (if-y); w szczególności może być wiele nast˛epników danego stanu. Majac ˛ dany taki automat, możemy pytać o jakieś jego własności, zapewne zapisane w jakiejś logice (takie jak wspomniana własność, że po otwarciu pliku zawsze nast˛epuje zamkni˛ecie tego pliku). Myślimy tutaj o tym, że chcielibyśmy mieć program, który dostajac ˛ automat oraz formuł˛e logiczna˛ sprawdza, czy ta formuła jest zawsze spełniona dla tego automatu (jest to tak zwany problem spełnialności). To czy taki program może istnieć, czy nie, zależy od tego na jakie konkretnie automaty i formuły logiczne pozwalamy. Oczywiście im prostsze automaty i formuły logiczne, tym łatwiej można stworzyć taki program. Z drugiej strony chcemy pozwalać na jak najbardziej skomplikowane automaty, które moga˛ jak najwierniej odzwierciedlać symulowany program, a także na jak najbardziej skomplikowane formuły logiczne, b˛edace ˛ w stanie wyrazić jak najwi˛ecej interesuja˛ cych własności, które ktoś chciałby sprawdzać. Jeśli jednak dozwolimy na zbyt skomplikowane automaty badź ˛ zbyt skomplikowane formuły, to nasz problem spełnialności stanie si˛e nierozstrzygalny. Nierozstrzygalność oznacza, że nie istnieje program, który dany problem rozwiazuje ˛ (i w pewnych sytuacjach można rzeczywiście udowodnić, że żaden program nie jest w stanie wykonać jakiegoś zadania). Szczególna˛ logika˛ do służac ˛ a˛ do opisywania własności automatów jest logika˛ MSO+U. Ciekawym jej elementem jest kwantyfikator U, który jest w stanie wyrazić, że pewne wielkości sa˛ ograniczone, badź ˛ nieograniczone. Ma to głównie sens dla automatów, które działaja˛ w nieskończoność (automat taki może symulować zachowanie jakiegoś serwera, którego działanie si˛e nie kończy, lecz odpowiada on nieustannie na otrzymywane zapytania). Możemy na przykład chcieć wyrazić, że rozmiary kolejno wysyłanych przez serwer odpowiedzi b˛eda˛ ograniczone, a nie b˛eda˛ rosły w nieskończoność. Logika MSO+U została zaproponowana w roku 2004, lecz do tej pory nie było wiadomo, czy problem spełnialności dla niej jest rozstrzygalny. Udało nam si˛e odpowiedzieć na to pytanie, niestety negatywnie: udowodniliśmy, że problem ten jest nierozstrzygalny. Choć odpowiedź taka nie daje jakichkolwiek nowych możliwości w praktyce, to odpowiada na istotne pytanie otwarte i poszerza nasze zrozumienie rzeczywistości. Sugeruje też, że trzeba rozważać inne (słabsze) logiki. Istotnie, dla pewnych fragmentów MSO+U problem spełnialności jest rozstrzygalny; my także w ramach naszego projektu zajmowaliśmy si˛e takimi fragmentami. Badaliśmy także automaty ze stosem wyższego rz˛edu; sa˛ to automaty symulujace ˛ programy, w których procedury moga˛ otrzymywać inne procedury jako argumenty. Jest to tak zwana rekurencja wyższego rz˛edu i wyst˛epuje w wielu współczesnych j˛ezykach programowania. Dla tych automatów udało nam si˛e stworzyć algorytm rozstrzygajacy ˛ tzw. problem przekatniowy. ˛ Ogólnie rzecz ujmujac, ˛ problem ten pyta, czy może si˛e zdarzyć, że każde zdarzenie z zadanego zbioru zdarzeń wystapi ˛ dowolnie wiele razy. Pytanie to jest naturalne samo w sobie (można si˛e spodziewać, że ktoś b˛edzie chciał zapytać właśnie o taka˛ własność dla jakiegoś automatu), jak również ujawnia si˛e ono jako składowa innych problemów. Dzi˛eki naszemu algorytmowi dostajemy wi˛ec możliwość obliczania paru innych rzeczy dla automatów ze stosem wyższego rz˛edu.