Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Vorlesung 5: Invarianten und Logik.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

3. Operatoren und Ausdrücke
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Mathematik hat Geschichte
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
Organisatorisches Klausur für Übungsschein (Anfang Januar)
Finale Semantik und beobachtbares Verhalten
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Syntax der Aussagenlogik
Verifizieren versus Berechnen
Algorithmen und Komplexität
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Java- Syntax.
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Kapitel 5 Stetigkeit.
Kapitel 1 Das Schubfachprinzip
Kapitel 6 Differenzierbarkeit. Kapitel 6: Differenzierbarkeit © Beutelspacher Juni 2005 Seite 2 Inhalt 6.1 Die Definition 6.2 Die Eigenschaften 6.3 Extremwerte.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Fakten, Regeln und Anfragen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung
Selbstverständnis der Mathematik
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
boolean Datentyp und Operator
Menschliche Logik AND Boolsche Logik = NOT Logisch
20:00.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Problemlösen Problemlösen Prof. Dr. Bernd Schmidt
Folie 1 Kapitel IV. Matrizen Inhalt: Matrizen als eigenständige mathematische Objekte Zusammenhang zwischen Matrizen und linearen Abbildungen Produkt von.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Analyse von Ablaufdiagrammen
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Agenda für heute, 19. Januar 2007 Informationssysteme: ETH-BibliothekInformationssysteme: ETH-Bibliothek Logische Verknüpfungen als Grundlage für die Informationsgewinnung.
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Datentypen: integer, char, string, boolean
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Daten verwalten (2) Agenda für heute, 29. April 2009
Daten verwalten (2) Agenda für heute, 30. April 2008
Agenda für heute, 20. November 2009
Agenda für heute, 21. November 2008
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Fachschaft Mathematik und Informatik
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Bildergalerie PRESEASON CAMP Juni 2014 Romanshorn Get ready for the Season!
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
I Grundlagen.
Numbers Greetings and Good-byes All about Me Verbs and Pronouns
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Grundlagen01Logik 02Mengen 03Relationen Arithmetik04Die natürlichen Zahlen 05Erweiterungen der Zahlenmenge Elementare Geometrie06Ebene Geometrie 07Trigonometrie.
Grundlagen der mathematischen Logik
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
(Wirtschafts-)mathematik I Mathe im Wandel der Zeit Volksschule 1960: Ein Bauer verkauft einen Sack Kartoffeln für 50 DM. Die Erzeugerkosten betragen 40.
Datentypen: integer, char, string, boolean
Datentypen: integer, char, string, boolean
 Präsentation transkript:

Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Vorlesung 5: Invarianten und Logik

2 Erinnerung: Verträge In Verbindung mit einem Feature: Vorbedingungen Nachbedingungen In Verbindung mit einer Klasse: Klasseninvariante

3 remove_all_segments -- Alle Stationen ausser der südlichen Endstation entfernen. ensure nur_eine_bleibt: count = 1 beide_enden_gleich: south_end = north_end Verträge extend (s : STATION ) -- s am Ende der Linie hinzufügen. ensure neue_station_da: i_th (count ) = s im_norden: north_end = s eine_mehr: count = old count + 1 Zusicherungen

4 Verträge deposit (v : INTEGER) -- Addiere v zum Kontostand. require positiv: v > 0 do … ensure addiert: balance = old balance + v end Zusicherung

5 Klasseninvarianten Die Invariante drückt Konsistenzbedingungen aus, die zwischen Abfragen in der Klasse erfüllt sein müssen. invariant sued_ist_erste: south_end = i_th (1) nord_ist_letzte: north_end = i_th (count )

6 Anwendungen von Verträgen 1.Korrekte Software 2.Dokumentation der Software, im Speziellen Dokumentation der Programmierschnittstelle. 3.Testen & Fehlerbeseitigung (Später noch mehr!) Laufzeiteffekt: Einstellung im Compiler (siehe Projects -> Settings in EiffelStudio)

7 Verträge in anderen Sprachen Java: Java Modeling Language (JML), iContract etc. C#: Spec# (Microsoft Research Erweiterung) UML: Object Constraint Language Python C++: Nana etc.

8 Logik Programmieren heisst logisch denken. Logik ist die Wissenschaft des logischen Denkens. Wir benutzen Logik tagtäglich. Sokrates ist ein Mensch. Alle Menschen sind sterblich. Daher muss Sokrates sterblich sein.

9 Logisches Denken und Programmieren Logik ist die Grundlage von: Mathematik: Beweise sind nur gültig, falls sie den Regeln der Logik genügen. Softwareentwicklung: Bedingungen in Verträgen:x darf nicht null sein, so dass wir berechnen können. Bedingungen in Programmen: Falls i positiv ist, führe diese Instruktion aus. (Mehr dazu in einer späteren Lektion)

10 Boolesche Ausdrücke Eine Bedingung wird durch einen Booleschen Ausdruck ausgedrückt. Ein solcher besteht aus Booleschen Variablen (Bezeichner, die Boolesche Werte bezeichnen) Booleschen Operatoren (not, or, and, =, implies) Und repräsentiert mögliche Boolesche Werte (Wahrheitswerte, entweder True oder False)

11 Beispiele Beispiele von Booleschen Ausdrücken: (mit rain_today und cuckoo_sang_last_night als Boolesche Variablen): rain_today (eine Boolesche Variable ist ein Boolescher Ausdruck) not rain_today (not cuckoo_sang_last_night) implies rain_today (Durch Klammern bildet man Unterausdrücke.)

12 Die Negation (not) Für jeden Booleschen Ausdruck e und alle Werte von Variablen gilt: Entweder e oder not e hat den Wahrheitswert True. Entweder e oder not e hat den Wahrheitswert False. (Prinzip des ausgeschlossenen Dritten) e und not e können nicht beide den Wahrheitswert True haben. (Satz des Widerspruchs) anot a TrueFalse True

13 Die Disjunktion (or) Der or - Operator ist nicht-exklusiv Der or - Operator ist kommutativ Disjunktionsprinzip: Eine or-Disjunktion hat den Wahrheitswert True, ausser beide Operanden haben den Wert False. aba or b True FalseTrue FalseTrue False

14 Die Konjunktion (and) Der and-Operator ist kommutativ. Dualität von and und or: (a and b) = not( (not a) or (not b) ) (a or b) = not( (not a) and (not b) ) Konjunktionsprinzip: Eine and–Konjunktion hat den Wahrheitswert False, ausser beide Operanden haben den Wert True. aba and b True False TrueFalse

15 Komplexere Ausdrücke Auch komplexere Boolesche Ausdrücke sind möglich. Beispiele: a and (b and (not c)) not ( not ( not ( not ( not a ) ) ) )

16 Belegungen und Wahrheitstabellen Eine Belegung für eine Menge von Variablen: eine bestimmte Wahl von Wahrheitswerten (True oder False) für jede Variable. Eine Belegung erfüllt einen Ausdruck, falls der Wahrheitswert des Ausdrucks True ist. Eine Wahrheitstabelle für einen Ausdruck mit n Variablen hat n + 1 Spalten 2 n Zeilen

17 Wahrheitstabelle für die Grundoperationen abnot aa or ba and b True FalseTrue FalseTrueFalse True False

18 Tautologien Tautologie: Ein Boolescher Ausdruck, der für jede mögliche Belegung den Wahrheitswert True hat. Beispiele: a or (not a) not (a and (not a)) (a and b) or ((not a) or (not b))

19 Widersprüche und Erfüllbarkeit Widerspruch: Ein Boolescher Ausdruck, der für alle möglichen Belegungen den Wahrheitswert False hat. Beispiele: a and (not a) Erfüllbarer Ausdruck: Ein Ausdruck ist erfüllbar, sofern er für mindestens eine Belegung den Wahrheitswert True hat. Jede Tautologie ist erfüllbar. Jeder Widerspruch ist unerfüllbar.

20 Äquivalenz (=) Der = Operator ist kommutativ. (a = b hat denselben Wert wie b = a) Der = Operator ist reflexiv. (a = a ist eine Tautologie für jedes a) Substitution: Für alle Ausdrücke u, v und e gilt: Falls u = v eine Tautologie ist und e der Ausdruck ist, den man erhält, wenn man in e jedes Vorkommen von u durch v ersetzt, dann ist e = e eine Tautologie. aba = b True False TrueFalse True

21 De Morgansche Gesetze De Morgansche Gesetze: Tautologien (not (a or b)) = ((not a) and (not b)) (not (a and b)) = ((not a) or (not b)) Weitere Tautologien (Distributivität): (a and (b or c)) = ((a and b) or (a and c)) (a or (b and c)) = ((a or b) and (a or c))

22 Syntaxkonvention und Vorrangregeln Vorrangregeln (höchster Vorrang zuerst): not, and, or, implies (wird später vorgestellt), = and und or sind assoziativ: a and (b and c) = (a and b) and c a or (b or c) = (a or b) or c Stilregeln: Wenn Sie einen Booleschen Ausdruck schreiben, können Sie folgende Klammern weglassen: Die Klammern auf beiden Seiten des =, falls der gesamte Ausdruck eine Äquivalenz ist. Die Klammern um aufeinanderfolgende elementare Terme, falls sie durch den gleichen assoziativen Operator getrennt sind.

23 Die Implikation (implies) Für jedes a,b gilt: a implies b = (not a) or b In a implies b ist a der Vordersatz, b der Nachsatz. Implikationsprinzip: Eine Implikation hat den Wahrheitswert True, ausser der Vordersatz hat den Wert True und der Nachsatz hat den Wert False. Zudem: Immer True falls der Vordersatz False ist. aba implies b True False True False True

24 Implikationen in natürlichen Sprachen implies hat in natürlichen Sprachen oft die Bedeutung von Kausalität (Wenn… dann…). Wenn das Wetter schön ist, gehen wir baden. Wenn du dieses Getränk ins Handgepäck nimmst, lassen sie dich nicht ins Flugzeug.

25 Ein häufiges Missverständnis über Implikationen Immer wenn a False ist, ergibt a implies b True, unabhängig von b : Falls heute Mittwoch ist, ist 2+2=5. Falls 2+2=5, ist heute Mittwoch. Beide der obigen Implikationen ergeben True. Die Fälle, in denen der Vordersatz False ist, sagen nichts über den Wahrheitswert des Nachsatzes aus.

26 Im Allgemeinen gilt folgendes nicht: a implies b = (not a) implies (not b) Ein (falsches!) Beispiel: Alle Zürcher, die am See wohnen, sind reich. Ich wohne nicht am See, also bin ich nicht reich. live_near_lake implies rich [1] (not live_near_lake ) implies (not rich )[2] Die Umkehrung der Implikation (1)

27 Die Umkehrung der Implikation (2) Korrekt: a implies b = (not b) implies (not a) Beispiel: Alle Leute, die am See wohnen, sind reich. Alice ist nicht reich, also kann sie nicht in Küsnacht wohnen. live_near_lake implies rich = (not rich ) implies (not live_near_lake )

28 Implikation

29 Semi-strikte Boolesche Operatoren (1) Ein Beispielausdruck (x ist eine ganze Zahl): False für x < 0 Undefiniert für x = > + x x

30 Semi-strikte Boolesche Operatoren (2) ABER: Division durch null: x darf nicht 0 sein. (x /= 0) and (((x + 7) / x) > 1) False für x < 0 False für x = 0

31 Semi-strikte Boolesche Operatoren (3) ABER: Unser Programm würde während der Auswertung der Division abstürzen. Wir brauchen eine nicht-kommutative Version von and (und or): Semi-strikte Boolesche Operatoren

32 Semi-strikte Operatoren (and then, or else) a and then b ergibt dasselbe wie a and b falls a und b definiert sind, und ergibt immer False wenn a den Wert False hat. a or else b ergibt dasselbe wie a or b falls a und b definiert sind, und ergibt immer True wenn a den Wert True hat. (x /= 0) and then (((x + 7) / x) > 1) Semi-strikte Operatoren ermöglichen es uns, eine Auswertungsreihenfolge zu definieren (von links nach rechts) Wichtig für Programmierer, da undefinierte Objekte zu Programmabstürzen führen können!

33 Normale vs. Semi-strikte Boolesche Operatoren Benutzen Sie… normale boolesche Operatoren (and und or), falls Sie garantieren können, dass beide Operanden definiert sind. and then, falls eine Bedingung nur dann Sinn ergibt, wenn eine andere wahr ist. or else, falls eine Bedingung nur dann Sinn ergibt, wenn eine andere falsch ist. Beispiel: Falls Sie nicht ledig sind, muss Ihr Ehepartner den Vertrag unterschreiben. is_single or else spouse_must_sign

34 Semi-strikte Implikation Beispiel: Falls Sie nicht ledig sind, muss Ihr Ehepartner den Vertrag unterschreiben. (not is_single) implies spouse_must_sign Definition von implies: in unserem Fall immer semi-strikt! a implies b = (not a) or else b

35 Eiffel-Notation für Boolesche Operatoren Schlüsselwort in EiffelMathematisches Symbol not~ oder ¬ or and = implies

36 Aussagen- und Prädikatenkalkül Aussagenkalkül: Eigenschaft p gilt für ein einziges Objekt Prädikatenkalkül: Eigenschaft p gilt für mehrere Objekte

37 Ein allgemeineres or G : eine Gruppe von Objekten, p : eine Eigenschaft or: Ist p für mindestens ein Objekt in G erfüllt? Kann man an mindestens einer Haltestelle der Linie 8 auf eine andere Linie umsteigen? Station_Balard.is_exchange or Station_Lourmel.is_exchange or Station_Boucicaut.is_exchange or … (alle Stationen der Linie 8) Der Existenzquantor: exists oder s : Stations_8 | s.is_exchange Es gibt eine Haltestelle s in Stations_8 so dass s.is_exchange wahr ist.

38 Ein allgemeineres and and: Ist p für jedes Objekt in G erfüllt? Sind alle Haltestellen der Linie 8 Haltestellen, an denen man umsteigen kann? Station_Balard.is_exchange and Station_Lourmel.is_exchange and Station_Boucicaut.is_exchange and … (alle Stationen der Linie 8) Der Allquantor: for_all oder s: Stations_8 | s.is_exchange Für alle s in Stations_8 gilt s.is_exchange.

39 Ausdrücke mit dem Existenzquantor Ein Boolescher Ausdruck: s : SOME_SET | s.some_property True genau dann, wenn mindestens ein Element von SOME_SET die Eigenschaft some_property erfüllt. Beweise: True: Finden Sie ein Element in SOME_SET, welches die Eigenschaft erfüllt. False: Beweisen Sie, dass kein Element von SOME_SET die Eigenschaft erfüllt. (Sie müssen also alle Elemente überprüfen.)

40 Ausdrücke mit dem Allquantor Ein Boolescher Ausdruck: s: SOME_SET | s.some_property True genau dann, wenn jedes Element von SOME_SET some_property erfüllt. Beweise: True: Beweisen Sie, dass jedes Element von SOME_SET die Eigenschaft erfüllt. (Sie müssen also alle Elemente überprüfen.) False: Finden Sie ein Element von SOME_SET, welches die Eigenschaft nicht erfüllt.

41 Dualität Die Verallgemeinerung des De Morganschen Gesetzes: not ( s : SOME_SET | P ) = s : SOME_SET | not P

42 Leere Mengen s : SOME_SET | some_property Falls SOME_SET leer ist: immer False s : SOME_SET | some_property Falls SOME_SET leer ist: immerTrue

43 Lesen Sie auf nächste Woche… … das Kapitel 6 (object creation) Beginnen Sie mit dem Lesen des Kapitels 7 (control structures)

44 Was wir heute gesehen haben: Die Logik als Werkzeug des logischen Denkens Boolesche Operationen und ihre Wahrheitstabellen Eigenschaften von Booleschen Operatoren: Benutzen Sie keine Wahrheitstabellen! Das Prädikatenkalkül: Logische Aussagen über Mengen Semi-strikte Boolesche Operatoren