Weryfikacja wspomagana komputerowo wykład 12 Interpretacja abstrakcyjna II
Źródła F. Nielson, H.R. Nielson, C. Hankin, Principles of Program Analysis, Springer, 2005. http://www.imm.dtu.dk/~riis/ppa/slides4.pdf N. D. Jones, F. Nielson, Interpretation: a Semantics-Based Tool for Program Analysis. Handbook of Logic in Computer Science, tom 4, str. 527-636, 1995. V. D'Silva, D. Kroening, G. Weissenbacher, A Survey of Automated Techniques for Formal Software Verification. IEEE Trans. on CAD of Integrated Circuits and Systems 27 (7):1165-1178, 2008.
najmniej informacji najwięcej informacji
Dziedziny abstrakcyjne
Dziedziny nie-relacyjne znaki przedzialy P(, 0, +) [n, m] parzystość kongruencja modulo k
Dziedziny relacyjne precyzja DBM (macierze ograniczeń różnic) ośmiokąty ośmiościany x y c + x + y c + x 1... + x n c wielościany a 1 x 1 +... + a n x n c... grafy
Analiza kształtu a i b nie wskazują tej samej lokacji x i y mogą wskazywać tę samą lokację
Składanie analiz złożenie produkt tensor przestrzenie funkcyjne
Semantyka abstrakcyjna
S = {A, B, C, D, E, F, G} State = S Store Store = Var Val
semantyka konkretna semantyka abstrakcyjna jak skonstruować semantykę abstrakcyjną?
Dziedziny semantyka konkretna V = Store = Var Z semantyka abstrakcyjna L = Var {, even, odd, }
Semantyka abstrakcyjna odd, even, odd even even odd
semantyka konkretna V = Store = Var Z chcemy uzyskać zgodność semantyk semantyka abstrakcyjna L = Var {, even, odd, }
Funkcja reprezentacji semantyka konkretna V = Store = Var Z β : V L monotoniczna semantyka abstrakcyjna L = Var {, even, odd, }
Funkcja reprezentacji semantyka najlepsze przybliżenie konkretna V = Store = Var Z β : V L monotoniczna β(z) = even odd jeśli z parzyste jeśli z nieparzyste semantyka abstrakcyjna L = Var {, even, odd, }
Funkcja reprezentacji semantyka konkretna V = Store = Var Z β : V L monotoniczna β(z) = {even} {odd} jeśli z parzyste jeśli z nieparzyste semantyka abstrakcyjna L = Var {, even, odd, } P(even, odd)
7 22 β β odd even β nie zawsze jest homomorfizmem!
β nie zawsze jest homomorfizmem! [n 1,m 2] m := n + m [n 1,m 1] β β m := n + m [n +,m ] [n +,m ] [n +,m ]
Funkcja abstrakcji semantyka konkretna P(V ) abstrakcja α : P(V ) L semantyka abstrakcyjna L = Var {, even, odd, }
standardowa semantyka semantyka abstrakcyjna
semantyka akumulacyjna standardowa semantyka semantyka abstrakcyjna
{5} {5, 16, 8, 4, 2} {16, 8, 4, 2} {1} {5} {16} {8, 4, 2, 1}
odd even odd odd even
Sprzężenie Galois
Sprzężenie Galois α - funkcja abstrakcji γ - funkcja konkretyzacji l γ(α(l)) α(γ(m)) m
Sprzężenie Galois α - funkcja abstrakcji γ - funkcja konkretyzacji monotoniczne l γ(α(l)) α(γ(m)) m
Sprzężenie Galois α - funkcja abstrakcji γ - funkcja konkretyzacji monotoniczne l γ(m) α(l) m
Dziedzina abstrakcyjna i konkretna zbiór wartości reprezentowanych P(V ) L najdokładniejsza abstrakcja
Przykład P(Z) Przedzialy α(x) =najmniejszy przedział zawierający X γ(i) =I
Różne dziedziny abstrakcyjne Dziedzina M jest bardziej abtrakcyjna (mniej dokładna) niż L
Przykład Przedzialy brakuje -+
Funkcja reprezentacji β indukuje sprzężenie P(V ) L α(x) = {β(v) v X} γ(l) = {v V β(v) l}
Przykład β : Z {, 0, +} P(V ) P({, 0, +}) α(x) ={β(z) z X} γ(s) ={z Z β(z) S}
Przykład β : Z {, 0, +} P({, 0, +}) P(V ) P({, 0, +}) α(x) ={β(z) z X} γ(s) ={z Z β(z) S}
Włożenie Galois α - funkcja abstrakcji γ - funkcja konkretyzacji l γ(α(l)) α(γ(m)) = m
Redukcja eliminacja zbędnych elementów abstrakcyjnych ζ(m) ={m γ(m )=γ(m)}
Właściwe pojęcie dobre własności matematyczne lewy sprzężony zachowuje kresy górne prawy sprzężony zachowuje kresy dolne jednoznaczność istnienie sprzężonego, gdy funkcja monotoniczna zachowuje kresy górne/dolne
Właściwe pojęcie równoważne definicje: domknięcie rodziny Moore a sprzężenia dobrze się składają co pozwala budować dokładniejsze analizy z prostszych analiz składowych sprzężenie indukuje najdokładniejszą semantykę abstrakcyjną
P(Z) Przedzialy
Bezpieczna aproksymacja P(Z) P(op) P(Z) op : Z Z P(op) : P(Z) P(Z) α γ P(even, odd) P(Z) op P(op) P(even, odd) P(Z) α α P(even, odd) op P(even, odd)
Najdokładniejsza aproksymacja P(Z) P(op) P(Z) op := α P(op) γ γ α P(even, odd) P(Z) op P(op) P(even, odd) P(Z) α α P(even, odd) op P(even, odd)
Najdokładniejsza aproksymacja P(Z) P(op) P(Z) op := α P(op) γ γ α P(even, odd) P(Z) op P(op) P(even, odd) P(Z) jak obliczyć op? α α P(even, odd) op P(even, odd)
P(op) P(V ) P(V ) α α L op L
Przykład
+ : Z Z Z P(op) P(V ) P(V ) α α L op L
Poszerzanie/zwężanie
Krata zupełna L S f : L S L S
najmniej informacji najwięcej informacji
Punkty stałe f(x) x x f(x)
Poszerzanie f(x) x
(a n ) a, b ab jest skończony... a 3 = a 2 f(a 2 )... f(a i ) a i f(a 2 ) a 2 = a 1 f(a 1 )... f(a 1 ) f 3 ( ) a 1 = f( ) f 2 ( ) f( )
Przykład K - stałe liczbowe występujące w programie =
Zwężanie [z 1, ], [z 3, ], [z 3, ],... z 1 <z 2 <z 3 <...