INF3140/4140: Programanalyse Uke 4, side 1.
Hvordan sjekke egenskaper ved programmer? Testing eller debugging øker tilliten til programmet ved prøving, men gir ingen garanti for korrekthet Operasjonell resonnering utprøver alle historiene til et program Formell analyse : Metode for å regne på egenskaper ved et program uten å prøve historiene én og én En test kan påvise feil, men aldri påvise korrekthet! Uke 4, side 2.
Tilstander En tilstand i et program består av verdier knyttet til programvariable. F.eks. {x == 2 y == 3} Tilstandsrommet til et program er gitt ved de forskjellige verdiene som de deklarerte variablene kan ta Sekvensielt program: en tråd opererer på sitt eget tilstandsrom Tilstanden endres v.h.a. tilordninger Eksempel {x == 5 y == 5}x = x 2;{x == 10 y == 5}y = y 2;{x == 10 y == 10} Uke 4, side 3.
Programeksekvering Gitt programmet S : S 1 ; S 2 ;... ; S n ; som starter i en tilstand p 0 : p 0 p 1 p 2 p n 1 p n S 1 S2... Sn Der p 1, p 2,...p n er tilstandene underveis i eksekveringen Dette kan dokumenteres ved: {p 0 }S 1 {p 1 }S 2 {p 2 }... {p n 1 }S n {p n } p 0, p n utgjør en ekstern spesifikasjon av programmet: {p 0 }S{p n } p 0 kalles gjerne starttilstanden og p n sluttilstanden Eksemplet fra forrige foil: {x == 5 y == 5}x = x 2;y = y 2;{x == 10 y == 10} Uke 4, side 4.
Predikater (Betingelser) Vi ønsker gjerne å si noe mer generelt om programmer, f.eks. {x == y}x = x 2;y = y 2;{x == y} Vi snakker ikke nødvendigvis om bestemte verdier avxogy, men om relasjoner mellom variablenes verdier Hvis relasjonen x == y holder når programmet starter, vil x == y også holde når programmet terminerer Da må dette også holde for bestemte initialtilstander som oppfyller relasjonen, f.eks. x == y == 5 Skal se på et system for å regne på slike relasjoner Uke 4, side 5.
Predikater Et predikat P kan betraktes som sett av tilstander som gjør P sann: x == y: Alle tilstander der x har samme verdi som y x y: Alle tilstander der x er mindre enn eller lik y x == 2 y == 3: Bare én tilstand (hvis x og y er eneste variable) true: Alle tilstander false: Ingen tilstander Eksempel {x == y}x = x 2;{x == 2 y}y = y 2;{x == y} Uke 4, side 6.
Parallell eksekvering Parallelt program: Flere tråder opererer på felles tilstandsrom. Oppdateringene til x og y kan gjøres i parallell co < x = x 3; > < y = y 2; > oc Alle parallelle eksekveringer kan skrives som en sekvens av atomære operasjoner på tilstandsrommet (gir en historie) Gir to mulige historier for programmet over Hvis n prosesser gjør m atomiske operasjoner har vi generelt: (n m)! m! n Uke 4, side 7.
Formell analyse av programmer Formell analyse er en metode for å regne på egenskaper ved et program. Dette hjelper oss til å forstå hvordan programmer virker. Det hjelper også for å konstruere programmer. Vi skal nå se på slutningsregler for formell analyse. Formelt system Aksiomer: Definerer betydningen av programsetninger i språket Slutningsregler: Lar oss koble sammen betydningen av enkeltsetninger til betydningen av hele programmet. Uke 4, side 8.
Formelle logiske systemer Vårt formelle logiske system består av: en mengde symboler en menge formler : meningsfylte kombinasjoner av symboler en mengde aksiomer : spesielle utsagn som antas å være sanne en mengde slutningsregler Slutningsreglene forteller oss hvordan vi kan finne nye sanne utsagn fra aksiomer og andre sanne utsagn: H 1 H 2... H n C Hver H i er en hypotese til slutningsregelen og C er konklusjonen. Konklusjonen er sann hvis alle hypotesene er sanne. Uke 4, side 9.
Symboler Vårt formelle logiske system består av følgende symboler: variabler (x, y,...) relasjonssymboler (=,,...) funksjonssymboler (funksjoner som ikke tar argumenter er konstanter) "connectives" (,,, ) kvantorer (, ) Uke 4, side 10.
Eksempler på formler Dersom A og B er formler så er også følgende formler: A -betyr ikke A A B -betyr A eller B A B -betyr A og B A B -betyr A impliserer/medfører B Dersom x er en variabel og P er en funksjon som kan anvendes på x så er følgende formler: x : P(x) -betyr at P(x) er sann for alle mulige verdier av x x : P(x) -betyr at det finnes minst en verdi av x som gjør P(x) sann Uke 4, side 11.
Eksempler på aksiomer og slutningsregler Typiske aksiomer A A A A Typiske slutningsregler A B A B A A B B A A B ( A) B A B Uke 4, side 12.
Noen viktige begreper tolkning koble hver formel til sann eller usann bevis utledning hvor alle løvnodene er aksiomer teorem alle linjene i et bevis er et teorem sunnhet alt som kan bevises er sant kompletthet alt som er sant kan bevises Uke 4, side 13.
Programmeringslogikk (PL)/Hoare logikk PL lar oss uttrykke og bevise utsagn om programmer. Formler i PL handler om programsetninger. De skrives som tripler: {P } S {Q} S er setning(er) i programmeringsspråket. P kalles forbetingelse og Q bakbetingelse til S. P og Q uttrykker egenskaper ved programtilstanden. Uke 4, side 14.
Tolkningen av tripler PL uttrykker partiell korrekthet. {P } S {Q} er sann hvis P er sann i initialtilstanden til S og S terminerer så vil Q være sann i sluttilstanden til S. Uke 4, side 15.
Eksempler på formler i PL {x == 4} x = 5; {x == 5} {true} x = 5; {x == 5} {y == 4} x = 5; {y == 4} {x == 4} x = x + 1; {x == 5} {x == a y == b} x = x + y; {x == a + b y == b} {x == 4 y == 7} x = x + 1; {x == 5 y == 7} Uke 4, side 16.
Slutningsregler for PL I PL har vi slutningsregler for hver setning i programmeringsspråket. Tilordningsaksiomet {P x e } x = e; {P } Tekstlig substitusjon: P x e betyr: Alle forekomster av x i P byttes ut med e. Gitt bakbetingelsen kan forbetingelsen beregnes! Dersom tilordningen x = e skal resultere i en tilstand som tilfredsstiller P, må tilstanden før tilordningen oppfylle P der x er byttet ut med e. Uke 4, side 17.
Tekstlig substitusjon (x == 1) x (x+1) x + 1 == 1 (x + y == a) y (y+x) x + (y + x) == a (y == a) x (x+y) y == a Propagerer inn i formler ( A) x e (A x e ) (A B) x e A x e B x e (A B) x e A x e B x e Uke 4, side 18.
Bevise et trippel For å bevise trippelet {P }x = e{q} i PL, må vi vise at forbetingelsen P impliserer Q x e P Q x e {Q x e }x = e{q} {P }x = e{q} Q x e er det største settet av tilstander slik at tilordningen garantert terminerer med Q Vi må vise at P er i dette settet. Uke 4, side 19.
Eksempler {1 == 1} x = 1; {x == 1} {x == 0} x = x + 1; {x == 1} {x == a y == b} x = x + y; {x == a + b y == b} {x == a} q = 0; {q y + x == a} {q y + x == a} x = x y; {q y + x + y == a} {q y + x + y == a} q = q + 1; {q y + x == a} {5 == 6} x = 5; {x == 6} Uke 4, side 20.
Bevissystemet PL (Hoare-logikk) Uttrykke og bevise egenskaper ved programmer Trippelform {P }S{Q} Oppfører programmet seg i henhold til spesifikasjonen? Ønsker å bevise egenskaper ved programeksekveringer Trenger ikke å eksekvere koden for å gjøre analysen En tolkning mapper tripler til true eller false Vi ønsker at {x == 0}x = x +1{x == 1} skal tolkes som true {x == 0}x = x +1{x == 0} skal tolkes som false Uke 4, side 21.
Tolkninger En tolkning mapper tripler til true eller false {P } S {Q} er sann hvis P er sann i initialtilstanden til S og eksekveringen av S terminerer så vil Q være sann i sluttilstanden til S. Tolkningen er altså forbundet med eksekveringen av koden. Det er slike eksekveringer vi ønsker å resonnere om ( regne på ) i programlogikken (PL) Uke 4, side 22.
Bevissystemet PL Bevissystemet består av aksiomer og slutningsregler Aksiomene omtaler de elementære programsetningene x = e, skip,... Slutningsreglene omtaler hvordan setninger settes sammen S1 ; S2, if, while, await, co...oc,... Teoremer i PL På trippelform Alle aksiomer er teoremer Konklusjonen i en regel er et teorem, gitt at hypotesene er teoremer: H 1 H 2... H n C Uke 4, side 23.
Sunnhet Dersom et trippel {P }S{Q} er et teorem i PL, så tolkes trippelet til true! F.eks. ønsker vi at {x == 0}x = x +1{x == 1} skal være et teorem (fordi det ble tolket som true)......mens {x == 0}x = x +1{x == 0} ikke skal være et teorem (fordi det ble tolket som false) Sunnhet: Alle teoremer i PL er sanne tripler (bevis ikke pensum) Hvis vi kan bruke PL til å vise at et program har en gitt egenskap, så vil eksekveringen av programmet oppfylle denne egenskapen Uke 4, side 24.
Partiell korrekthet I tolkningen antar vi terminering av setningene i {P }S{Q}, men dette bevises ikke. Vi sier dermed at vi har partiell korrekthet. Predikatene (P, Q) uttrykker safety egenskaper Predikatene i for- og bakbetingelsene begrenser mulige tilstander: {false} S; {true} {true} S; {false} programmet stopper før S uttrykker ikke-terminering av S Partiell korrekthet : Bakbetingelsen holder bare hvis programmet terminerer. Uke 4, side 25.
Tilordningsaksiomet {P x e } x = e; {P } Tekstlig substitusjon: P x e betyr: Alle forekomster av x i P byttes ut med e. Gitt bakbetingelsen kan forbetingelsen beregnes! Dersom tilordningen x = e skal resultere i en tilstand som tilfredstiller P, må tilstanden før tilordningen oppfylle P der x er byttet ut med e. Uke 4, side 26.
Eksempel 1 Dersom vi ønsker at tilordningenx = e skal terminere i en tilstand derx har verdien 5, så måeha verdien 5 før tilordningen {e == 5} x = e {x == 5} {P x e } x = e {P } Uke 4, side 27.
Eksempel 2 Gitt tilordningsaksiomet, kan vi bevise {P }x = e{q} ved å se at implikasjonen P Q x e er sann {(q y) + x == a}x = x y{(q y) + x + y == a} {(q y) + x + y == a}q = q +1{(q y) + x == a} Blå utsagn er logiske beviskrav. I dette kurset nøyer vi oss med å være overbeviste om at disse holder. (De bevises ikke formelt.) Q x e representerer den største mengden av tilstander som garanterer at eksekveringen terminerer i Q Implikasjonen krever at de aktuelle tilstandene (P ) er innenfor denne mengden Uke 4, side 28.
Slutningsregler for sekvensielle setninger Sammensetning {P } S 1 ; {Q} {Q} S 2 ; {R} {P } S 1 ; S 2 ; {R} Kondisjonal {P B} S; {Q} (P B) Q {P } if (B) S; {Q} Konsekvens P P {P } S; {Q} Q Q {P } S; {Q } While-løkke {I B} S; {I} {I} while (B) S; {I B} Blå utsagn: logiske beviskrav. While-setningen trenger en For-løkka: oppgave 2.22! løkke-invariant! Uke 4, side 29.
Sammensetningsregelen Tillater oss å gå baklengs over tilordninger. Mellombetingelsene konstrueres underveis! x == y 2 x == 2 y x == 2 y x == 2 y {x == y}x = x 2; {x == 2 y} {x == 2 y}y = y 2; {x == y} {x == y}x = x 2; y = y 2; {x == y} (q y) + x == a ((q + 1) y) + x y == a ((q + 1) y) + x == a ((q + 1) y) + x == a {(q y) + x == a}x = x y; {((q + 1) y) + x == a} {((q + 1) y) + x == a}q = q + 1; {(q y) + x == a} {(q y) + x == a}x = x y; q = q + 1; {(q y) + x == a} Uke 4, side 30.