26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Relaterede dokumenter
8 Specifikation med Logiske Udtryk.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Bevisteknikker (relevant både ved design og verifikation)

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Algoritmer og invarianter

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

3 Algebraisk Specifikation af Abstrakte Datatyper.

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

P (n): rekursiv beregning af f n kræver f n beregninger af f 1. P (n) er sand for alle n 2.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser.

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

1 Program for forelæsningen

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Rettelser til Pilen ved træets rod

Sproget Rascal (v. 2)

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Rename og redefine. Abstrakte klasser. Dynamisk binding.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

DM517:Supplerende noter om uafgørlighedsbeviser:

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Funktionalligninger. Anders Schack-Nielsen. 25. februar 2007

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8

Selvstudium 1, Diskret matematik

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Skriftlig eksamen - med besvarelse Topologi I (MM508)

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen

TALTEORI Følger og den kinesiske restklassesætning.

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Newton-Raphsons metode

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

Noter til C# Programmering Iteration

Euklids algoritme og kædebrøker

4 Basal Objekt-orienteret Programmering I.

Forelæsning Uge 2 Mandag

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Abstrakte datatyper C#-version

Sammenhængskomponenter i grafer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

18 Multivejstræer og B-træer.

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

! "# $$ &'()*"* +*, & &"*0* & "# % %- %

HTML, PHP, SQL, webserver, hvad er hvad??

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Ja! det beviste vi uge 16+17

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Forelæsning Uge 2 Torsdag

Python programmering. Per Tøfting. MacFest

Implementation af Koordinering. dopsys 1

Programmering og Problemløsning, 2017

Kontrol-strukturer i PHP

17 Søgning og Søgetræer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Projekt - Visual Basic for Applications N på stribe

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

En karakteristik af de regulære sprog. Ugens emner. FA minimering [ ] MyHill-Nerode-sætningen en algoritme til minimering af FA er

Programmering og Problemløsning, 2017

Forelæsning Uge 4 Mandag

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Ugeseddel 4 1. marts - 8. marts

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

t a l e n t c a m p d k Matematik Intro Mads Friis, stud.scient 7. november 2015 Slide 1/25

Transkript:

26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive kommandoer. Bevisregler for iterative kommandoer. Eksempler. 373

Formålet med programbeviser. op1(...) is require pre-betinglse do... En sekvens af kommandoer... ensure post-betingelse end; --op1 Løbende check af prebetingelse, post-betingelse og andre assertions. Bevis af, at hvis pre-betingelsen er opfyldt, så er postbetingelsen også opfyld. Vi må have bevisregler for forskellige kommandoer i sproget. 374

Betingelser, Hoare sætninger og bevisregler. Hoare sætning: {P} C {Q} Hvis P er opfyldt før udførelsen af kommandoen C, og hvis C afsluttes normalt, så vil Q være opfyldt efter udførelsen af C. Bevisregel: H1, H2,... Hn H Præmisser Konklussion Hvis vi kan vise H1, H2,..., Hn så kan vi konkludere H Partiel korrekthed. Modsætningen til partiel korrekthed er total korrekthed. Årsagen til, at et programfragment ikke afsluttes normalt kan være, at det kommer ind i en uendelig løkke, eller at programmet aborterer. Med ovenstående notation kan vi udtrykke rollerne af de (effektive) pre- og postbetingelser i operationer: {pre-betingelse} operations-krop {post-betingelse}. Vi er som regel interesserede i de stærkest mulige Hoare sætninger. Man styrker en Hoaresætning ved enten at styrke postbetingelsen Q, eller ved at svække prebetingelsen P. For at få givne Hoaresætninger til at "fitte" med givne omgivelser, kan man også være interesseret i at svække Hoaresætninger. Husk, at hvis P => Q siger vi, at P er stærkere en Q, og at Q er svagere en P. Hvis der indgår variable i et udsagn, er der relativt færre værdier af variablen, der opfylder et stærkt udsagn end et svagt udsagn. 375

Program verifikation. Verifikation af et program P, som består af en kommandosekvens CS: { pre } CS { post } Forlæns verifikation (højrekonstruktion): Vi antager at pre gælder før udførelsen af CS. Vi skal vise at post gælder efter CS. Baglæns verifikation (venstrekonstruktion): Vi skal vise at såfrem post skal gælde efter udførelse af CS er det tilstrækkeligt at forudsætte, at pre er opfyldt inden udførelsen af CS. 376

Svækkelse af Hoare sætninger. P => P1, {P1} S {Q} {P} S {Q} {P1} S {Q} svækkes ved en stærkere prebetingelse. {P} S {Q1}, Q1 => Q {P} S {Q} {P} S {Q1} svækkes ved en svagere postbetingelse. 377

Bevisregel for den tomme kommando. {P} {P} Hvis P er opfyldt før en tom kommando, er P også opfyldt efter denne. Den tomme kommando udtrykkes som bekendt syntaktisk som den tomme streng. Bevisreglen for den tomme kommando siger, at en betingelse ikke ændres af den tomme kommando. 378

Bevisregel for assignment. x {P e } x := e { P } x {P e } : Betingelsen P med alle forekomster af x substitueret med e. Baglæns verifikation (Tilbageføring ): Hvis betingelsen P gælder efter assignmentet, skal P, med alle forekomster af x substitueret med e, gælde før udførelsen af assignmentet. Man er umiddelbart fristet til at lave en bevisregel {P} x := e {Q}, hvor Q bl.a. udtrykker at x = e. Denne regel vil vi gerne benytte i fremadrettet verifikation. Som diskuteret i Jan Stage's rapport, giver dette ikke mening hvis x optræder i udtrykket e. Vi må derfor ty til baglæns verifikation: Givet P ovenfor, hvad er den svageste prebetingelse Q af assignmentet så {Q} x := e {P} holder. Det er udsagnet P med alle forekomster af x substitueret med e. 379

Bevisregler for kommando-sekvenser. {P0} C1 {P1}, {P1 } C2 {P2} {P0} C1 ; C2 {P2} Hvis vi kan vise at 1. Hvis P0 er opfyldt før C1 da er P1 opfyldt efter C1, og 2. Hvis P1 er opfyldt før C2 da er P2 opfyldt efter C2. så kan vi konkludere at Hvis P0 er opfyldt før C1 ; C2 da er P2 opfyldt efter sekvensen. {P0} C1 {P1}, {P2 } C2 {P3}, P1 => P2 {P0} C1 ; C2 {P3} Den nederste bevisregel er en variation af den øverste, hvor postbetingelsen af C1 ikke er identisk med prebetingelsen af C2. Istedet for gælder at C1's postbetingelse medfører C2's prebetingelse. 380

Eksempel 1. Ombytning af værdierne af to variable x og y: { x = a, y = b } t := x; x := y; y := t { x = b, y = a } Bevisreglerne for hhv. assignment og kommando-sekvens benyttes til at vise at hvis { x = b, y = a } skal gælde efter de tre assignments, da skal { x = a, y = b } nødvendigvis gælde før udførelsen af disse. (Baglæns verifikation). Ved forelæsningen vil vi gennemføre beviset af dette. 381

Bevisregler for selektive kommandoer (1). if-then-else: {P and B} CS1 {Q}, {P and B} CS2 {Q} {P} if B then CS1 else CS2 end {Q} if-then: {P and B} CS {Q}, ( P and B => Q) {P} if B then CS end {Q} Bevisreglen for if-then formen kan let udledes fra bevisreglen for if-then-else kommandoen. Antag at else-delen er den tomme kommando-sekvens. Benyt den trivielle bevisregel for den tomme kommando, samt reglen for svækkelse af Hoare-sætninger. 382

Bevisregler for selektive kommandoer (2). if-then-else ala Eiffel: {P and B0} CS {Q}, X? {P} if B0 then CS elsif B1 then CS1... elsif Bn then CSn else CSn+1 end {Q} Den selektive kontrolstruktur, for hvilken der skitseres en bevisregel på denne slide, svarer til ifthen-else i Eiffel. Opgave: Find X så ovenstående bliver en bevisregel for Eiffel s if-then-else kommando. 383

Eksempel 2. Max(a,b: integer): integer is require true do {P} if a >= b then {P1} result := a {Q} else {P2} result := b {Q} end {Q} ensure result = max(a,b) end --Max Fremgangsmåde i bevis: 1. Q sættes til postbetingelsen af Max. 2. Find P1 ved at tilbageføre Q over 'result := a' 3. Find P2 ved at tilbageføre Q over 'result := b' 4. Gæt P. 5. Vise: P and B => P1. 6. Vise: P and B => P2. 7. Benyt bevisreglen for if-then-else til at slutte, at Q gælder hvis P er opfyldt. 384

Bevisregler for iterative kommandoer. Pascal: {P and B} CS {P} {P} while B do CS end {P and B} {P} CS {Q}, (Q and B) => P {P} repeat CS until B {Q and B} Eiffel: {P and B} CS {P} {P} from until B loop CS end {P and B} Øverst er vist en bevisregel for den traditionelle while-sætning ala Pascal, hvor der itereres over en kommandosekvens. Dernæst en tilsvarende regel for repeat. Nederst er vist en regel for Eiffel's loop konstruktion. Initialiseringskommandoerne efter 'from' er udeladt, idet de semantisk set lige så godt kunne være placeret før loop kommandoen (og i sekvens med denne). Invariant og variant-delene er ikke medtaget, idet de ikke bidrager til semantikken af loop'en. Bemærk at P svarer til Eiffel's invariant. 385

Eksempel 3. myfib(n: integer): INTEGER is require n >= 0 local a: INTEGER ; b: INTEGER ; count: INTEGER ; br: INTEGER do {P} from a := 1; b := 0; count := n; invariant P2 until count = 0 loop {P1} br := b; b:= a; a := a + br; count := count - 1 {P2} end; {P3} result := b {Q} ensure result = fib(n) end; -- myfib Fremgangsmåde i bevis: 1. Q sættes til postbetingelsen af myfib. 2. Gæt på invarianten P2. 3. Find P1 ved tilbageføring. 4. Vise at P2 and (count = 0) => P1. 5. Benyt bevisreglen for loop til at slutte, at P3 er P2 and (count = 0). 5. Tilbagefør P2 over de tre initiale assignments, og få dermed P2'. 6. Vise af P => P2'. 7. Tilbagefør postbetingelsen Q over 'result := b' og få Q'. 8. Vise at P3 => Q'. Opgave: Gennemfør verifikationen af, at ovenstående beregner Fibonacci tal. Vær speciel omhyggelig med at finde P1 ved tilbageføring af P2 over de fire assignments. Bemærk at vi tidligere i noterne har diskuteret netop dette eksempel (se slide "Eksempel på specifikation, implementation og krav til korrekthedsbevis for en funktion", i kapitlet om specifikation med logiske udtryk). Ved denne lejlighed fandt vi invarianten, som betegnes med P2 ovenfor. Invarianten er givet på sidste side i ovennævnte kapitel. 386