Metody Analizy Programów Wykład 02 Grażyna Mirkowska PJWSTK 26 październik 2000 Metody Analizy Programów Wykład 02
Semantyka Programów Deterministycznych Z punktu widzenia maszyny realizującej program Stan pamięci Stan pamięci P Z punktu widzenia użytkownika. Wyniki Dane Ale ... Program = Struktura Danych + Algorytm (N. Wirth) W dowolnej strukturze danych M program wyznacza funkcję częściową : PM : W(M) W(M) gdzie W(M) jest zbiorem wszystkich wartościowań rozważanej struktury. Metody Analizy Programów Wykład 02
Instrukcja Przypisania Składnia x := t zmienna term(wyrażenie algebraiczne x:= t Np.: (x+y) - z f(x,y) x:= f((x+y)-z, y) Semantyka Niech M będzie strukturą danych a v ustalonym wartościowaniem, wtedy v : x y z x := t v ‘ : x y z a t M(v) (x:=t) M (v) = v’ wttw v’(x)= tM(v) v’(z)=v(z) dla z x odwzorowanie częściowe Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Przykłady v : x y z x := 7 v ‘ : x y z a b c 7 b c v : x y z x := x+y v ‘ : x y z a b c a+b b c Czy możnaby napisać, że po wyk. podstawienia x = (x+y ) ? v : p q r p := (q and p) or not p v ‘ : p q r 1? (p q) p := (q and p) or not p p warunek początkowy warunek końcowy Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Twierdzenie: Dla dowolnego termu t i dowolnej formuły a : (x := t) a(x) a( x/ t) Zagadka (która z zależności jest prawdziwa?) a(x) x := t a( x/t) warunek początkowy warunek końcowy a( x/t) x := t a(x) Popatrzmy: Jeżeli na początku spełniony jest warunek y = x+3( to jest nasz warunek początkowy), to po wykonaniu instrukcji x := 5 zmenia się tylko wartość zmiennej x , natomiast nic nie wiem o zależności między x a y po wykonaniu tego przypisania! Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Inny przykład: warunek początkowy program warunek końcowy x > 6 x:= x+1 x > 7 Rzeczywiście: skoro x>6, tzn. x+1>7, więc jeśli zastąpię term (x+1) przez x, otrzymam warunek x>7. xs >6 , to po wykonaniu xn := xs +1 otrzymamy xn>7 a(x) ( x:= x+1) a(x/x-1) a(x/x+1) (x:= x+1) a(x) Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Złożenie programów Schemat blokowy programu (P1; P2) Składnia Jeżeli P1 i P2 są programami, to P= begin P1; P2 end jest też programem. Schemat blokowy P1 Semantyka (przy ustalonej strukturze danych) x y z ... P1; P2 x y z ... a b c a2 b2 c2 wttw istnieją takie a1, b1, c1 ... takie, że x y z ... P1 x y z ... a b c a1 b1 c1 oraz x y z ... P2 x y z ... a1 b1 c1 a2 b2 c2 Schemat blokowy P2 PM(v) = P2M (P1M (v)) Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Przykłady Niech P będzie programem, a M ustaloną strukturą danych. P: begin y := 2*x; x:= x* x; x := x+2y +7; y := x/y end Kolejne wartościowania, to v : x y x y x y x y a b a 2a a2 2a a2+4a+7 2a v’ : x y a2+4a+7 (a2+4a+7)/2a P: begin aux := x; x := y; y := aux; end Własności kolejno uzyskiwanych stanów: x=a y=b x=b x=b y=b aux=a aux=a y=a Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Twierdzenie Dla dowolnej formuły a, dla dowolnych programów P1, P2 i w dowolnej strukturze danych mamy (P1 ; P2) a P1 ( P2 a) Wartość formuły a po wykonaniu programu begin P1; P2 end jest taka sama jak wartość formuły (P2 a) po wykonaniu programu P1 w dowolnej strukturze danych i przy dowolnym wartościowaniu początkowym. Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Instrukcje warunkowe Schemat blokowy programu if g then P1 else P2 fi. Składnia: if g then P1 else P2 fi Semantyka (przy ustalonej strukturze M): v: x y z if g then P1 else P2 fi x y z a b c a3 b3 c3 wttw x y z P1 x y z o ile v |= g a b c a3 b3 c3 albo x y z P2 x y z o ile v |=g a b c a3 b3 c3 g NIE TAK P1 P2 P1M (v), gdy v|=g PM(v) = P2M (v), gdy v |=g Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Przykład Własności kolejno uzyskiwanych stanów obliczenia x=a m= max(x,y) m = max(x,y,z) y=b x=a, y=a,z=c x=a,y=b, z=c z=c P:begin if x>y then m := x else m := y fi; if m <z then m := z fi end Twierdzenie: Dla dowolnego programu postaci P=if g then P1 else P2 fi ,dla dowolnej formuły a mamy P a g (P1 a) g (P2 a) W każdej strukturze danych, jeśli a. jest spełniona po wykonaniu programu P dla wartościowania początkowego v, albo warunek g jest spełniony w wartościowaniu v i po wykonaniu programu P1 otrzymujemy stan spełniający a., albo warunek g nie jest spełniony ale po wykonaniu P2 spełniony jest warunek a. Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Instrukcja pętli TAK NIE Składnia: while g do P od, gdzie g jest warunkiem booleowskim, a P programem P Semantyka : (rozważmy wartościowanie początkowe v w pewnej strukturze M) x y z ... gdy v |= - g a b c x y z ... while g do P od a b c P x y z ... while g do P od a1 b1 c1 itd. ... Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Przykład Rozważmy poniższy program P w strukturze liczb naturalnych. Własności kolejno uzyskiwanych stanów w czasie wykonania programu P: i jest liczbą naturalną t jest liczbą nieparzystą s jest sumą kolejnych liczb nieparzystych P: begin t :=1; s := 0; i :=1; while i < n+1 do s := s + t; t := t + 2; i := i + 1 od; end Co robi program P? Zauważmy, że na początku każdej iteracji mamy : t = 2i-1 s= 1+3 + 5 + ...+ (2i-3) = S {(2j-1) : j=1, ..., i-1} Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 v, gdy v |= -g while g do P od M(v) = Pi(v), gdzie i jest najmniejszą liczbą naturalną taką, że Pi(v) jest określone i Pi(v)|= -g oraz Pj(v) |= g dla j=1, 2,..., (i-1). P: begin s:= 1; k := 1; while k < n do k := k+1; s := s * k od end Jaka jest najmniejsza liczba iteracji potrzebna aby warunek pętli nie był spełniony? Oczywiście potrzeba n-1 iteracji! Po n-1 iteracjach instrukcji (k:=k+1; s := s*k), k osiągnie wartość n a s wartość n! Zatem program P oblicza silnię liczby n dla n>1. Metody Analizy Programów Wykład 02
Metody Analizy Programów Wykład 02 Twierdzenie Dla dowolnego programu P, dowolnych formuł a i g , następująca równoważność jest prawdziwa w każdej strukturze danych: while g do P od a = (-g a) (g P( while g do P od a)) Wynika stąd natychmiast, że następująca implikacja jest prawdziwa: g (P g ) (P2 g) (P3 g) ... (Pi (-g a)) while g do P od a Tzn. jeśli g jest spełniona przez wartościowanie początkowe oraz po piewszej iteracji g jest spełniona oraz po drugiej iteracji g jest spełniona itd. aż do i-1-szej iteracji ale po i-tej iteracji g nie jest spełniona i zachodzi własność a wtedy własność a jest prawdziwa po wykonaniu pętli. Metody Analizy Programów Wykład 02