Einführung in die Programmierung Vorlesung 3

Werbung
1
2
Einführung in die Programmierung
Vorlesung 3: Logik
Peter Müller
Chair of Software Engineering
Chair of Software Engineering
Intro – Lecture 3
Logisches Denken
3
ƒ Programmieren ist logisches Denken.
ƒ Logik ist die Wissenschaft des logischen Denkens.
ƒ Wir benutzen Logik im Alltag:
ƒ “Sokrates ist ein Mensch. Alle Menschen sind
sterblich. Sokrates muss sterblich sein.”
Chair of Software Engineering
ƒ Eine Bedingung ist boolescher Ausdruck:
Sie besteht aus
ƒ booleschen Variablen
(identifizieren einen booleschen Wert)
ƒ booleschen Operatoren
(not, or, and, =, implies)
Und stellt möglicherweise einen
ƒ booleschen Wert
(Wahrheitswerte, entweder True oder False).
Logisches Denken und Programmieren
4
ƒ Logik ist die Grundlage von
ƒ Mathematik: Beweise sind nur gültig, wenn sie
die Regeln der Logik befolgen.
ƒ Software Entwicklung:
ƒ Bedingungen in Verträgen: “x darf nicht Null
sein, damit man … ausrechnen kann.”
(wird später vorgestellt)
ƒ Bedingungen in Programmen: “Wenn i positiv
ist, führe diese Instruktion aus.”
(wird später vorgestellt)
Chair of Software Engineering
Intro – Lecture 3
Boolesche Ausdrücke
Intro – Lecture 3
5
Intro – Lecture 3
Beispiele
6
ƒ Beispiele boolescher Ausdrücke mit rain_today und
cuckoo_sang_last_night als boolesche Variabeln:
ƒ rain_today
(eine boolesche Variabel ist ein boolescher
Ausdruck)
ƒ not rain_today
ƒ (not cuckoo_sang_last_night) implies
rain_today
(Klammern: gruppieren von Teilausdrücken)
dar.
Chair of Software Engineering
Intro – Lecture 3
Chair of Software Engineering
Intro – Lecture 3
1
Negation (not)
Disjunktion (or)
7
8
a
not a
a
b
a or b
True
False
True
True
True
False
True
True
False
True
False
True
True
False
False
False
ƒ
Eigenschaften der Negation:
Für einen beliebigen booleschen Ausdruck e und beliebige Werte
seiner Variabeln:
ƒ Genau einer der Ausdrücke e und not e hat immer den Wert
True.
ƒ Genau einer der Ausdrücke e und not e hat immer den Wert
False.
ƒ Einer der Ausdrücke e und not e hat den Wert True.
(Prinzip der ausgeschlossenen Mitte.)
ƒ Nicht beide Ausdrücke e und not e haben den Wert True.
(Prinzip der Widerspruchsfreiheit.)
Chair of Software Engineering
ƒ or Operator ist nicht-exklusiv.
ƒ or Operator ist kommutativ.
ƒ Disjunktionsprinzip:
ƒ Eine or Disjunktion hat den Wert True ausser wenn beide
Operanden den Wert False haben.
Chair of Software Engineering
Intro – Lecture 3
Konjunktion (and)
9
a
b
a and b
True
True
True
True
False
False
False
True
False
False
False
False
Intro – Lecture 3
Komplexe Ausdrücke
10
ƒ Bilde komplexere boolesche Ausdrücke mit Hilfe
der booleschen Operatoren.
ƒ Beispiel: a and (b and (not c))
ƒ and Operator is kommutativ.
ƒ Die Dualität von and und or: Eigenschaften von jeweils
einem der beiden Operatoren ergeben Eigenschaften des
anderen Operators (vertausche True und False).
ƒ Konjunktionsprinzip:
ƒ Eine and Konjunktion hat den Wert False ausser wenn
beide Operanden True sind.
Chair of Software Engineering
Belegung und Wahrheits Tafel
ƒ Belegung für eine Menge von Variabeln: Für jede
Variabel wird entweder True oder False gewählt.
ƒ Eine Belegung erfüllt einen Ausdruck, wenn der
Wert des Ausdrucks True ist.
ƒ Eine Wahrheitstafel für einen Ausdruck mit n
Variabeln hat
ƒ n+1 Spalten
ƒ 2n Zeilen
Chair of Software Engineering
Chair of Software Engineering
Intro – Lecture 3
Intro – Lecture 3
11
Intro – Lecture 3
Doppelaussagen (Tautologien)
12
ƒ Tautologie: Ein boolescher Ausdruck hat den Wert
True für jede mögliche Belegung.
ƒ Beispiel:
ƒ a or (not a)
ƒ not (a and (not a))
ƒ (a and b) or ((not a) or (not b))
Chair of Software Engineering
Intro – Lecture 3
2
Widerspruch
ƒ Widerspruch: Ein boolescher Ausdruck, der False
ist für jede mögliche Belegung.
ƒ Beispiel:
ƒ a and (not a)
15
ƒ Mehr Tautologien:
ƒ (a and (b or c)) = ((a and b) or (a and c))
ƒ (a or (b and c)) = ((a or b) and (a or c))
True
True
False
False
False
True
False
False
False
True
17
b
a implies b
True
True
True
True
False
False
False
True
True
False
False
True
Intro – Lecture 3
Präzedenzen
Chair of Software Engineering
a
ƒ
ƒ
a=b
True
16
Stilregeln:
Wenn man einen booleschen Ausdruck schreibt, kann man die
Klammern um folgende Konstrukte weglassen:
• Um die Ausdrücke auf beiden Seiten des “=“ Zeichens, falls der
ganze Ausdruck eine Äquivalenz ist.
• Um aufeinanderfolgende elementare Terme, wenn sie von den
selben assoziativen Operatoren unterteilt sind.
Intro – Lecture 3
Implikation (implies)
ƒ
b
True
ƒ Präzedenzen (beginnend mit der stärksten): 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
ƒ Gesetze von De Morgan: Tautologien
ƒ (not (a or b)) = ((not a) and (not b))
ƒ (not (a and b)) = ((not a) or (not b))
Chair of Software Engineering
a
Chair of Software Engineering
Intro – Lecture 3
Gesetz von De Morgan
14
ƒ = Operator ist kommutativ (a=b hat den selben Wert wie
b=a).
ƒ = Operator ist reflexiv (a=a ist eine Tautologie für alle a).
ƒ Substitution:
ƒ Für Ausdrücke u, v und e, falls u = v eine Tautologie ist
und e’ der Ausdruck den man erhält, wenn man in e jedes
Vorkommen von u mit v ersetzt, dann ist e = e’ eine
Tautologie.
ƒ Erfüllbar: Für mindestens eine Belegung liefert der
Ausdruck True.
> Jede Tautologie ist erfüllbar.
> Kein Widerspruch ist erfüllbar.
Chair of Software Engineering
Äquivalenz (=)
13
Intro – Lecture 3
Implikationen in der natürlichen Sprache
18
ƒ implies in natürlicher Sprache: “if … then …”
ƒ Beispiele:
ƒ “Wenn wir noch mehr Sonne kriegen, wird das
ein tolles Jahr für den Burgunder.”
ƒ “Wenn auf Deinem Ticket steht Flug 2034, dann
fliegst Du nicht heute.”
a implies b, für alle booleschen Werte a und b, ist der Wert von
(not a) or b
In a implies b: wird a Antecedent genannt, und b Consequent.
Implikationsprinzip:
ƒ Eine Implikation hat den Wert True, ausser wenn ihr Antecedent
den Wert True und ihr Consequent den Wert False hat.
ƒ Sie hat immer den Wert True, wenn ihr Antecedent False ist.
Chair of Software Engineering
Intro – Lecture 3
Chair of Software Engineering
Intro – Lecture 3
3
Falschverstehen von Implikationen
19
Hollywood_actor implies rich =
(not Hollywood_actor) implies (not rich)
Chair of Software Engineering
Intro – Lecture 3
Umkehren von Implikationen (2)
21
ƒ Richtig: a implies b = (not b) implies (not a)
ƒ Beispiel:
ƒ “All Hollywood actors are rich. I am not rich, so
I can’t be a Hollywood actor.”
ƒ Aber:
ƒ Division durch null: x darf nicht 0 sein.
+7 > 0 )
>(x /= 0) and ( x x
Chair of Software Engineering
Intro – Lecture 3
Nicht- strikte boolesche Operatoren (1)
22
x +7 > 0
x
True für x > -7, x≠0
False für x <= -7
Undefiniert für x = 0
Chair of Software Engineering
Intro – Lecture 3
Nicht- strikte boolesche Operatoren (2)
Intro – Lecture 3
ƒ Beispiel: boolescher Ausdruck (x ist ein Integer):
Hollywood_actor implies rich =
(not rich) implies (not Hollywood_actor)
Chair of Software Engineering
20
ƒ Falsch: a implies b = (not a) implies (not b)
ƒ Beispiel:
ƒ “All Hollywood actors are rich. I am not a
Hollywood actor, so I am not rich.”
ƒ Wenn a False ist, ist a implies b True, unabhängig
von b:
ƒ “Wenn ich der Papst bin, ist 2+2=5.”
ƒ “Wenn 2+2=5 sind, bin ich der Papst.”
> Falls ich nicht der Papst bin, und 2+2 nicht 5
ist, sind die Implikationen oben True.
> Fälle, in denen a False ist, erlauben keine
Aussage über die Wahrheit des Consequent.
Chair of Software Engineering
Umkehren von Implikationen (1)
23
Intro – Lecture 3
Nicht- strikte boolesche Operatoren (3)
24
ƒ ABER:
ƒ and ist kommutativ (Programm würde
abstürzen).
> Wir brauchen eine nicht-kommutative Version
von and (und natürlich auch von or) > nichtstrikte boolesche Operatoren.
Chair of Software Engineering
Intro – Lecture 3
4
Nicht-strikte boolesche Operatoren (and then,
or else)
25
ƒ a and then b: Hat den selben Wert wie a and b,
wenn a und b definiert sind, und ist False, wenn a
False ist.
ƒ a or else b: Hat den selben Wert wie a or b,
wenn a und b definiert sind, und ist True, wenn a
den Wert True hat.
+7 > 0 )
> (x /= 0) and then ( x x
ƒ Beispiel:
ƒ “If you are not single, then your spouse must
sign the contract.”
is_single or else spouse_must_sign
Chair of Software Engineering
Intro – Lecture 3
Nicht-strikte Implikation
27
ƒ Beispiel:
ƒ “If you are not single, then your spouse must
sign the contract.”
(not is_single) implies spouse_must_sign
ƒ Definition von implies: In unserem Fall immer
nicht-strikt!
ƒ a implies b = (not a) or else b
Chair of Software Engineering
ƒ Aussagenlogik: Eigenschaft p gilt für ein einzelnes
Objekt.
ƒ Prädikatenlogik: Eigenschft p gilt für mehrere
Objekte.
29
Intro – Lecture 3
Eiffel Keywords und mathematische
Symbole
Eiffel Keyword
Übliches mathematisches
Symbol
not
~ oder ¬
or
∨
and
∧
=
⇔
implies
⇒
Chair of Software Engineering
Intro – Lecture 3
Aussagen und Prädikatenlogik
26
ƒ Benutze
ƒ Gewöhnliche boolesche Operatoren (and und
or), wenn Du garantieren kannst, dass beide
Operanden definiert sind.
ƒ and then, wenn eine Bedingung nur Sinn
macht, wenn eine andere True ist.
ƒ or else, wenn eine Bedingung nur Sinn macht,
wenn eine andere False ist.
ƒ Nicht-strikte Operatoren erlauben, eine Ordnung
der Ausdrucksevaluation zu definieren (von links
nach rechts).
>Wichtig fürs Programmieren, wenn undefinierte
Objekte Programmabstürze verursachen
können.
Chair of Software Engineering
Gewöhnliche vs. nicht-strikte boolesche
Operatoren
28
Intro – Lecture 3
Generalisierung von or
30
ƒ G: Gruppe von Objekten, p: Eigenschaft
ƒ or: Erfüllt midestens eines der Objekte in G p?
Kann man bei mindestens einer Station der Line 8
umsteigen?
Station_Balard.is_exchange or
Station_Lourmel.is_exchange or
Station_Boucicaut.is_exchange or … (alle
Stationen der Line 8)
ƒ Existenz-Quantor: exists, oder ∃
∃ s: Stations8 | s.is_exchange
“Es exisitiert ein s in Stations8 so dass,
s.is_exchange true ist”
Chair of Software Engineering
Intro – Lecture 3
Chair of Software Engineering
Intro – Lecture 3
5
Generalisierung von and
31
ƒ and: Erfüllt jedes Objekt in G p?
Kann man bei allen Stationen von Tram 8
unsteigen?
Station_Balard.is_exchange and
Station_Lourmel.is_exchange and
Station_Boucicaut.is_exchange and … (alle
Stationen der Line 8)
ƒ Beweisen
ƒ True: Finde ein Element aus SOME_SET, das die
Eigenschaft erfüllt.
ƒ False: Beweise, dass kein Element aus
SOME_SET die Eigenschaft erfüllt (überprüfe
alle Elemente).
Chair of Software Engineering
Intro – Lecture 3
Universell quantifizierte Ausdrücke
32
ƒ boolesche Ausdrücke:
∃ s: SOME_SET | s.some_property
ƒ True genau dann, wenn mindestens eines der
Elemente von SOME_SET some_property erfüllt.
ƒ All-Quantor: for_all, oder ∀
∀ s: Stations8 | s.is_exchange
“Für alle s in Stations8 ist s.is_exchange true”
Chair of Software Engineering
Existenz qualifizierte Ausdrücke
33
Intro – Lecture 3
Dualität
34
ƒ Generalisierung von DeMorgan’s Gesetzen:
ƒ boolesche Ausdrücke:
∀ s: SOME_SET | s.some_property
ƒ True genau dann, wenn jedes Element der Menge
SOME_SET die Eigenschaft some_property erfüllt,
not (∃ s: SOME_SET | P) = ∀ s: SOME_SET | not P
> Was ist mit leeren Mengen?
not (∀ s: SOME_SET | P) = ∃ s: SOME_SET | not P
not (∃ s: SOME_SET | not s.some_property)
ƒ Beweisen
ƒ True: Beweise, dass jedes Element von SOME_SET die
Eigenschaft erfüllt (überprüfe alle Elemente).
ƒ False: Finde ein Element von SOME_SET, das die
Eigenschaft nicht erfüllt.
Chair of Software Engineering
Chair of Software Engineering
Intro – Lecture 3
Leere Mengen
Intro – Lecture 3
35
36
ƒ ∃ s: SOME_SET | some_property
mit SOME_SET leer > immer False
ƒ ∀ s: SOME_SET | some_property
mit SOME_SET leer > immer True
Chair of Software Engineering
Intro – Lecture 3
Ende Vorlesung 3
Chair of Software Engineering
Intro – Lecture 3
6
Herunterladen