Logica voor Informatica 13 Programma verificatie Wouter Swierstra University of Utrecht 1
Programmeertalen en logica Bij logische programmeertalen hebben we gezien dat we rechstreeks met (een fragment van) predikatenlogica kunnen programmeren. Maar talen als C# zijn heel anders hebben we dan nog wel iets aan al deze logica? 2
Programmeertalen en logica Bij logische programmeertalen hebben we gezien dat we rechstreeks met (een fragment van) predikatenlogica kunnen programmeren. Maar talen als C# zijn heel anders hebben we dan nog wel iets aan al deze logica? Logica speelt een centrale rol als je programma s correct wil bewijzen. 2
C#? Een taal als C# bevat heel veel verschillende features: objecten en methoden; inheritance; abstracte klassen; een rijke standaard library; Om al deze zaken mathematisch precies te maken is uitermate ingewikkelde. Als we over programma verificatie praten, is het eenvoudiger om ons te beperken tot een mini-taal die de kern van imperatieve talen, zoals C, C#, Java en Python, beschrijft. 3
Impertaal: de moeder der imperatieve programmeertalen Imperatieve programmeertalen zoals Java bestaan uit een serie opdrachten. Onze mini-taal bestaat uit de volgende soorten opdrachten: assignments/toekenningen x := 3 if-then en if-then-else statements; while statements; sequentiele compositie het na elkaar uitvoeren van twee opdrachten c en d, meestal geschreven c ; d Daarnaast nemen we aan dat we de gebruikelijke logische (and, or, not, enz) en aritmetische operatoren (plus, keer, enz.) tot onze beschikking hebben. 4
Impertaal: een voorbeeld begin x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i i := i+1; end end Vraag: Wat doet dit programma? 5
Semantiek van Impertaal Wat is het resultaat van het uitvoeren van een Impertaal programma? 6
Semantiek van Impertaal Wat is het resultaat van het uitvoeren van een Impertaal programma? Deze programma s wijzigen de geheugen ( state of toestand ) van een computer. We modelleren dit geheugen vaak als een bedeling Var Int die de waardes van alle variabelen representeert. Gegeven een initiele toestand S en een programma P, kunnen we het programma uitvoeren. Dit resulteert in een nieuwe toestand S of belandt in een oneindige lus, deelt door nul, enz. 6
Semantiek van Imperatieve Programmeertalen -> begin x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i i := i+1; end end S 0 x =? p =? i =? 7
Semantiek van Imperatieve Programmeertalen begin -> x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i i := i+1; end end S 0 S 1 x =? x = 3 p =? p =? i =? i =? 8
Semantiek van Imperatieve Programmeertalen begin x := 3; -> p := 0; i := 1; zolang i <= x doe begin p := p + i i := i+1; end end S 0 S 1 S 2 x =? x = 3 x = 3 p =? p =? p = 0 i =? i =? i =? 9
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; -> i := 1; zolang i <= x doe begin p := p + i i := i+1; end end S 0 S 1 S 2 S 3 x =? x = 3 x = 3 x = 3 p =? p =? p = 0 p = 0 i =? i =? i =? i = 1 10
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin -> p := p + i i := i+1; end end S 1 S 2 S 3 S 4 x = 3 x = 3 x = 3 x = 3 p =? p = 0 p = 0 p = 1 i =? i =? i = 1 i = 1 11
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i -> i := i+1; end end S 2 S 3 S 4 S 5 x = 3 x = 3 x = 3 x = 3 p = 0 p = 0 p = 1 p = 1 i =? i = 1 i = 1 i = 2 12
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin -> p := p + i i := i+1; end end S 3 S 4 S 5 S 6 x = 3 x = 3 x = 3 x = 3 p = 0 p = 1 p = 1 p = 3 i = 1 i = 1 i = 2 i = 2 13
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i -> i := i+1; end end S 4 S 5 S 6 S 7 x = 3 x = 3 x = 3 x = 3 p = 1 p = 1 p = 3 p = 3 i = 1 i = 2 i = 2 i = 3 14
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin -> p := p + i i := i+1; end end S 5 S 6 S 7 S 8 x = 3 x = 3 x = 3 x = 3 p = 1 p = 3 p = 3 p = 6 i = 2 i = 2 i = 3 i = 3 15
Semantiek van Imperatieve Programmeertalen begin x := 3; p := 0; i := 1; zolang i <= x doe begin p := p + i -> i := i+1; end end S 6 S 7 S 8 S 9 x = 3 x = 3 x = 3 x = 3 p = 1 p = 3 p = 6 p = 6 i = 2 i = 3 i = 3 i = 4 16
Semantiek van Imperatieve Programmeertalen begin -> end x := 3; p := 0; i := 1; zolang i <= x doe begin end p := p + i i := i+1; Het programma is nu klaar met als eindtoestand S 10 S 7 S 8 S 9 S 10 x = 3 x = 3 x = 3 x = 3 p = 3 p = 6 p = 6 p = 6 i = 3 i = 3 i = 4 i = 4 17
Specificatie Een formele specificatie is een mathematische precieze beschrijving van het gewenste gedrag van een programma. We laten dan vaak die niet-functionele requirements buiten beschouwing over de snelheid van het programma, de taal die wordt gebruikt, de kosten van ontwikkeling, enz. In plaats daarvan, kijken we alleen naar de centrale vraag: Doet dit programma wat het moet doen? 18
Specificatie Toen Informatica als vakgebied nog in de kinderschoenen stond, was het een enorme uitdaging. De traditionele mathematisch logica houdt zich bezig met wiskundige structuren en die zijn heel anders dan computer programmas.q In het bijzonder, worden computer programma s uitgevoerd en wijzigen zij de huidige toestand. Dus moest men op zoek naar nieuwe logica s om over dit soort zaken te kunnen redeneren. 19
Specificatie Wat is een specificatie van programma geschreven in Impertaal? 20
Specificatie Wat is een specificatie van programma geschreven in Impertaal? Elk programma wijzigt de initiele toestand en termineert (mogelijk) in een eindtoestand. Een mogelijke specificatie van een programma is dan twee predicaten, ϕ en ψ over de begin en eindtoestand: Als je mag aanemen dat ϕ geldt van de begintoestand, dan moet het programma garanderen dat ψ geldt van de eindtoestand. 20
Semantiek van Imperatieve Programmeertalen { ϕ } π { ψ } pre-conditie programma post-conditie Partiële Correctheid { x = 3} Wanneer het programma, uitgevoerd met een begin toestand dat aan ϕ voldoet, termineert, geldt de postconditie ψ van het eindtoestand. x := x + 1 { x = 4} 21
Semantiek van Imperatieve Programmeertalen { ϕ } π { ψ } pre-conditie programma post-conditie Partiële Correctheid { x = A y = B} Wanneer het programma, uitgevoerd met een begin toestand dat aan ϕ voldoet, termineert, geldt de postconditie ψ van het eindtoestand. z := x; x := y; y := z; { x = B y = A} 22
Semantiek van Imperatieve Programmeertalen { ϕ } π { ψ } pre-conditie programma post-conditie { } Partiële Correctheid Wanneer het programma, uitgevoerd met een begin toestand dat aan ϕ voldoet, termineert, geldt de postconditie ψ van het eindtoestand. p := 0; i := 1; zolang i >= 1 doe p := p + i i := i+1; { p = 500 } 23
Semantiek van Imperatieve Programmeertalen { ϕ } π { ψ } pre-condition Program post-condition { } Partiële Correctheid Wanneer het programma, uitgevoerd met een begin toestand dat aan ϕ voldoet, termineert, geldt de postconditie ψ van het eindtoestand. {p = 6} x := 3; p := 0; i := 1; zolang i <= x { p := p + i i := i+1; } 24
Semantiek van Imperatieve Programmeertalen { ϕ } π { ψ } pre-condition Program post-condition Programma Constructie of Programma Calculatie Gegeven de pre- en postcondities, schrijf een programma dat voldoet aan deze specificatie. {x 10} π {x = 10} 25
Floyd-Hoare Logica De Floyd-Hoare logica (axiomatische systeem) kan gebruikt worden om over Impertaal programma s te redeneren. Wat zijn de geschikte keuzes van axiomas? 26
Floyd-Hoare Logica De Floyd-Hoare logica (axiomatische systeem) kan gebruikt worden om over Impertaal programma s te redeneren. Wat zijn de geschikte keuzes van axiomas? In het algemeen, proberen we voor elke programma-constructie (if,while, assignment, enz) een bijbehorende axioma te vinden. 26
Assignments We hebben al een voorbeeld gezien: {x = 3} x := x + 1 {x = 4} 27
Assignments We hebben al een voorbeeld gezien: {x = 3} x := x + 1 {x = 4} Maar ook, voor alle N {x = N} x := x + 1 {x = N + 1} 27
Assignments We hebben al een voorbeeld gezien: {x = 3} x := x + 1 {x = 4} Maar ook, voor alle N {x = N} x := x + 1 {x = N + 1} Dus wat is de regel in zijn algemeenheid? 27
Voorbeelden { [t/v]ϕ } v := t { ϕ } Voorbeeld axioma instanties: { y = 3 } x := 3 { y = x } { x = N + 1 } x := x 1 { x = N } { x + y = V } z := x + y { z = V } Waarom zijn deze wel geldig? Waarom is de substitutie aan de verkeerde kant? 28
Floyd-Hoare Logica De Floyd-Hoare logica (axiomatische systeem) kan gebruikt worden om over Impertaal programma s te redeneren. Afleidingsregels van Floyd-Hoare logica heeft de volgende vorm: S 1. S n S 29
Eerste regel: assignments De regel voor assignments kennen we al: { [t/v]ϕ } v := t { ϕ } Maar wat zijn de regels voor: if-then-else while sequentiele compositie en een aantal andere toegestane regels de kunnen helpen bij het boekhouden van bewijzen. 30
Floyd-Hoare Logica Afledingsregel (versterking preconditie): ϕ ψ {ψ} π {χ} {ϕ} π {χ} Voorbeeld: 1. { x + y = V } z := x + y { z = V } toek. Ax. 2. ((x + y = V ) (x 0)) (x + y = V ) logic 3. { (x + y = V ) (x 0) } z := x + y { z = V } Vers. Prec. 1&2 31
Floyd-Hoare Logica Afledingsregel (verzwaking postconditie): ψ χ {ϕ} π {ψ} {ϕ} π {χ} Voorbeeld: 1. { x + y = V } z := x + y { z = V } logic 2. (z = V ) (z V ) definitie 3. { x + y = V } z := x + y { z V } verz. post. 1&2 32
Floyd-Hoare Logica Afledingsregel (opeenvolgingregel): {ϕ} π 1 {ψ} {ψ} π 2 {χ} {ϕ} π 1 ; π 2 {χ} Voorbeeld: 1. { x + 1 20 } x := x + 1 { x 20 } toek. Ax. 2. { x 20 } y := x { y 20 } toek. Ax. 3. { x < 20} x := x + 1 ; y := x { y 20 } opeenv. 1&2 33
Floyd-Hoare Logica Afledingsregel ( Als-dan regel): (ϕ σ) χ {ϕ σ} π {χ} {ϕ} als σ dan π {χ} Voorbeeld: 1. {((0 x 5) (x 5) } y := x { 0 x 5 } 2. ((0 x 5) (x > 5)) (0 x 5) 3. {0 x 5} als x 5 dan y := x { 0 x 5 } als-dan 1&2 34
Floyd-Hoare Logica Afledingsregel ( Als-dan-anders regel): {ϕ σ} π 1 {ψ} {ϕ σ} π 2 {ψ} {ϕ} als σ dan π 1 anders π 2 {ψ} Voorbeeld: 1. {0 x 5 (x < 5)} x := x + 1 {0 x 5} 2. {0 x 5 (x 5) } x := 0 { 0 x 5 } 3. {0 x 5} als x < 5 dan x := x + 1 anders x := 0 { 0 x 5 } als-dan-anders 1&2 35
Floyd-Hoare Logica Afledingsregel ( zolang-doe regel): {ϕ σ} π {ϕ} {ϕ} zolang σ doe π {ϕ σ} Voorbeeld: 1. {x > 5} x := x 1 {x 5} toek. Ax. 2. (x > 5 x 5) x > 5 logic 3. {x > 5 x 5} x := x 1 {x 5} vers. pre. 1&2 4. {x 5} zolang x > 5 doe x := x 1 {x 5 x 5} zolang 3 36
Wat ontbreekt? De Impertaal is lang geen C# of Java methodes; recursie; effecten zoals printen, exceptions, concurrency, random numbers, enz. objecten; pointers, null-pointers, en geheugenmodel; over-erving (inheritance); lambdas en hogere orde functies; Maar het idee staat als een huis er zijn geschikte regels voor al zulke taalconstructies. 37
Gezondheid en volledigheid Kunnen we ook op één of andere manier laten zien dat deze regels weer gezond en volledig zijn? 38
Gezondheid en volledigheid Kunnen we ook op één of andere manier laten zien dat deze regels weer gezond en volledig zijn? Daarvoor hebben we eerst een semantiek nodig voor Impertaal 38
Gezondheid en volledigheid Kunnen we ook op één of andere manier laten zien dat deze regels weer gezond en volledig zijn? Daarvoor hebben we eerst een semantiek nodig voor Impertaal Die kun je, bij voorbeeld, geven door een relatie: S, π S, π te definieren die zegt dat het programma π in toestand S één statement kan uitvoeren om naar een nieuwe toestand S te gaan, met als overgebleven programma π. Zo n relatie heet ook wel een small step operational semantics. 38
Gezondheid en volledigheid Met behulp van deze semantiek herhaaldelijk stappen blijven uitvoeren tot je programma termineert. We schrijven dan S, π S als na het uitvoer van het programma π in begintoestand S het eindtoestand S heeft. Gezondheid zegt dat als { ϕ }π{ ψ } dan S S zodanig dat S, π S geldt ϕ(s) ψ(s ) Volledigheid zegt dat als S S zodanig dat S, π S, waar we voor willekeurig ϕ en ψ kunnen laten zien dat ϕ(s) ψ(s ) dan bestaat er een afleiding { ϕ }π{ ψ } 39
Dynamische Logica De taal van de dynamische logica bestaat uit: [π]ϕ : na de executie van programma π geldt π ϕ : noodzakkelijkerwijs ϕ na de executie van programma π geldt mogelijkerwijs ϕ Programma π kan een Impertaal programma zijn. Eigenschap ϕ kan een uitdrukking zijn van predikaten- of propositielogica. Correctheidsbewering {ϕ} π {ψ} in dynamische logica: ϕ [π]ψ Terminatie kan uitgedrukt worden: π 40
Dynamische Logica Programma π { } begin x:=3; p := 0; i := 1; zolang i <= x doe begin p := p + i i := i+1; end end State = (x,p,i) (*,*,*)->(5,*,*)->(5,0,*)-> (5,0,1)->(5,1,1)->(5,1,2)-> (5,3,2)->(5,3,3)->(5,6,3)-> (5,6,4)->(5,10,4)->(5,10,5)-> (5,15,5)->(5,15,6). [π](p = 15) {p = 15} 41
Overzicht en afronding 42
Logica overzicht Propositielogica en predikatenlogica syntax; semantiek, modellen, normaalvormen en tableaux; bewijssystemen: Hilbert en natuurlijke deductie; Verzamelingenleer, oneindigheid, relaties en functies Toepassingen van de logica Prolog Programma verificatie 43
Slide Wat nu? Vrijdag laatste werkcollege en minitoets; Ik heb de oefentoets van vorig jaar online gezet (met en zonder antwoorden); Vrijdag geef ik geen college ik wil geen nieuwe stof behandelen en jullie de gelegenheid geven te richten op het leren van de nieuwste stof. Dan rest nog alleen de eindtoets 44
Eindtoets De eindtoets zal over alle stof gaan die in het vak is behandeld. De nadruk zal liggen op de stof van de afgelopen weken (wat nog niet getoetst is op de tussentoets), maar ga er niet vanuit dat er geen enkele vraag over de eerste hoofdstukken zal zijn. De toets wordt weer digitaal afgenomen. 45
Caracal evaluaties Na afloop van het vak krijgen jullie altijd een evaluatieformulier toestuurd. Vul deze ajb in! Wat ging er goed? Wat moet er beter? Hoe kunnen we zorgen dat het vak volgend jaar nog beter verloopt? Om dit soort vragen te beantwoorden is jullie feedback onmisbaar. 46
Verdere afronding Na afloop van de toets krijgen jullie een email van mij met je volledige cijferoverzicht. Mocht er iets niet kloppen, laat het mij dan gerust weten. Mocht je lager dan een 5.5 staan, heb je het vak niet gehaald. 47
Verdere afronding Na afloop van de toets krijgen jullie een email van mij met je volledige cijferoverzicht. Mocht er iets niet kloppen, laat het mij dan gerust weten. Mocht je lager dan een 5.5 staan, heb je het vak niet gehaald. Maar met een 4.0 of hoger, kun je in april de herkansing maken. Deze zal weer gaan over alle stof. Het cijfer van de herkansing bepaalt, samen met de cijfers voor de minitoetsen, je eindcijfer. 47
Vragen? 48
Tot slot Bedankt en veel succes op het tentamen! 49