Informatik I. 9. Nachweis von Programmeigenschaften. Jan-Georg Smaus. Albert-Ludwigs-Universität Freiburg. 2. Dezember 2010

Ähnliche Dokumente
Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom : Rekursive Datentypen

Strukturelle Rekursion und Induktion

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier

Programmierung 1 - Repetitorium

Vorlesung. Vollständige Induktion 1

Logik für Informatiker. 1. Grundlegende Beweisstrategien. Viorica Sofronie-Stokkermans Universität Koblenz-Landau

TU8 Beweismethoden. Daniela Andrade

1 Das Prinzip der vollständigen Induktion

Induktive Beweise und rekursive Definitionen

Kapitel 3. Natürliche Zahlen und vollständige Induktion

SWP Prüfungsvorbereitung

Induktive Beweise und rekursive Definitionen

3 Vollständige Induktion

Vorkurs: Mathematik für Informatiker

2 i. i=0. und beweisen Sie mittels eines geeigneten Verfahrens die Korrektheit der geschlossenen Form.

Theoretische Informatik. Alphabete, Worte, Sprachen

Mathematische Grundlagen der Ökonomie Übungsblatt 8

6.1 Natürliche Zahlen 6.2 Induktion und Rekursion 6.3 Ganze, rationale, reelle und komplexe Zahlen 6.4 Darstellung von Zahlen

Binärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T:

26 Hierarchisch strukturierte Daten

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Kapitel 1. Grundlagen Mengen

Programmieren als Grundkompetenz

Primitiv rekursive und µ-rekursive Funktionen

Programmieren in Haskell Programmiermethodik

Mächtigkeit von WHILE-Programmen

5.1 Drei wichtige Beweistechniken Erklärungen zu den Beweistechniken... 56

Theoretische Informatik II

1.) Rekursion und Induktion: Rechnen mit natürlichen Zahlen

Kapitel III. Aufbau des Zahlensystems

Kapitel 1. Grundlagen

Lösung zur Übung für Analysis einer Variablen WS 2016/17

24 KAPITEL 2. REELLE UND KOMPLEXE ZAHLEN

Technische Universität München

1.2 Eigenschaften der ganzen Zahlen

Grundlagen der Theoretischen Informatik

Motivation. Formale Grundlagen der Informatik 1 Kapitel 19. Syntax & Semantik. Motivation - Beispiel. Motivation - Beispiel

Grundlagen der Theoretischen Informatik

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Formale Sprachen. Script, Kapitel 4. Grammatiken

Einführung in die mathematische Logik

Die Programmiersprache Scheme... DrRacket: Die Programmierumgebung Sprache: Semantik. Sprache: Syntax

Formale Grundlagen 2008W. Vorlesung im 2008S Institut für Algebra Johannes Kepler Universität Linz

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

4. Induktives Definieren - Themenübersicht

Handout zu Beweistechniken

ALP I Rekursive Funktionen

Teile und Herrsche Teil 2

Theoretische Informatik

Lösungen. 1. Klausur zur MIA: Analysis I für Mathematiker

mathe plus Aussagenlogik Seite 1

Vorkurs Mathematik Abbildungen

Einführung Grundbegriffe

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Vorkurs: Mathematik für Informatiker

Rekursive und primitiv rekursive Funktionen. Ein maschinenunabhängiges formales Berechnungsmodell auf den natürlichen Zahlen

FORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie

Grundbegriffe der Informatik Tutorium 2

Reihen/Partialsummenfolgen und vollständige Induktion. Robert Klinzmann

Induktive Definitionen

Mathematik und Logik

Theoretische Informatik SS 03 Übung 3

Algorithmen II Vorlesung am

Beschreibungskomplexität von Grammatiken Definitionen

Kapitel 2 Mathematische Grundlagen

ist ein regulärer Ausdruck.

6 F O R M A L E S P R A C H E N. 6.1 formale sprachen

Im allerersten Unterabschnitt wollen wir uns mit einer elementaren Struktur innerhalb der Mathematik beschäftigen: Mengen.

Folgen und endliche Summen

Grundbegriffe der Informatik

Natürliche, ganze und rationale Zahlen

3.6.4 Rekursive Funktionen

5 Logische Programmierung

3 Vom Zählen zur Induktion

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

Algorithmen und Datenstrukturen

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Technische Universität München Zentrum Mathematik Mathematik 1 (Elektrotechnik) Übungsblatt 1

Einführung in die Theoretische Informatik

Programmierparadigmen

Formale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER

2. Symmetrische Gruppen

Der λ-kalkül. Frank Huch. Sommersemester 2015

Grundbegriffe der Informatik

Einführung in die Informatik 1

Frage 8.3. Wozu dienen Beweise im Rahmen einer mathematischen (Lehramts-)Ausbildung?

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Vervollständigung Lateinischer Quadrate

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Rekursion und Induktion

Theorie der Informatik

Wie beweise ich etwas? 9. Juli 2012

Einführung in die Theoretische Informatik

Erwin Grüner

GTI. µ-rekursive Funktionen. Hannes Diener. 20. Juni 2. Juli. ENC B-0123,

Transkript:

Informatik I 9. Nachweis von Programmeigenschaften Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 2. Dezember 2010 Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 1 / 30

Informatik I 2. Dezember 2010 9. Nachweis von Programmeigenschaften 9.1 Nachweis von Programmeigenschaften Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 2 / 30

9.1 Nachweis von Programmeigenschaften Korrektheit: Ein verklausuliertes Programm Garantierte Terminierung Alternative Rekursion Listen Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 2 / 30

Korrektheit: Ein verklausuliertes Programm Ein verklausuliertes Programm Was tut folgendes Programm? (define h (lambda (n) (if (zero? n) 0 (+ (h (- n 1)) (/ 1 (* n (+ n 1))))))) Behauptung: ( n) (h n) = Zeige, dass Behauptung gilt. n n+1. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 3 / 30

Korrektheit: Ein verklausuliertes Programm Vorgehensweise Unsere Beweise sind eine Mischung aus Programmtext und mathematischer Syntax. Wir haben es nicht mit konkreten Ausdrücken zu tun, sondern Ausdrücken, in denen mathematische Variablen, also Variablen auf der Meta-Ebene vorkommen. Beispiel: (+ 1 (n + 1)). Wir werten diese abstrakten Ausdrücke gemäß dem Substitutionsmodell aus. Ohne Aufhebens gehen wir immer davon aus, dass die eingebauten mathematischen Operationen wie + *... das Übliche tun. Dies erlaubt uns z.b. darauf zu vertrauen dass (+ 1 (n + 1)) zu n + 2 reduziert wird. Auch kleine Lemmata wie n + m = m + n verwenden wir nach Belieben. Achten Sie sehr auf den Unterschied zwischen Programmtext () + * und Mathematik () + i n. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 4 / 30

Korrektheit: Ein verklausuliertes Programm Nochmals das Programm (define h (lambda (n) (if (zero? n) 0 (+ (h (- n 1)) (/ 1 (* n (+ n 1))))))) Behauptung: ( n) (h n) = Zeige, dass Behauptung gilt. n n+1. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 5 / 30

Korrektheit: Ein verklausuliertes Programm Induktionsanfang P(0) gemäß Substitutionsmodell. (h 0) = (if (zero? 0) 0...) = 0 = 0 1 Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 6 / 30

Korrektheit: Ein verklausuliertes Programm Induktionsschritt P(n) P(n + 1) (h (n + 1)) = (if (zero? (n + 1)) 0...) = (+ (h (- (n + 1) 1)) (/ 1 (* (n + 1) (+ (n + 1) 1)))) = (+ (h n) (/ 1 (* (n + 1) (n + 2)))) IH = (+ = n 1 n + 1 (n + 1) (n + 2) ) n (n + 2) (n + 1) (n + 2) + 1 (n + 1) (n + 2) = n2 + 2n + 1 (n + 1) (n + 2) = (n + 1) 2 (n + 1) (n + 2) = n + 1 n + 2 Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 7 / 30

Garantierte Terminierung Konstruktionsanleitung Satz Jede durch die Konstruktionsanleitung für natürliche Zahlen definierte Funktion liefert immer ein Ergebnis. D.h. sei (: f (natural -> natural)) definiert durch (define f (lambda (n) (if (zero? n) basis (step (f (- n 1)) n)))) wobei basis ein Ausdruck mit Wert aus N und step eine totale (und berechenbare) Funktion (natural natural -> natural) ist. Dann gilt: ( n N) ist (f n) definiert und (f n) N. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 8 / 30

Garantierte Terminierung Beweis Induktionsbasis: (f 0) = (if (zero? 0) basis (step...)) = basis N Induktionsschritt P(n) P(n + 1): (f (n + 1)) = (if (zero? (n + 1))...) = (step (f (- (n + 1) 1)) (n + 1)) = (step (f n) (n + 1)) Nach Induktionshypothese ist (f n) definiert und gleich f (n) N, also = (step f (n) (n + 1)) N nach Voraussetzung über step. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 9 / 30

Garantierte Terminierung Primitive Rekursion Unsere Konstruktionsanleitung, so abstrakt unter Verwendung von basis und step formuliert... (define f (lambda (n) (if (zero? n) basis (step (f (- n 1)) n))))... hat in der Berechnungstheorie (3. Semester) einen Namen: f ist eine primitiv rekursive Funktion (vorausgesetzt, basis und step sind primitiv rekursiv). Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 10 / 30

Alternative Rekursion Abweichung von der Konstruktionsanleitung Wir haben am Beispiel von factorial gesehen, dass Funktionen auf den natürlichen Zahlen, die von der Konstruktionsanleitung abweichen, evtl. nicht terminieren. Trotzdem können Programme, die von der Konstruktionsanleitung abweichen, terminieren. Man muss nicht unbedingt von n nach n 1 gehen... Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 11 / 30

Alternative Rekursion Noch ein Programm (define l (lambda (n) (if (zero? n) 0 (+ 1 (l (quotient n 2)))))) also l(0) = 0, l(n) = 1 + l( n 2 ), wobei x die größte ganze Zahl z mit x z ist. Vermutung n 0 1 2 3 4 5 6 7 8 9... 15 16 17... l(n) 0 1 2 2 3 3 3 3 4 4... 4 5 5... l(n) = log 2 (n + 1) wobei ist x die kleinste ganze Zahl z mit x z ist. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 12 / 30

Alternative Rekursion Vorabbemerkung Warum präsentiere ich ein Programm sodass l(n) = log 2 (n + 1) anstatt des einfacheren l(n) = log 2 (n)? Das wäre das Programm (define l (lambda (n) (if (= n 1) 0 (+ 1 (l (quotient n 2)))))) Dies wäre keine totale Prozedur der Sorte (natural -> natural). Die Eingabe 0, für die l undefinert ist, müssten wir gesondert abfangen und eine Fehlermeldung generieren. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 13 / 30

Alternative Rekursion Induktion Wir kennen Induktionsschema Falls P(0) (Induktionsbasis, -anfang) und ( n) P(n) P(n ) (Induktionsschritt) dann ( n N) P(n). (P(n) Induktionshypothese, -behauptung) Das vorliegende Programm erfordert eine andere Art von Induktion. Wir nutzen aus, dass {( n 2, n) n N+ } < und < wohlfundiert ist. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 14 / 30

Alternative Rekursion Erinnerung: Induktion und wohlfundierte Relationen 1. Induktionsbasis: ( x A) (( y A) y R x) P(x) 2. Induktionsschritt: ( x A) (( y A) y R x P(y)) P(x) also in unserem Fall 1. Induktionsbasis: P(0) 2. Induktionsschritt: ( x N) (( y N) y < x P(y)) P(x), d.h., zeige P(x) wobei man für alle y < x verwenden kann dass P(y). Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 15 / 30

Alternative Rekursion Beweis Induktionsbasis n = 0 (l 0) = (if (zero? 0) 0...) = 0 = log 2 1 = log 2 (0 + 1) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 16 / 30

Alternative Rekursion Beweis Induktionsschritt: n > 0 Es geht gleich weiter... l(n) = (if (zero? n) 0...) = (+ 1 (l (quotient n 2))) = (+ 1 (l n 2 )) IH = (+ 1 log 2 ( n 2 + 1) ) = 1 + log 2 ( n 2 + 1) = 1 + log 2 ( n 2 + 1) = log 2 (2 ( n 2 + 1)) = log 2 (2 n 2 + 2) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 17 / 30

Alternative Rekursion Beweis Induktionsschritt: n > 0 (Fortsetzung 1) Wir haben bisher gezeigt: 1. Fall: n = 2k mit k > 0 l(n) = log 2 (2 n 2 + 2) = log 2 ( 2 2k 2 + 2) = log 2 (2k + 2) ( ) = log 2 (2k + 1) = log 2 (n + 1) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 18 / 30

Alternative Rekursion Beweis Nebenrechnung (*): log 2 (2k + 2) = log 2 (2k + 1) für alle k > 0 Wie jede natürliche Zahl 3 liegt 2k + 2 zwischen zwei benachbarten Zweierpotenzen, d.h., es gibt ein j N + so dass 2 j < 2k + 2 2 j+1. (1) Da 2k + 2 N, folgt hieraus 2 j 2k + 1 < 2 j+1. Da 2 j = 2k + 1 unmöglich ist, kann man verschärfen: 2 j < 2k + 1 < 2 j+1. (2) Nun wenden wir auf (1) und (2) den Zweierlogarithmus an j < log 2 (2k + 2) j + 1 j < log 2 (2k + 1) < j + 1. Hieraus folgt log 2 (2k + 2) = j + 1 log 2 (2k + 1) = j + 1. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 19 / 30

Alternative Rekursion Beweis Induktionsschritt: n > 0 (Fortsetzung 2) Wir haben bisher gezeigt: 2. Fall: n = 2k + 1 mit k 0 l(n) = log 2 (2 n 2 + 2) = log 2 (2 2k+1 2 + 2) = log 2 (2k + 2) = log 2 (n + 1) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 20 / 30

Listen Erinnerung: Peano-Axiome Definition (Peano-Axiome) Die Menge N der natürlichen Zahlen ist definiert durch: P1 0 N (Null) P2 ( n N) n N (Nachfolger) P3 ( n N) n 0 (Nachfolger ist nicht Null) P4 ( m, n N) m n m n (Nachfolger ist injektiv) P5 Für jede Menge M N mit 0 M und ( n) n M n M gilt M = N (Induktionsaxiom) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 21 / 30

Listen Listen Definition Die Menge M der Listen über M ist induktiv definiert (P3+P4) durch 1. empty M (die leere Liste) (P1) 2. ( a M) ( xs M ) (cons a xs) M (nichtleere Liste mit Kopf a und Rumpf (Rest) xs) (P2) 3. In M sind nur die durch (1) und (2) definierten Elemente enthalten (P5) Dies ist analog zu den Peano-Axiomen. Allgemein bezeichnet Σ die Menge der Wörter über dem Alphabet Σ. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 22 / 30

Listen Listeninduktion Definition (Das Schema der Listeninduktion) Sei P(xs) eine Eigenschaft von Listen über M. Es gilt ( xs M ) P(xs) genau dann, wenn 1. Induktionsbasis: P(empty). 2. Induktionsschritt: ( a M) ( xs M ) P(xs) P((cons a xs)). Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 23 / 30

Listen Beispiel: Listenverkettung (: append ((list-of %a) (list-of %a) -> (list-of %a))) (define append (lambda (xs ys) (cond ((empty? xs) ys) ((cons? xs) (cons (first xs) (append (rest xs) ys)))))) Die Prozedur ist auf dem ersten Argument rekursiv. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 24 / 30

Listen Eigenschaften von append 1. (append empty bs) = bs 2. (append as empty) = as 3. (append (append as bs) cs) = (append as (append bs cs)) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 25 / 30

Listen Beweise 1 (append empty bs) = bs (append empty bs) = bs folgt direkt aus dem Substitutionsmodell. Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 26 / 30

Listen Beweise 2 (append as empty) = as (append as empty) = as Listeninduktion über as. Induktionsbasis: as = empty (append empty empty) = empty folgt aus dem Substitutionsmodell. Induktionsschritt: as = (cons a as ) (append (cons a as ) empty) Sub. = (cons (first (cons a as )) (append (rest (cons a as )) empty)) Sub. = (cons a (append as empty)) IH = (cons a as ) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 27 / 30

Listen Beweise 3 (append (append as bs) cs) = (append as (append bs cs)) Listeninduktion über as. Induktionsbasis: as = empty (append (append empty bs) cs) 2 = (append bs cs) 2 = (append empty (append bs cs)) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 28 / 30

Listen Beweise 3 (append (append as bs) cs) = (append as (append bs cs)) Listeninduktion über as. Induktionsschritt: as = (cons a as ) (append (append (cons a as ) bs) cs) Sub. = (append (cons a (append as bs)) cs) Sub. = (cons a (append (append as bs) cs)) IH = (cons a (append as (append bs cs))) Sub. = 1 (append (cons a as ) (append bs cs)) = (append as (append bs cs)) Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 29 / 30

Listen Zusammenfassung Nachweis, was ein Programm auf den natürlichen Zahlen ausrechnet Nachweis der Terminierung Rekursion einmal nicht über den direkten Vorgänger einer Zahl Listen und Beweise für Prozeduren, die darauf rechnen Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 30 / 30