Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von...

61
Simplifier: Datenstrukturabh¨ angige Regeln Simplifierregeln sind Axiome oder Theoreme (Sequenzen), die einen entsprechenden Verwendungseintrag haben Die syntaktische Form bestimmt den Effekt Es gibt mehrere Klassen: Simplifierregeln Forward-Regeln Alle Regeln k¨ onnen lokal oder global sein Zentral f¨ ur das Verst¨ andnis von KIV: Welche Simplifierregel hat welchen Effekt? 7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 70 / 290

Transcript of Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von...

Page 1: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Datenstrukturabhangige Regeln

• Simplifierregeln sind Axiome oder Theoreme (Sequenzen),die einen entsprechenden Verwendungseintrag haben

• Die syntaktische Form bestimmt den Effekt

• Es gibt mehrere Klassen:• Simplifierregeln• Forward-Regeln

• Alle Regeln konnen lokal oder global sein

Zentral fur das Verstandnis von KIV:Welche Simplifierregel hat welchen Effekt?

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 70 / 290

Page 2: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Lokale und globale Regeln

2 Klassen von Simplifierregeln

• Lokale Simplifierregeln: Werden in Beweisen uber der Spezifikation,in der sie definiert sind, benutzt.

• Globale Simplifierregeln: Werden in Beweisen in Spezifikationen, dieuber der, in der sie definiert sind, benutzt.

Pragmatik

• Lokal werden Axiome als Simplifierregeln verwendet

• Global werden Theoreme verwendet, die “gute” Simplifierregeln sind

Analog fur Forward-Regeln

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 71 / 290

Page 3: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Eingabe von Simplifierregeln

Theoreme werden als Simplifierregeln eingetragen, wahlweise durch:

• Am Ende der Sequenz in der specification/sequents-Datei:used for: s, ls;

used for: f, lf;

• Auf Spezifikationsebene im Menu:Add (Local) Simplifierrules

Add (Local) Forwardrules

• Auf Spezifikationsebene: Durch Rechtsklick auf das Theoremund Anklicken der Checkbox

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 72 / 290

Page 4: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Typen von Simplifierregeln

Simplifierregeln (mit Eintrag s und/oder ls) gehoren zu einer der Klassen

• Termersetzungsregel = Rewriteregel:

Generelle Form: Γ ` ϕ → (σ = τ)Effekt: (Instanzen von) σ durch τ ersetzen

• Formelersetzungsregel = Aquivalenzregel

Generelle Form: Γ ` ϕ → (ψ ↔ χ)Effekt: (Instanzen von) ψ durch χ ersetzen

• Assoziativitat und Kommutativitat:

Generelle Form: (a + b) + c = a + (b + c) und a + b = b + aEffekt: Alle anderen Regeln modulo Ass. und Komm. anwenden

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 73 / 290

Page 5: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Pragmatik von Bedingungen

Rewrite- und Aquivalenzregeln haben die generelle Form

Γ ` ϕ → σ = τ und Γ ` ϕ → (ψ ↔ χ)

• Vorbedingungen Γ und ϕ:Als Formel dieselbe Bedeutung, aber unterschiedlich behandelt.

• ϕ = ϕ1 ∧ . . . ∧ ϕn muss Konjunktion von Literalen sein

• Literal = evtl. negierte atomare Formel

• Atomare Formel = Anwendung von Gleicheit odernicht vordefiniertem Pradikat (ungleich ∧, ∨, . . . ) auf Terme

• (Instanzen von) ϕ1, . . . , ϕn werden in Sequenz gesucht:Nichtnegierte Formeln im Antezedent, negierte im Sukzedent

• Γ wird versucht durch rekursiven Simplifieraufruf zu beweisen

• Γ darf beliebige Formeln enthalten

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 74 / 290

Page 6: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Pragmatik von Bedingungen

Wann sollte man Vorbedingungen in Γ stecken, wann in ϕ1, . . . ,ϕn?

• Vorbedingungen vor dem Sequenzenhaken in Γ sollten nur danndefiniert werden, wenn sie in sinnvollen Sequenzen immer erfullt sind.

• Typische sinnvolle Vorbedingungen sind Definiertheitsbedingungen:

• m −1 (Vorganger von m) ist nur fur m 6= 0 definiert• m − n ist nur fur n ≤ m definiert• .rest und .last sind nur fur nichtleere Listen definiert• Arrays: i < #ar sollte fur Zugriff a[i ] immer wahr sein

• Wenn man die Pragmatik nicht befolgt:Viele nutzlose Simplifieraufrufe (wird schnell sehr langsam)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 75 / 290

Page 7: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Beispiele zu Vorbedingungen

• n 6= 0 ` (m < n −1 ↔ m +1 < n)Vorbedingung ok im Antezedent, da 0 −1 nicht sinnvoll ist

• ` m < n → (n < m + 2 ↔ m + 1 = n)Nicht im Antezedent, sonst, sobald Instanzen von n < m + 2vorkommen: Viele unnotige Beweisversuche fur m < n

• m ≤ n ` (n − m) + m = m

Beweist z. B. die Sequenz f(x) > 5 ` (f(x) − 3) + 3 = f(x)(da der Simplifier f(x) > 5 ` 3 ≤ f(x) beweisen kann)

` m ≤ n → (n − m) + m = m beweist die Sequenz nicht,da 3 ≤ f(x) nicht in der Sequenz vorkommt

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 76 / 290

Page 8: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Rewrite-Regeln

Γ ` ϕ → σ = τ

ersetzt (Instanzen von) σ durch τ , wenn Vorbedingungen ok

Einschrankungen:

• free(ϕ) ∪ free(σ) muß alle freien Variablen abdecken

• σ und τ mussen Terme sein, σ darf keine Variable sein

Beispiele:

• (m + n) − n = m

• i > 0 → sqrt(i ˆ 2) = i (i integer; warum nicht im Antezedent?)

• (s1 ∪ s2) \ s2 = s1 \ s2 (Mengen)

• x 6= [] → (x + y).first = x .first (Listen, + = append, warum nichtAnt.?)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 77 / 290

Page 9: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Aquivalenzregeln

Γ ` ϕ → (ψ ↔ χ)

ersetzt (Instanzen von) ψ durch χ, wenn Vorbedingungen ok

Einschrankungen:

• free(ϕ) ∪ free(ψ) muß alle freien Variablen abdecken

• ψ muss Literal sein, χ ist beliebige Formel

• Vereinfachung: Falls ψ keine Gleichung, statt (ψ ↔ true) nur ψ

• Vereinfachung: Statt (ψ ↔ false) nur ¬ ψ

Beispiele:

• sorted(a + []), # x = 0 ↔ x = [] (Listen)

• m + n < m + n0 ↔ n < n0

• n 6= 0 ` (m < n −1 ↔ m +1 < n)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 78 / 290

Page 10: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Kommutativitat und Assoziativitat

• Kommutativitat: m + n = n + m

• Assoziativitat: (m + n) + k = n + (m + k)

• Kurz: C(+), A(+), AC(+) fur komm., ass., komm. und ass.

• Werden nicht direkt verwendet (Warum?)

• Ob eine Simplifierregel passt, wird “modulo” dieser Regeln gepruft

• ` a + b ∗ c = c ∗ b + a wird mit C(+,*) sofort (per Reflexivitat)bewiesen

• ` b ∗ c ≤ (c ∗ a) ∗ b wird fur AC(∗) mit der Regel m ≤ m ∗ nbewiesen

• Viele Operatoren sind AC: +, ∗, min, ggt, ∪• Nur assoziativ ist z. B. append auf Listen, ∗ auf Matrizen

• Nur kommutativ ist sehr selten

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 79 / 290

Page 11: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Forwardregeln

• Manchmal will man neue Information zu einer Sequenz dazunehmen

• Fast nur fur Transitivitat von Ordnungs- und Aquivalenzrelationen:• m < n ∧ n < n0 → m < n0• isperm(x , y) ∧ isperm(y , z) → isperm(x , z)

• Dazu gibt es Forward-Regeln der Form:

Γ ` ϕ1 ∧ . . . ∧ ϕn → ϕ

• Vorbedingungen werden wie bei Simplifierregeln behandelt

• ϕ wird genau einmal zur Sequenz addiert

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 80 / 290

Page 12: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Simplifier: Hinweise zu Forwardregeln

• Transitivitat ist unkritisch (sollte man machen)

• Haufig etliche Varianten notwendig:• m < n ∧ n ≤ n0 → m < n0• m < n ∧ ¬ n0 < n → m < n0• m ≤ n + 1 ∧ n < n0 → m ≤ n0

• Ein Lemma sollte nie Forward- und Simplifierregel sein. Warum?

• Forward-Regeln geben sehr leicht Endlosschleifen im Simplifier! ⇒Sehr vorsichtig, nur mit gutem Grund verwenden

• Einfaches Bsp. fur Endlosschleife: ` m < n → m < n + 1

• Bsp.: 0 < n ` (∗ n) ≤ m → m 6= 0

• Warum nur (∗ n) und nicht einfach n? Warum 0 < n im Antezedent?

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 81 / 290

Page 13: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

KIV-Kalkul: Elimination fur Selektoren

• Listen haben (Postfix-)Selektoren• .first (erstes Element)• .rest (Rest der Liste)

• Trick: Selektoren loswerden mit Hilfe von insert elim lemma

• Benotigt wird Lemma` x 6= [] → (a = x .first ∧ y = x .rest ↔ x = a + y)

• Eliminationsregel sucht einen Term t.first oder t.rest

• Wenn t 6= [] gilt, wird t = a + y ersetzt (neue Variablen a, y)

• Damit wird aus t.first bzw. t.rest jetzt a bzw. y

t = a + y ,Γ(a, y , a + y) ` ∆(a, y , a + y)

t 6= [],Γ(t.first, t.rest, t) ` ∆(t.first, t.rest, t)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 82 / 290

Page 14: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

KIV-Kalkul: Elimination fur andere Funktionen

• Manchmal geht Elimination auch fur andere “unbeliebte” Funktionen

• Beliebte Beispiele: Minus und Division

• Lemma fur Minus: n ≤ m ` n0 = m − n ↔ m = n0 + n

• Vorteil: Man kann auf Simplifierregeln fur − verzichten!

• Nachteil: Neue Variable n0 wird eingefuhrt (manchmal unintuitiv)

Γ(n0 + n, n, n0) ` ∆(n0 + n, n, n0)

n ≤ m, Γ(m, n,m − n) ` ∆(m, n,m − n)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 83 / 290

Page 15: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Automatisierung in KIV: Heuristiken

• Flexible Automatisierung ist zentral, um bei grossen Fallstudien nichtimmer wieder die gleichen Beweisschritte wiederholen zu mussen

• Deshalb in KIV: Automatisierung durch zuschaltbare Heuristiken

• Speziell: Der Simplifier ist eine Heuristik⇒ Sollte man (fast) immer benutzen

• Fur jedes Beweisziel werden alle Heuristiken der Reihen nachausprobiert

• Gewahlte Heuristiken jederzeit anderbar

Sehr wichtig fur das Verstandnis von KIV:Welche Heuristik hat welchen Effekt?

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 84 / 290

Page 16: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wichtige Heuristiken fur PL in KIV (1)

• Simplifier• Wendet die Simplifier-Regel an

• pl case distinction• Wendet Regel case distinction an• Fur einfache bis mittelschwere Beweise• Gefahr, unnotige Fallunterscheidungen zu machen

• if-then-else-split• if-then-else-Operator:

(ϕ ⊃ σ; τ) bezeichnet σ, falls ϕ wahr ist, sonst τ• Wendet cut Regel mit ϕ an• Haufig einsetzbar, um sinnvolle Fallunterscheidungen zu erzwingen• Beispiel: Fallunterscheidung nach Anwendung von Rewrite-Regel

abs(i) = (i ≥ 0 ⊃ i ; − i)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 85 / 290

Page 17: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wichtige Heuristiken fur PL in KIV (2)

• Quantifier closing• Sucht Instanzen, mit denen eine Pramisse direkt geschlossen werden

kann• Immer verwenden• Einziges Problem: Bei sehr vielen Quantoren braucht die Heuristik viel

unnotige Zeit• Deshalb Spezifikationsmethodik:

Pradikat (+ Simplifierregeln) definieren statt grosse Quantorenformelnzu verwenden

• Quantifier:• Sucht

”sinnvolle“ Instanzen fur Quantoren

• Kann Endlosschleifen verursachen!• Nur bei einfachen Quantorenbeweisen einsetzbar

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 86 / 290

Page 18: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wichtige Heuristiken fur PL in KIV (3)

• structural induction:• Macht strukturelle Induktion uber “sinnvolle” Terme• Idee fur “sinnvoll”: Variablen an rekursiven Positionen:

n ist sinnvoll in m + n, da + rekursiv uber das zweite Argumentdefiniert: m + 0 = m, m + (n +1) = (m + n) +1

• Klappt meistens, aber nicht immer• Heuristik wendet ausserdem einmal die Induktionshypothese an

• module specific:• Eigentlich eine Meta-Heuristik: Erlaubt heuristische Anwendung von

Regeln durch Patterns• Pattern: Gibt Formeln (oder Schemas fur Formeln) an, die in der

Sequenz vorkommen mussen bzw. nicht vorkommen durfen + Regeldie angewandt werden soll

• Alle Patterns stehen in der Datei module-specific

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 87 / 290

Page 19: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wichtige Heuristiken fur PL in KIV (4)

elimination:

• Heuristik gesteuert durch Eliminationsregeln(analog zu: Simplifier durch Simplifierregeln)

• KIV-Eingabe analog: used for: e; etc.

• Beispiel: n ≤ m ` n0 = m − n ↔ m = n0 + n

• Vorbedingung im Antezedent: n ≤ m muss beweisbar sein(analog zu Simplifierregeln)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 88 / 290

Page 20: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

KIV-Kalkul: Heuristiksatze

• In KIV: 3 vordefinierte Heuristiksatze:• PL Heuristics: Minimale Menge sinnvoller Heuristiken• PL Heuristics + Case Splitting: Keine Induktion, FU automatisch• PL Heuristics + Struct. Ind.:

Versucht, Ziel induktiv zu beweisen und Fallunterscheidungen (FU)automatisch zu machen

• Fur grossere Projekte definiert man haufig seinen eigenenStandardsatz⇒ Datei default-heuristics

• Weitere Heuristiken fur Programme (DL). Dort noch wichtiger, daProgramme mehr Struktur haben (spater)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 89 / 290

Page 21: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Formale Spezifikation und Induktion

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 90 / 290

Page 22: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Was ist ein SW-System mathematisch?

1. Sicht: Operational

Ein SW-System ist ein Automat

• mit Zustand,

• Zustandsubergangen und

• mit Ablaufen.

2. Sicht: Algebraisch

Ein SW-System ist eine Algebra = Datenstruktur, d. h. ein System vonDaten und Operationen.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 91 / 290

Page 23: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Was ist spezieller?

Einen Automaten kann man als spezielle Algebra auffassen:

• Zustand = Element einer Datenstruktur ⇒ Algebra!

• Sorten = State, Input, Output mit Operationen• Anfangszustande:

isinitial: State → Bool• Zustandsubergangsfunktion (oder auch Relation):

exec: Input × State → (State × Output → Bool)

• Z. B. Zustand eines Programms:Programm + Programmzahler + Speicherbelegung

• Theoretisch: Algebraische Sicht genugt

• Praktisch: Automatensicht hat viele Spezialeigenschaften(u. a. ist eine Idee von

”Zeit“ damit verbunden).

Deshalb Codierung oft nicht die beste Idee.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 92 / 290

Page 24: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

SW-Beschreibungsformalismen

SW-System ist Datentyp:

• Modellorientierte Spezifikation (Z, VDM):Alle Datentypen sind mit Mengenlehre gebildet (Tupel und Mengenz. B. fur UML-Klassendiagramme)

• Algebraische Spezifikation

SW-System ist Menge von Ablaufen:

• Algorithmische Spezifikation, z. B. Programmiersprachen

• Programme uber algebraischen/modellorientierten Datentypen

• Automaten, Harel/UML Statecharts, Abstract State Machines(ASMs)

Eignung hangt von den Zielen ab (Was will ich beschreiben? Wasbeweisen?)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 93 / 290

Page 25: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Spezifikation

Ziel: Ein bestimmter Datentyp (Algebra) soll spezifiziert werden.

Fragen:

1 Was fur Operationen brauche ich?

2 Welche Axiome brauche ich?

3 Welche Datentypen kann ich uberhaupt spezifizieren?

4 Kann ich alle wahren Aussagen uber dem Datentyp auch beweisen?

Zunachst: Fragen 3 + 4 speziell fur die naturlichen Zahlen

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 94 / 290

Page 26: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen: Die Peano-Axiome

• Es gibt eine ausgezeichnete Zahl 0 ∈ IN.

• Jede Zahl n ∈ IN hat einen Nachfolger succ(n) ∈ IN.

• Zu zwei Zahlen gibt es Summe m + n und Produkt m ∗ n

• Axiom 1: 0 ist kein Nachfolger.

• Axiom 2: Die Nachfolgerfunktion ist injektiv.

• Axiom 3: m + 0 = m, m + succ(n) = succ(m + n)

• Axiom 4: m ∗ 0 = 0, m ∗ succ(n) = m ∗ n + m

• Axiom 5: IN ist die kleinste Menge M mit:0 ∈ M und wenn n ∈ M, dann succ(n) ∈ M

Aus dem letzten Axiom folgt das Induktionsprinzip:Wenn ϕ(0) gilt, und sich ϕ von n auf n +1 vererbt, dann ist ϕ fur alle nwahr

Begrundung: M := {n : ϕ(n)} ist mindestens so groß wie IN.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 95 / 290

Page 27: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen: Mit PL nicht spezifizierbar!

Satz (Charakterisierung der naturlichen Zahlen)Die Peano-Axiome charakterisieren ein Modell (eben die naturlichenZahlen) bis auf Isomorphie (= Umbenennung).

Beachte dabei: Peano-Axiom 5 ist kein pradikatenlogisches Axiom!

Aber:

Satz von SkolemEs gibt keine Menge Ax-Nat von pradikatenlogischen Formeln, die alseinziges Modell (modulo Umbenennung) nur die naturlichen Zahlen hat.Beweisbar mit Vollstandigkeitssatz

Intuition: Pradikatenlogische Axiome konnen nicht ausdrucken, dass esneben den

”echten“ naturlichen Zahlen keine weiteren Zahlen gibt.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 96 / 290

Page 28: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen: Ein schwacheres Ziel

Wir wissen schon: Jede Axiomenmenge hat auch andereModelle als IN mit zusatzlichen Elementen.

Wir versuchen es schwacher: Suche Axiomenmenge, mit der alle uber INwahren Aussagen bewiesen werden konnen (dass sie auch uber anderenModellen gelten, konnte uns ja egal sein).

Die Axiomenmenge sollte entscheidbar sein, d. h. es gibt Programm,das immer terminiert und sagt: “ja, ist Axiom” oder “nein, ist keinAxiom”.Sonst Triviallosung: Nehme als Axiome samtliche wahren Aussagen.

Zum Beispiel: Nehme Induktionsschema zu den Axiomen dazu:ϕ0n ∧ (∀ n. ϕ → ϕn +1

n ) → ∀ n. ϕ; (: fur jedes ϕ ∈ For(Σ,X) :)

Die Formel ϕ(n) mit freier Variable n beschreibt die Menge{n : IN |= ϕ(n)}.Das Induktionsschema fur ϕ entspricht Peano-Axiom 5 fur diese Menge

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 97 / 290

Page 29: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen: Unvollstandigkeit

Problem: Alle Formeln (abzahlbar viele) beschreiben nicht alle Mengen(uberabzahlbar viele)!

Es gilt leider:

Godelscher UnvollstandigkeitssatzEs gibt keine entscheidbare Menge von Formeln uber (0, succ, +, ∗), diedie ersten 4 Peano-Axiome und n 6= 0 → ∃ n. n = succ(m) enthalt oderimpliziert, mit der sich alle in IN wahren Aussagen ableiten lassen(insbesondere ist das Induktionsschema auch unvollstandig).

Der Trick zum Beweis ist das Lugnerparadoxon (”ich luge jetzt“)

in Form einer Formel, die sagt:”Ich bin nicht beweisbar“.

Indem man die Formeln durchnumeriert (z.B. ASCII-Codierung),wird das

”Ich“ durch

”Meine Nummer“ ausdruckbar.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 98 / 290

Page 30: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen: Unvollstandigkeit

Intuition:

• Leider findet man auch keine”gute“ Axiomenmenge, mit der die

wahren Aussagen herleitbar sind

• Alle wahren Aussagen konnte man als Axiome trivialerweise nehmen.

• Die Menge der wahren Aussagen ist also nicht entscheidbar.

• Wahre Aussagen fur die naturlichen Zahlen zu beweisen, ist kreativ.

• Verursachte ziemlich viel Wirbel in den 30er Jahren:Die Idee, Mathematik auf ganz einfachen Grundlagen aufzubauen(Hilbert’sches Programm), war gescheitert

• Heute: Komplizierte Mengenlehre (Zermelo-Frankel, Godel-Bernays)als Grundlage fur Mathematik.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 99 / 290

Page 31: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Problem: Pradikatenlogik reicht nicht

Problem: Pradikatenlogik kann nicht ausdrucken, dass es ausser denZahlen 0, 1, 2 (= die aus 0 und +1 gebildeten Terme 0, 0 +1, 0 +1 +1, . . .)keine weiteren Elemente gibt.

Dasselbe Problem gibt es auch fur andere Datentypen:

• Alle ganzen Zahlen sind mit 0, +1, −1 gebildet• Alle Listen sind die aus [] und + gebildeten Terme:

[], a + [], a + b + [], . . .• Bei Listen: Terme durfen Elementvariablen enthalten

• Alle (endlichen) Graphen bekommt man aus dem leeren ∅, durchAddieren von Knoten (addnode) und Kanten (addedge)

• Alle Arrays bekommt man durch:• mkarray(n) (erzeugt Array der Grosse n)• put(a, i , d) (schreibt an Position i das Datum d)

Gemeinsame Idee: Alle Datenelemente durch endlich-malige Anwendungvon Konstruktoren bildbar

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 100 / 290

Page 32: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Generiertheitsklauseln: Syntax

Deshalb Idee: Wir definieren ein “Spezialaxiom”, genanntGeneriertheitsklausel, das aussagt: Die Daten eines Datentyps sind genaudie mit bestimmten Konstruktoren gebildeten Terme.

Syntaxs generated by C ist Termerzeugtheitsklausel (∈ Gen(Σ)) ⇔

• s ∈ S , C = {f1, . . . , fn} ⊆ OP,

• die Konstruktoren fi haben die Ergebnissorte s(Konstanten sind als Konstruktoren erlaubt)

• fur wenigstens ein fi sind alle Argumentsorten ungleich s(sonst gibt es keine Konstruktorterme!)

Ein Konstruktorterm t hat die Sorte s, ist mit Konstruktoren aus Cgebildet und enthalt nur Variablen anderer Sorten, ist also ausTs((S,C),X \ Xs).

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 101 / 290

Page 33: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Generiertheitsklauseln: Semantik

Idee: Jedes Element der generierten Sorte ist der Wert einesKonstruktorterms, wenn man die (Parameter)-Variablen geeignet belegt.

Semantik

A |= s generated by C :⇔fur jedes a ∈ As gibt es ein v und t ∈ Ts((S ,C ),X \ Xs) mit a = [[t]]A,v .

Beispiel: Zur Liste [2,5] gibt es den Konstruktorterm a + b + [].

Mit einer Belegung v der Variablen a, b als v(a) = 2 und v(b) = 5 gilt:

[[a + b + []]]A,v = [2,5].

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 102 / 290

Page 34: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Basisspezifikation

BasisspezifikationEine Spezifikation SP = (Σ, Ax , Gen) ist ein Tripel mit:

• Σ = (S , OP)

• Ax ⊆ For(Σ, X ) endlich

• Gen ⊆ Gen(Σ) endlich

ModellA ist Modell von SP (A |= SP, A ∈ Mod(SP))A |= SP :⇔ A ∈ Alg(Σ), A |= Gen und A |= Ax .

GultigkeitSP |= ϕ :⇔ fur alle A in Mod(SP): A |= ϕ

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 103 / 290

Page 35: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Konsistenz und Monomorphie

Definition Eine Spezifikation ist konsistent:⇔ Axiome nicht widerspruchlich⇔ Kein Beweis von false moglich⇔ Es gibt ein Modell A der Spezifikation

⇒ Das muss sein!

Definition Eine Spezifikation ist monomorph:⇔ Axiome legen Verhalten eindeutig fest⇔ Je zwei Modelle sind bis auf Umbenennung (Isomorphie) gleich

⇒ Sollte fur Datentypen wie naturliche Zahlen etc. so sein(die Axiome sollten ja nicht versehentlich auch reelle Zahlen erlauben).

⇒ Fur Systembeschreibungen oft nicht erforderlich bzw. wunschenswert.Man will ja gerade Details offenlassen.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 104 / 290

Page 36: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Minimale Spez. der naturlichen Zahlen in KIV

specificationsorts nat;constants 0 : nat;functions . +1 : nat → nat;induction nat generated by 0, +1;variables m, n : nat;axioms0 6= n +1;m 6= n → m +1 6= n +1;

end specification

ist konsistent und mononorph

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 105 / 290

Page 37: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Spez. der naturlichen Zahlen mit Add. und Mult.

specificationsorts nat;constants 0 : nat;functions . +1 : nat → nat;

. + . : nat × nat → nat;

. ∗ . : nat × nat → nat;induction nat generated by 0, +1;variables m, n : nat;axioms0 6= n +1;m 6= n → m +1 6= n +1;m + 0 = m; m + n +1 = (m + n) +1;m ∗ 0 = 0; m ∗ (n +1) = m * n + m;

end specification

ist konsistent und mononorph

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 106 / 290

Page 38: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Minimale Spez. der Listen in KIV

specificationsorts elem; list;constants [] : list;functions . + . : elem × list → list;induction list generated by [], +;variables a, b : elem;

x, y : list;axioms[] 6= a + x;a 6= b ∨ x 6= y → a + x 6= b + y;

end specification

ist konsistent und mononorph, wenn die Tragermengefur die Elemente vorgegeben ist (“monomorph modulo Parameter”)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 107 / 290

Page 39: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Kalkul mit struktureller Induktion

Strukturelle Induktion

Sorte s erzeugt von Konstruktoren c , f ⇒ Jedes Element derTragermenge ist darstellbar als Konstruktorterm f (f (. . . f (c)))

Induktionsformeln: ϕ(c) ∧ (∀ x . ϕ(x) → ϕ(f (x))) → ∀ x . ϕ(x)

Induktionsregel:` ϕ(c) ϕ(x) ` ϕ(f (x))

Γ ` ∆

ϕ = ∀ y .∧

Γ →∨

∆, y = free(Γ→ ∆) \ {x}

AbleitungWenn man aus der Spezifikation SP durch Anwendung vonSequenzenkalkul + Induktions-Regel die Formel ϕ ableiten kann, dannschreibt man SP `IND ϕ.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 108 / 290

Page 40: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Kalkul mit struktureller Induktion:Korrektheit und Unvollstandigkeit

Satz (Korrektheit)Es gilt SP `IND ϕ ⇒ SP |= ϕ

Satz (Unvollstandigkeit)Es gibt Spezifikationen und Theoreme mit SP |= ϕ, die aber mitInduktion nicht beweisbar sind (SP 6`IND ϕ).

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 109 / 290

Page 41: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wie schlimm ist Unvollstandigkeit?

• Der Kalkul mit der Induktions-Regel ist”fast vollstandig“:

Wenn SP |= ϕ, dann gibt es eine Erweiterung SP ′ von SP um neuerekursiv definierte Hilfsfunktionen, so dass SP ′ `IND ϕ gilt.

• Praktisch gesehen: Mit den zusatzlichen Symbolen in SP ′ wird einepassend (verallgemeinerte) Induktionshypothese fur den Beweis vonϕ ausdruckbar.

• Beachte: Mit der Generiertheitsklausel ist die Induktionsregel auchauf Formeln mit den Hilfsfunktionen anwendbar (die Menge dermoglichen Ind. hypothesen wachst!)

• SP ′ ist je nach ϕ verschieden (kein uniformes SP ′).

• In jedem SP ′ gibt es neue Formeln ψ, die wahr aber nicht ableitbarsind.

• Kreativititat also fur Verallgemeinerung und passendeHilfsfunktionen.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 110 / 290

Page 42: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Strukturierte Spezifikation:

Freie Datentypen

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 111 / 290

Page 43: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Wie spezifiziert man Datentypen?

Vorgehen:

• Schritt 1: Definiere benotigte Sorten

• Schritt 2: Datentypen auf Rechnern sind generiert⇒ Definiere Konstruktoren und Generiertheitsklauseln

• Schritt 3(?): Definiere weitere Operationen und ihre Axiome

Problem: Wie geeignete, ,,richtige“ Axiome finden?

Formal ,,richtig“: Sie sollten fur den gewunschten Datentyp stimmen(keine Inkonsistenz!), und sollten ihn moglichst eindeutig charakterisieren.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 112 / 290

Page 44: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Freie und nichtfreie Datentypen

nat ???? bynat ???? byinteger???? byset ???? byset ???? bystack ???? bybintree???? bygraph ???? by

list ???? by

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 113 / 290

Page 45: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Freie und nichtfreie Datentypen

Beobachtung: Manche Datentypen sind frei (erzeugt): Zwei verschiedeneKonstruktorterme reprasentieren auch immer zwei verschiedene Elemente.

nat 0,+1nat 0, 1,+integer 0,+1,−1set ∅, insset ∅, {.}, ∪stack empty, pushbintree mkleaf, mkbranchgraph ∅, +node, +edge

list [], +

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 113 / 290

Page 46: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Freie und nichtfreie Datentypen

Beobachtung: Manche Datentypen sind frei (erzeugt): Zwei verschiedeneKonstruktorterme reprasentieren auch immer zwei verschiedene Elemente.

nat freely generated by 0,+1nat generated by 0, 1,+ 0 + 0 = 0integer generated by 0,+1,−1 0 +1−1 = 0set generated by ∅, ins ins(a,ins(a,∅)) = ins(a,∅)

set generated by ∅, {.}, ∪ {a} ∪ {a} = {a}stack freely generated by empty, pushbintree freely generated by mkleaf, mkbranchgraph generated by ∅, +node, +edge ∅ +node n +node n

= ∅ +node nlist freely generated by [], +

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 113 / 290

Page 47: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Axiome fur freie Datentypen

Beispiel: Konstante c , einstellige Funktion f , zweistellige Funktion g

• Verschiedenheit der Konstruktoren c , f und g :c 6= f (x), f (x) 6= g(y , z), c 6= g(x , y)

• Injektivitat der Konstruktoren:f (x) = f (y) ↔ x = y , g(x , y) = g(u, v) ↔ x = u ∧ y = v

Satz: Die Spezifikation mit diesen Axiomen ist monomorph und

konsistent, sie charakterisiert also genau einen Datentyp.

KIV: Schreibe freely generated by, Axiome werden generiert.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 114 / 290

Page 48: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Freie Erzeugtheitsklauseln

Freie Erzeugtheitsklauseln

A |= S ′ freely generated by C :⇔• A |= S ′ generated by C

• Fur 2 Konstruktorterme t, t ′ ∈ T s((S ,C ),X \ Xs) mit s ∈ S ′ gilt nurdann

[[t]]A,v = [[t ′]]A,v ′

wenn sie mit den exakt gleichen Konstruktoren gebildet sind,und die Variablen an gleichen Positionen gleich belegt sind.

Beispiel Listen:

• [[[]]]A,v , [[a + []]]A,v ′ , [[a + b + []]]A,v ′′ sind auf jeden Fallverschiedene Listen (egal wie die Belegungen v , v ′, v ′′ sind)

• [[a + []]]A,v = [[b + []]]A,v ′ gdw. wenn v(a) = v ′(b).

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 115 / 290

Page 49: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Naturliche Zahlen als freier Datentyp

Beispiel: Die naturlichen Zahlen

Nat3 =specificationsorts nat;constants 0 : nat;functions +1 : nat → nat;variables n : nat;induction nat freely generated by 0, +1;end specification

⇒ Neu: Axiome jetzt generiert.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 116 / 290

Page 50: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Listen als freier Datentyp

Beispiel: Listen als freier Datentyp

List2 =specificationsorts list, elem;functions

[] : → list;. + . : elem × list → list;

variables a, b: elem; l, l1, l2: list;induction list freely generated by [], +;end specification

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 117 / 290

Page 51: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Generierte Axiome fur Listen

Generierte Axiome

Spezifikation generiert:[] 6= a + l ,a + l1 = b + l2 ↔ a = b ∧ l1 = l2

Induktionsregel fur die Sorte list

∀ y .∧

Γ→∨

∆,Γa+ll ` ∆a+l

l Γ[]l ` ∆

[]l

Γ ` ∆

y = free(Γ ` ∆) \ {l}

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 118 / 290

Page 52: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Datentyp-Definion (Motivation)

Haufige Situation:

• Freie Erzeugbarkeit mit Konstruktoren ci

• Selektoren, die aus ci (x1, . . . xn) die xj selektieren

• Testpradikate”ist mit Konstruktor cl gebildet“

• Ordnung:”ist Unterterm von“

• Großenfunktion:”Anzahl nichtkonstanter Konstruktoren“

⇒ Eigenes Syntaxkonstrukt data specification vermeidet unnotigeSchreibarbeit.

In KIV typischerweise nie freely generated, sondern gleich dataspecification

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 119 / 290

Page 53: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification (Beispiel 1)

Beispiel 1: Wochentage

Weekday2 =data specificationweekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun;variables w : weekday;end data specification

Generierte Axiome: Die Konstanten sind paarweise verschieden:

Mon 6= Tue, Mon 6= Wed, Mon 6= Thu, Mon 6= Fri, . . .

Induktionsregel:ΓMonw ` ∆Mon

w . . . ΓSunw ` ∆Sun

w

Γ ` ∆

⇒ Beweis durch Fallunterscheidung nach dem Tag

Verallgemeinerung: Aufzahlungstypen

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 120 / 290

Page 54: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification (Beispiel 2)

Beispiel 2: Paare

Pair =data specificationusing Elem1, Elem2;pair = mkpair ( . .1 : elem1; . .2 : elem2 )variables p : pair;end data specification

Generierte Axiome: mkpair(a, b).1 = a; mkpair(a, b).2 = b

Induktionsregel:Γmkpair(a,b)p ` ∆

mkpair(a,b)p

Γ ` ∆

⇒ Expandiert Variable p zu mkpair(a, b)

Verallgemeinerung: Tupel

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 121 / 290

Page 55: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification (Beispiel 3)

Beispiel 3: naturliche Zahlen

Nat =data specificationnat = 0

| . +1 (. −1 : nat);variables n : nat → nat;order predicates . < . : nat × nat;end data specification

Generierte Axiome: n +1−1 = n; (: 0−1 ist unspezifiziert :)¬ n < n; m<n ∧ n<k → m<k ;¬ n < 0; m < n +1 ↔ (m = n ∨ m < n)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 122 / 290

Page 56: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification (Beispiel 4)

Beispiel 4: Listen

List =data specificationusing Nat, Elem;list = . + . (. .first : elem; . .rest : list) with consp

| [] with nilp;variables l : list;(: ist Unterterm fur Listen = ist Endstuck :)order predicates . � . : list × list;size functions length : list → nat;end data specification

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 123 / 290

Page 57: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Selektoren als partielle Funktionen

Problem: Was tun, wenn ein Selektor auf den falschen Summandangewandt wird?

Hier: Was sind [] .first und [] .rest?

.first und .rest sollten fur [] gar nicht definiert sein ⇒ Partielle Funktionen

In KIV: []. first und [].rest sind unspezifiziert (i. e. kein Axiom)

Semantik: [].rest ist in jeder Algebra (Datenstruktur) irgendeine andereListe ⇒ Echte Implementierung muss irgendeine Liste zuruckgeben

Pragmatik: Formeln mit [].rest sollten nicht vorkommen.Wenn doch, muss die Sequenz ohne die Formeln beweisbar sein.

Bem.: Alternativen sind moglich aber komplizierter (u. a. Fehlerelemente,echte Partialitat, etc.)

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 124 / 290

Page 58: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification (Beispiel 3)

Neue Axiome fur List3:

nilp([]);¬ nilp(a + l);

¬ consp([]);consp(a + l);

(a + l).first = a; (: kein Axiom fur [] .first :)

(a + l).rest = l ; (: kein Axiom fur [] .rest :)

¬ l � [];l � (a + l1) ↔ l = l1 ∨ l � l1;

(: beweisbar, aber der Einfachheit halber generiert :)¬ l � l ; l1 � l2 ∧ l2 � l3 → l1 � l3;

length([]) = 0;length(a + l) = length(l) +1;

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 125 / 290

Page 59: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Data Specification allgemein

Definition (Datendefinition)

Eine Datendefinition D hat die Form (optionales in eckigen Klammern):

s = c1(sel1,1 : s1,1; . . . ; sel1,n1 : s1,n1) [with p1]| . . .| ck(selk,1 : sk,1; . . . ; selk,nk : sk,nk ) [with pk ];

[order predicate . � . : s × s;][size function sz : s → nat;]

Uberladen: sel i ,j = sel i ′,j ′ erlaubt, falls si ,j = si ′,j ′ ,ansonsten alle Operationen paarweise verschieden.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 126 / 290

Page 60: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Eigenschaften von Data Specifications

Satz: Alle Data Specifications sind immer konsistent. Sie sind immer

monomorph bis auf unspezifizierte Selektoren und Parameter.

Intuition bei Listen ist also:

1 Wir haben exakt den Datentyp der Listen beschrieben.

2 Fur die Realisierung auf einem Rechner ist lediglich offen,

• was fur ein Elementtyp verwendet wird und• was fur eine Element bzw. Liste [].first und [].rest zuruckgeben.

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 127 / 290

Page 61: Simpli er: Datenstrukturabh angige Regeln · Simpli er: Lokale und globale Regeln 2 Klassen von Simpli erregeln Lokale Simpli erregeln: Werden in Beweisen uber der Spezi kation, in

Datentyp-Definitionen in Java

Implementierung von Datentyp-Definitionen in Java:

abstract class s {} /* Dies entspricht der Sorte s */

/* Subklasse fur Konstruktor c1 */

class c1 extends s {s11 sel11; /* ein Feld pro Selektor */

s12 sel12; ...

s1n1 : sel1n1;

/* Konstruktor */

public c1(s11 se1, s12 se2, ...) {sel11 = se1; sel12 = se2; ...}

}

/* Subklasse fur Konstruktor c2 */

class c2 extends s {...

}

7. Mai 2012 D. Haneberg: Formale Methoden im Software Engineering 128 / 290