Formale Spezifikation und Induktion

Werbung
Formale Spezifikation und
Induktion
1
Was ist ein SW-System mathematisch?
1. Sicht: operational
Ein SW-System ist ein Automat
• mit Zustand,
• Zustandsübergängen und
• mit Abläufen.
2. Sicht: algebraisch
Ein SW-System ist eine Algebra = Datenstruktur, d. h. ein System von
Daten und Operationen (vgl. auch (zustandslose) API in Java)
2
Was ist spezieller?
Einen Automaten kann man als spezielle Algebra auffassen:
• Zustand = Element einer Datenstruktur ⇒ Algebra!
• Sorten = State, Input, Output mit Operationen
⋆ Anfangszustände:
isinitial: State → Bool
⋆ Zustandsübergangsfunktion (oder auch Relation):
exec: Input × State → State × Output (→ Bool)
• z. Bsp. Zustand eines Programms:
Programm + Programmzähler + Speicherbelegung
• theoretisch: algebraische Sicht genügt
• praktisch: Automatensicht hat viele Spezialeigenschaften.
(u.a. ist eine Idee von „Zeit“ damit verbunden.)
Deshalb Codierung oft nicht die beste Idee
3
SW-Beschreibungsformalismen
SW-System ist Datentyp:
• modellorientierte Spezifikation (Z,VDM):
alle Datentypen sind mit Mengenlehre gebildet
(Tupel und Mengen z.B. für UML-Klassendiagramme)
• algebraische Spezifikation
SW-System ist Menge von Abläufen:
• algorithmische Spezifikation, z. Bsp. Programmiersprachen
• Programme über algebraischen/modellorientierten Datentypen
• Automaten, Harel/UML Statecharts, Abstract State Machines (ASMs)
Eignung hängt von den Zielen ab (Was will ich beschreiben? Was
beweisen?)
4
Spezifikation
Ziel:
Ein bestimmter Datentyp (Algebra) soll spezifiziert werden.
Fragen:
1. Was für Operationen brauche ich?
2. Welche Axiome brauche ich?
3. Welche Datentypen kann ich überhaupt spezifizieren?
4. Kann ich alle wahren Aussagen über dem Datentyp auch beweisen?
Zunächst: Fragen 3 + 4 speziell für die natürlichen Zahlen
5
Natürliche 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 = m, m ∗ succ(n) = m ∗ n + n
• 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 ϕ für alle n wahr
Begründung: M := {n : ϕ(n)} ist mindestens so groß wie IN.
6
Natürliche Zahlen: mit PL nicht spezifizierbar!
Satz (Charakterisierung der natürlichen Zahlen)
Die Peano-Axiome charakterisieren ein Modell (eben die natürlichen
Zahlen) bis auf Isomorphie (= Umbenennung).
Aber:
Satz von Skolem
Es gibt keine Menge Ax-Nat von prädikatenlogischen Formeln, die als
einziges Modell (modulo Umbenennung) nur die natürlichen Zahlen hat
Beweis mit Endlichkeitssatz: M erfüllbar ⇔ jedes endl. M’ ⊆ M erfüllbar.
Betrachte Ax-Nat ∪ {c 6= 0, c 6= succ(0), . . . }
Intuition: Prädikatenlogische Axiome können nicht ausdrücken, dass es
neben den „echten“ natürlichen Zahlen keine weiteren Zahlen gibt
7
Natürliche Zahlen: Ein schwächeres Ziel
Wir wissen schon: Jede Axiomenmenge hat auch andere Modelle als IN mit
zusätzlichen Elementen
Wir versuchen es schwächer: Suche Axiomenmenge, mit der alle über IN
wahren Formeln bewiesen werden können
(dass sie auch über anderen Modellen gelten, könnte 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 kein Axiom”.
Problem beim Finden der Axiomenmenge ist Peano-Axiom 5:
IN ist kleinste Menge mit 0 ∈ M und n ∈ M ⇒ succ(n) ∈ M
Versuchen wir Mengen M durch Formeln zu beschreiben:
Die Formel ϕ(n) mit freier Variable n beschreibt {n : ϕ(n)}
8
Natürliche Zahlen: Versuch der Spezifikation
specification peano-ax
sorts nat;
constants 0 : nat;
functions . +1 : nat
→ nat;
. + . : nat × nat → nat;
. ∗ . : nat × nat → nat;
axioms
0 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;
ϕ0n ∧ (∀ n. ϕ → ϕnn +1 ) → ∀ n. ϕ; (: für jedes ϕ ∈ For(Σ,X) :)
end specification
Unendlich viele Axiome, aber entscheidbar!
9
Natürliche Zahlen: Unvollständigkeit
Problem: Alle Formeln (abzählbar viele) beschreiben nicht alle Mengen
(überabzählbar viele)!
Es gilt leider:
Gödelscher Unvollständigkeitssatz
Es gibt keine entscheidbare Menge von Formeln über (0, succ, +, ∗), die die
ersten 4 Peano-Axiome und n 6= 0 → ∃ n. n = succ(m) enthält oder
impliziert, mit der sich alle in IN wahren Aussagen ableiten lassen
(insbesondere ist peano-ax auch unvollständig).
Der Trick zum Beweis ist das Lügnerparadoxon: Es gibt eine Formel, die
sagt: „Ich bin nicht beweisbar“
10
Natürliche Zahlen: Unvollständigkeit
Intuition:
• Leider findet man auch keine „gute“ Axiomenmenge, mit der die wahren
Aussagen herleitbar sind
• Alle wahren Aussagen könnte man als Axiome trivialerweise nehmen.
• Die Menge der wahren Aussagen ist also nicht entscheidbar.
• Wahre Aussagen für die natürlichen Zahlen zu beweisen, ist kreativ.
• Verursachte ziemlich viel Wirbel in den 30er Jahren:
Die Idee, Mathematik auf ganz einfachen Grundlagen aufzubauen
(Hilbert’sches Programm) zu definieren, war gescheitert
• heute: komplizierte Mengenlehre (Zermelo-Fränkel, Gödel-Bernays) als
Grundlage für Mathematik
11
Natürliche Zahlen ohne Multiplikation
Satz
Für Aussagen über natürlichen Zahlen mit 0, +, −, <, ≤ (aber keine
Multiplikation) lässt sich mit dem Entscheidungsverfahren von Nelson und
Oppen automatisch entscheiden, ob sie wahr oder falsch sind. Der Aufwand
ist allerdings doppelt exponentiell.
Intuition:
• Mal was positives: solange man kein ∗ hat, ist keine Kreativität, nur viel
Rechenpower erforderlich.
• Entscheidungsprozeduren gibt es auch für andere „einfache“
Datentypen (und Aussagenlogik!), werden auch verwendet
(z.B. SAL, automatische Beweiser, abstrakte Interpretation)
• Kombination mehrerer Entscheidungsprozeduren und mit zus.
Funktionen schwierig (wann was versuchen?)
12
Problem: Prädikatenlogik reicht nicht
Problem: Prädikatenlogik kann nicht ausdrücken, dass es ausser den
Zahlen 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 für 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 dürfen Elementvariablen enthalten
• alle (endlichen) Graphen bekommt man aus dem leeren ∅, durch
Addieren von Knoten addnode und Kanten addedge
• alle Arrays bekommt man durch:
mkarray(n) (erzeugt Array der Grösse n)
put(a, i, d) (schreibt an Position i das Datum d)
13
Generiertheitsklauseln: Syntax
Deshalb Idee: Wir definieren ein “Spezialaxiom”, genannt
Generiertheitsklausel das aussagt: Die Daten eines Datentyps sind genau
die mit bestimmten Konstruktoren gebildeten Terme.
Syntax
s generated by C ist Termerzeugtheitsklausel (∈ Gen(Σ)) ⇔
• s ∈ S , C = {f1 , . . . , fn } ⊆ OP ,
• die Konstruktoren fi haben die Ergebnissorte s
• Konstanten sind also Konstruktoren erlaubt
• für wenigstens ein fi sind alle Argumentsorten ungleich s
(sonst gibt es keine Konstruktorterme!)
Ein Konstruktorterm t hat die Sorte s, ist mit Konstruktoren gebildet und
enthält nur Variablen anderer Sorten, ist also aus Ts ((S, C), X \ Xs ).
14
Generiertheitsklauseln: Semantik
Idee: Jedes Element der generierten Sorte ist der Wert eines
Konstruktorterms, wenn man die (Parameter)-Variablen geeignet belegt.
Semantik
A |= s generated by C :⇔
für 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].
15
Elementare Spezifikation
Elementare Spezifikation
Eine Spezifikation SP = (Σ, Ax , Gen ) ist ein Tripel mit:
• Σ = (S , OP )
• Ax ⊆ For(Σ, X ) endlich
• Gen ⊆ Gen (Σ) endlich
Modell
A ist Modell von SP (A |= SP , A ∈ Mod(SP ))
A |= SP :⇔ A ∈ Alg(Σ), A |= Gen und A |= Ax .
Gültigkeit
SP |= ϕ :⇔ für alle A in Mod(SP ): A |= ϕ
16
Konsistenz und Monomorphie
Definition
Eine Spezifikation ist konsistent
:⇔ Axiome nicht widersprüchlich
⇔ kein Beweis von false möglich
⇔ 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 für Datentypen wie natürliche Zahlen etc. so sein
(die Axiome sollten ja nicht versehentlich auch reelle Zahlen erlauben)
⇒ Für Systembeschreibungen oft nicht erforderlich bzw. wünschenswert.
Man will ja gerade Details offenlassen
17
minimale Spez. der natürlichen Zahlen in KIV
specification
sorts nat;
constants 0 : nat;
functions
. +1 : nat → nat;
induction nat generated by 0, +1;
variables m, n : nat;
axioms
0 6= n +1;
m 6= n → m +1 6= n +1;
end specification
ist konsistent und mononorph
18
Spez. der natürlichen Zahlen mit Add. und Mult.
specification
sorts nat;
constants 0 : nat;
functions
. +1 : nat
→
. + . : nat × nat →
. ∗ . : nat × nat →
induction nat generated by 0, +1;
variables m, n : nat;
axioms
0 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
19
nat;
nat;
nat;
minimale Spez. der Listen in KIV
specification
sorts elem; list;
constants [] : list;
functions
. + . : elem × list
induction list generated by [], +;
variables a, b : elem;
x, y : list;
axioms
[] 6= a + x;
x 6= y → a + x 6= b + y;
end specification
ist konsistent und mononorph
20
→
list;
Kalkül mit struktureller Induktion
Strukturelle Induktion
Sorte s erzeugt von Konstruktoren c, f ⇒ Jedes Element der Trägermenge
ist darstellbar als Konstruktorterm f (f (. . . f (c)))
Induktionsformeln:
⊢ ϕ(c)
Induktionsregel:
ϕ = ∀ y.
V
Γ→
W
ϕ(c) ∧ (∀ x. ϕ(x) → ϕ(f (x))) → ∀ x. ϕ(x)
∆,
ϕ(x) ⊢ ϕ(f (x))
Γ⊢∆
y = free(Γ → ∆) \ {x}
Ableitung
Wenn man aus der Spezifikation SP durch Anwendung von
Sequenzenkalkül + Induktions-Regel die Formel ϕ ableiten kann, dann
schreibt man SP ⊢IND ϕ.
21
Kalkül mit struktureller Induktion:
Korrektheit und Unvollständigkeit
Satz (Korrektheit)
Es gilt SP ⊢IND ϕ
⇒
SP |= ϕ
Satz (Unvollständigkeit)
Es gibt Spezifikationen und Theoreme mit SP |= ϕ, die aber mit Induktion
nicht beweisbar sind SP ⊢IND ϕ
22
Ein Beispiel für Unvollständigkeit (1)
x from a = die Liste ab dem erstem Vorkommen des Elements a (exklusiv).
Falls das Element nicht vorkommt, die leere Liste.
specification
sorts elem; list;
constants [] : list;
functions
.+.
: elem × list
. from . : list × elem
induction list generated by [], +;
variables a, b : elem; x, y : list;
axioms
[] 6= a + x; x 6= y → a + x 6= b + y;
[] from a = [];
(a + x) from a = x;
a 6= b → (b + x) from a = x from a;
end specification
23
→
→
list;
list;
Ein Beispiel für Unvollständigkeit (2)
• Die Spezifikation ist monomorph: Sie hat Listen als einziges Modell A.
• Für die Funktion from gilt das Theorem ϕ (x) :=
x 6= [] → x from a 6= x
• Es lässt sich ϕ ([]), ϕ (b + []), . . . beweisen:
[] 6= [] → [] from a 6= []
b + [] 6= [] → (b + []) from a 6= []
b + c + [] 6= [] → (b + c + []) from a 6= []
b + c + d + [] 6= [] → (b + c + d + []) from a 6= []
...
• Induktionsschluss klappt nicht: x from a 6= x → (b + x) from a 6= b + x
• man muss die Aussage für Induktion verallgemeinern:
x 6= [] → x from a < x
x 6= [] → # (x from a) < # x
• aber: das braucht ein neues Prädikat < (ist Endstück) oder # (Länge)
• beide können rekursiv definiert werden
24
Wie schlimm ist Unvollständigkeit?
• Der Kalkül mit der Induktions-Regel ist „fast vollständig“:
Wenn SP |= ϕ, dann gibt es eine Erweiterung SP ′ von SP um neue
rekursiv definierte Funktionen, so dass SP ′ ⊢IND ϕ gilt.
• Praktisch gesehen: Mit den zusätzlichen Symbolen in SP ′ wird eine
passend (verallgemeinerte) Induktionshypothese
für den Beweis von ϕ ausdrückbar
• Die Induktionsregel wird auf neue Formeln anwendbar
• SP ′ ist je nach ϕ verschieden (kein uniformes SP ′ )
• In jedem SP ′ gibt es neue Formeln ψ , die wahr aber nicht ableitbar sind
• Kreativitität also für Verallgemeinerung und passende Hilfsfunktionen
25
Herunterladen