Interpretacja abstrakcyjna jest bardzo ogólną koncepcją i w zależności od tego, kogo zapytasz, otrzymasz różne wyjaśnienia, ponieważ wszechstronne koncepcje dopuszczają wiele perspektyw. Widok w tej odpowiedzi jest mój i nie zakładam, że jest ogólny.
Twardość obliczeniowa jako motywacja
Zacznijmy od problemów decyzyjnych, których rozwiązania mają następującą strukturę:
Procedura ma często dolną granicę twardości NP. Sprawdzanie właściwości semantycznych programów jest nawet nierozstrzygalne. Co możemy zrobić?
Zróbmy dwie obserwacje. Po pierwsze, czasami możemy rozwiązać określone przypadki problemów, nawet jeśli nie jesteśmy w stanie rozwiązać ogólnego problemu. Po drugie, aplikacje takie jak optymalizacja kompilatora tolerują aproksymację, ponieważ kompilator, który eliminuje niektóre, ale nie wszystkie źródła nieefektywności, jest użyteczny. Aby sprecyzować tę intuicję, musimy odpowiedzieć:
- Co to znaczy formalnie rozwiązać niektóre, ale nie wszystkie przypadki problemów?
- Jakie jest przybliżone rozwiązanie problemu decyzyjnego?
Streszczenie interpretacji Pomysł 1: Zmień opis problemu
Dla mnie głównym wglądem w abstrakcyjną interpretację jest zmiana sformułowania problemu, aby zamiast pytać o odpowiedź Tak / Nie , prosimy o odpowiedź Tak / Nie / Może .
W rezultacie każdy problem ma trywialne, stałe rozwiązanie czasowe ( być może wyjście ). Możemy teraz skupić się na opracowaniu procedury, która nie zawsze daje Może . Aby powrócić do powyższych pytań, rozwiązanie, które działa w przypadku niektórych problemów, to takie, które powraca Może w przypadku problemów, których nie może rozwiązać. Co więcej, być może jest to przybliżenie odpowiedzi Tak i Nie, ponieważ nie jesteśmy pewni, jaka jest odpowiedź.
Ten pomysł nie ogranicza się do problemów decyzyjnych. Rozważ te problemy dotyczące programów.
- Które wiersze kodu w programie są martwe (nigdy nie zostaną wykonane)?
- Które zmienne w programie mają stałe wartości?
- Które twierdzenia w programie są naruszane?
We wszystkich tych sytuacjach możemy przejść od rozwiązania dokładnego do przybliżonego, rozważając rozwiązania, które mają pewną niepewność.
- Co to jest zestaw wierszy kodu, który jest martwy?
- Co to jest zestaw zmiennych w programie, które mają stałe wartości?
- Jaki zestaw twierdzeń w programie nie jest naruszony?
Wyprodukowane zestawy nie muszą być największe. Ten pomysł jest bardzo ogólny i dotyczy problemów, które mają niewiele wspólnego z analizą programu.
- Zamiast dodawać m i n, możemy poprosić o zasięg [ a , b ] w której leży suma.
- Zamiast mnożenia m przez n możemy poprosić k bity wyniku (konkretne, typowe przykłady to znak lub bit parzystości).
- Zamiast pytać o satysfakcjonujące przypisania do formuły, możemy poprosić o zestaw zawierający satysfakcjonujące przypisania.
Zauważ, że nie tylko zmieniliśmy problem, ale także ściśle go uogólniliśmy, ponieważ rozwiązanie pierwotnego problemu jest nadal rozwiązaniem zmodyfikowanego problemu. Najważniejsze pytanie, na które obecnie nie ma odpowiedzi, brzmi: jak znaleźć przybliżone rozwiązanie?
Streszczenie Interpretacja Pomysł 2: Charakterystyka stałoprzecinkowa oryginalnych rozwiązań
Drugim wielkim pomysłem jest zaobserwowanie, że zestaw rozwiązań wielu problemów charakteryzuje się jako stały punkt w sieci rozwiązań kandydujących. Na przykład załóżmy, że masz wykres i chcesz wiedzieć, czy wierzchołekt jest osiągalny z wierzchołka s. Możemy to rozbić na znalezienie zestawuR e a c h (s) wszystkich wierzchołków osiągalnych z s a następnie sprawdzanie, czy tjest w tym zestawie. Możemy dalej to zaobserwowaćR e a c h (s) jest najmniejszym rozwiązaniem równania:
X= { s } ∪ { w | v jest w X i ( v , w ) jest krawędzią }
Wartość charakterystyki punktu stałego polega na tym, że dokładne rozwiązanie można postrzegać jako granicę szeregu przybliżeń. W tym przykładzien-tym elementem serii jest zbiór wierzchołków wykresu osiągalny w n kroki od s a aproksymacja jest podzbiorem tych wierzchołków.
Charakterystyka punktu stałego jest decyzją projektową. Istnieje wiele różnych charakterystyk zestawu rozwiązań. Każdy z nich może mieć inne zalety. W przypadku języków programowania mamy więcej struktury niż tylko posługiwanie się wykresem. Równania punktów stałych, na których nam zależy, można zdefiniować przez indukcję struktury programu wejściowego. Ten pomysł nie jest specyficzny dla programów. Stosując abstrakcyjną interpretację do elementów języka strukturalnego, takich jak gramatyka, formuła logiczna, program, wyrażenie arytmetyczne itp., Możemy zdefiniować punkty stałe poprzez indukcję struktury jakiegoś obiektu syntaktycznego.
Podając tę charakterystykę punktu stałego, zobowiązujemy się do określonego sposobu obliczania rozwiązań. W rzeczywistości nie obliczymy tego stałego punktu, ponieważ jest on co najmniej tak trudny jak rozwiązanie pierwotnego problemu, co prowadzi nas do następnego kroku.
Streszczenie interpretacji Pomysł 3: Przybliżenie punktu stałego
Zamiast obliczać stały punkt funkcji fa w kratkę L., możemy obliczyć stały punkt innej funkcji sol w kratkę M.. Pod warunkiem spełnienia określonych warunków dotyczącychM. do L., rozwiązanie obliczone w M. gwarantuje się, że jest przybliżeniem rozwiązania w L.. Jest to jeden z podstawowych wyników abstrakcyjnej interpretacji, zwany zwykle twierdzeniem o przeniesieniu punktu stałego . Warunek solidności wynika albo z połączeń Galois, albo ze słabszych ustawień obejmujących funkcje abstrakcji lub konkretyzacji, lub relacji poprawności.
Twierdzenie o przeniesieniu punktu stałego gwarantuje, że nie musisz udowadniać, że obliczasz przybliżenie dźwięku przy każdym projektowaniu analizy przybliżonej. Musisz tylko udowodnić, że kratyL. (zawierający oryginalne rozwiązania) i M. (zawierające przybliżenia) i funkcje fa i solspełniają pewne ograniczenia. To wielka wygrana, jeśli jesteś projektantem analizy i zależy ci na solidności.
Intuicja stojąca za przeniesieniem punktu stałego może być wnikliwa. Możemy uznać punkt stały za granicę (ewentualnie transfinitowego) łańcucha elementów. Obliczanie przybliżonych rozwiązań sprowadza się do przybliżenia tego limitu, co możemy zrobić, przybliżając elementy łańcucha.
Pojęcie przybliżenia zależy od zastosowania. Jeśli używasz zasięgu wykresu do planowania podróży, możesz zaakceptować przybliżenie, które mówi, że nie ma drogi między nimis i t nawet jeśli istnieje ścieżka, ale nie będziesz szczęśliwy, jeśli algorytm mówi, że istnieje ścieżka s do t gdzie nie ma ścieżki.
Streszczenie Interpretacja Idea 4: Algorytmy aproksymacji stałoprzecinkowej
Wszystko, co widzieliśmy do tej pory, było matematycznym wynikiem istnienia. Ostatnim krokiem jest obliczenie przybliżenia. Kiedy sieć aproksymacji jest skończona (lub jeśli warunek łańcucha rosnącego / malejącego) jest spełniony, możemy zastosować prostą procedurę iteracyjną. Jeśli sieć jest nieskończona, procedura iteracyjna może nie wystarczyć, choć obliczenie stałego punktu może być nadal rozstrzygalne. W tej sytuacji stosuje się wiele technik w celu dalszego przybliżenia rozwiązania lub przeskoczenia do konkretnego rozwiązania szybciej niż naiwny algorytm iteracji. W kontekście obliczania rozwiązania słyszysz takie terminy, jak poszerzenie , zawężenie , iteracja strategii , przyspieszenie itp.
Podsumowanie
Moim zdaniem abstrakcyjna interpretacja stanowi matematyczną podstawę pojęcia abstrakcji w taki sam sposób, jak logika matematyczna stanowi matematyczną podstawę rozumowania. Rozwiązania wielu problemów, na których nam zależy, mają charakterystykę jako punkty stałe. Ta obserwacja nie ogranicza się do problemów z językiem programowania, a nawet do informatyki. Przybliżone rozwiązania można scharakteryzować jako przybliżenia punktów stałych i są one obliczane za pomocą specjalistycznych algorytmów. Te charakterystyki i algorytmy wykorzystają strukturę wystąpienia problemu. W przypadku programów struktura ta wynika ze składni języka.
Obliczanie przybliżeń problemów, które nie mają naturalnych wskaźników, jest sztuką stale rozwijaną i udoskonalaną przez praktyków. Interpretacja abstrakcyjna jest jedną z teorii matematycznych dla nauki stojącej za tą sztuką.
Odniesienia
Istnieje kilka dobrych samouczków na temat interpretacji abstrakcyjnej, które można przeczytać.
- Przypadkowe wprowadzenie do abstrakcyjnej interpretacji , Patrick Cousot (Wspólna praca z Radhią Cousot), Warsztaty nt. Biologii systemowej i metod formalnych (SBFM'12)
- Delikatne wprowadzenie do formalnej weryfikacji systemów komputerowych poprzez abstrakcyjną interpretację , Patrick i Radhia Cousot, Marktoberdorf Summer School 2010.
- Wykład 13: Abstrakcja Część I , Patrick Cousot, Abstrakcyjna interpretacja, Kurs MIT.
- Wstęp do interpretacji abstrakcyjnej , Samson Abramsky i Chris Hankin, Abstract Interpretation of Declarative Languages, 1987.
- Abstrakcyjna interpretacja i zastosowanie do programów logicznych , Patrick i Radhia Cousot, 1992. Dwie pierwsze sekcje zawierają ogólny przegląd wysokiego poziomu z kilkoma przykładami.