Logica voor Informatica

Vergelijkbare documenten
Logica voor Informatica

Logic for Computer Science

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Logic for Computer Science

Logica voor Informatica

Logica voor Informatica. Propositielogica. Bewijssystemen voor propositielogica. Mehdi Dastani

Zelftest Inleiding Programmeren

Logica 1. Joost J. Joosten

Honours projecten BSc Informatica: twee voorstellen

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 2

Programmeermethoden NA. Week 3: Controlestructuren

Een spoedcursus python

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

VAN HET PROGRAMMEREN. Inleiding

Abstraheren van modellen

Logica voor Informatica. Logica Toepassingen. PROLOG: Logische Programmeertaal. Mehdi Dastani

Helden van de wiskunde: L.E.J. Brouwer Brouwers visie vanuit een logica-informatica perspectief

Programmeren in Java 3

{ specificatie (contract) en toelichting }

Voortgezette Logica, Week 2

Naam:... INFO / WIS-INF / ASIB / IAJ. Theorie

Automaten & Complexiteit (X )

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Logica voor AI. Inleiding modale logica en Kripke semantiek. Antje Rumberg. 14 november 2012

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

Vakgroep CW KAHO Sint-Lieven

{ auteur, toelichting }

Predikatenlogica in Vogelvlucht

Propositionele logica en predikatenlogica. 1. Noteer volgende Nederlandse uitspraken formeel m.b.v. propositionele logica :

Inleiding Programmeren 2

Knowledge, chance, and change Kooi, Barteld

Inleiding Wiskundige Logica

Modulewijzer Tirdat01

Algoritmen en programmeren: deel 1 - overzicht

Ontwerp van Algoritmen: opgaven weken 3 en 4

Automaten & Complexiteit (X )

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Variabelen en statements in ActionScript

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Logisch en Functioneel Programmeren voor Wiskunde D

Java Les 3 Theorie Herhaal structuren

1 Inleiding in Functioneel Programmeren

Logica voor Informatica. Propositielogica. Syntax & Semantiek. Mehdi Dastani Intelligent Systems Utrecht University

Logica voor Informatica. Propositielogica. Normaalvormen en Semantische tableaux. Mehdi Dastani

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Handout Natuurlijke Deductie

Logica in het (V)WO. Barteld Kooi

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Logica als een oefening in Formeel Denken

Modelleren en Programmeren: Prolog

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Die inputs worden op een gecontroleerde manier aangeboden door (test) stubs. De test driver zorgt voor de uiteindelijke uitvoering ervan.

Tegenvoorbeeld. TI1300: Redeneren en Logica. De truc van Gauss. Carl Friedrich Gauss, 7 jaar oud (omstreeks 1785)

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Getallensystemen, verzamelingen en relaties

BSc Kunstmatige Intelligentie. : Bachelor Kunstmatige Intelligentie Studiejaar, Semester, Periode : semester 1, periode 2

Vorig jaar in 5v cluster, tot en met OO hoofdstukken, geen problemen. Nu in mengcluster, tot OO hoofdstukken, wel problemen bij 4h leerlingen

BEGINNER JAVA Inhoudsopgave

Practicumopgave 3: SAT-solver

Automaten. Informatica, UvA. Yde Venema

Programmeren met Arduino-software

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Tentamen Programmeren in C (EE1400)

10. Controleopdrachten

Inleiding programmeren

Digitale Systemen (ET1 410)

Logica 1. Joost J. Joosten

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

In deze les. Eerste orde logica. Elementen van EOL. Waarom eerste orde logica? Combinatie met logica. Variabelen en Kwantoren

Logica voor AI. Responsiecollege. Antje Rumberg. 12 december Kripke Semantiek. Geldigheid. De bereikbaarheidsrelatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs

Small Basic Programmeren Text Console 2

De klasse van recursief opsombare talen is gesloten onder en. Dit bewijzen we met behulp van een recursieve opsomming

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

Transcriptie:

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