Bemerkung:
Durch Einführung des Objektes lassen sich partielle Funktionen zu totalen machen.
Vollständige Halbordnung
Eine Halbordnung heißt vollständig, wenn jede aufsteigende Kette,
c1 c2 ... , eine kleinste obere Schranke, d.h. ein Supremum, besitzt.
Beispiel:
Für flache Ordnungen, beispielsweise über , kann eine derartige Kette höchstens 2
Elemente haben.
3 3 ...
Monotonie:
Eine Abbildung f heißt monoton, wenn x y f ( x) f ( y )
Bemerkung:
Wenn x = und y dann muss f ( x) sein. f(x) kann durch Anwendung von f
nicht „stärker“ werden als f(y).
Stetigkeit
Sei fi eine Folge von Funktionen mit vollständiger Halbordnung. Dann heißt eine
Abbildung über diesen Funktionen stetig:
sup [ fi ]; i IN [sup fi ; i IN
Fixpunk: Sei : M N eine Abbildung, dann heißt ein Element a M
a [a ]
ein Fixpunkt der Abbildung .
Satz von Kleene:
Sei eine stetige Abbildung, dann ist der kleinste Fixpunkt von [f] identisch mit:
f sup fi ; i
wobei
f 0 ;
fi 1 [ f ];
Beispiel:
Heron- Verfahren zu Berechnung von
1
2
y² 2 y y
2
y
y [ y ]
2.
Iterationsvorschrifft:
y0 1
1
2
yn 1 yn ; n 0
2
yn
Der Fixpunkt dieser Abbildung ist
2
y0 1
1 2 3
y1 1 1,5
2 1 2
13
2
y2 2 1, 42
22
3
…
Frage:
Halbordnung für Heron Verfahren:
x
2
y ( x ² 2) ( y ² 2)
y0
2
y1
2
y2 ...
Weiteres Beispiel:
Diff. Gleichung:
y
d
y
dx
y [ y]
=>
Lösung ist ex
Anwendung des Kleenschen Satzes auf Strukturen funktionaler Sprachen:
(1)
Rekursive Datentypen
Beispiel: Liste
type seq = Empty | Prepend od int * seq;;
(*)
Vorgehensweise: (Zur Lösung derartiger Gleichungen)
I. Übetragung der sprachspezifischen Form in eine mathematische
II. identifizieren des Fixpunktoperators
III. Berechnung der Lösung mittels des Kleenschen Iterationsverfahrens
Die Gleichung (*) definiert eine Abbildungs zwischen Mengen. Sei Seq als
Trägermende von seq
: Seq Seq
=>
( s) n, r ; n , r S
Es ergibt sich also die Fixpunktgleichung:
(**)
S [S ]
Da (**) nicht nach S auflösbar, bleibt nur die iterative Lösung nach Kleene.
Iterationsvorschrifft:
S0
Si 1 [ Si ]
Wir bilden also Ketten:
S0 S1 [S0 ] S2 [S1 ] ...
Bemerkung: (Stetigkeit von ?) . Beweis, indem man die Stetigkeit für die
Vereinigung , Tupelbildung etc. …, zeigt
Durchführung der Iteration
S0 {}
S1 [ S0 ]
S1 { } n, r : n , r {}
S1 { } {}
S 2 [ S1 ] , (0, ), (1, ),...
S3 { , (0, ), (1, )......(0, (1, )), (0, (2, ))...}
=> Nach der i-ten Iteration erhällt man alle Listen mit maximal(i-1) Elementen
(2)
Anwendung von „Kleene“ auf rekursive Funktionen:
Fakultätsfunktion:
let rec f n = match n with
| 0 ->1
| n -> n * f(n-1);;
(I)
Zuordnung des entsprechenden .Operators
n 0
[ F ](n) 1 n 0
n F (n 1) n 0
Bemerkung:
wird häufg Funktional genannt, d.h. eine Abbildung die Funktionen auf
Funktionen abbildet.
Fixpunktgleichung:
f (n) [ f ](n)
Frage:
Welche Halbordnung ist zu verwenden? => Halbordnung über Funktionen:
f f ' x : f ( x) f '( x)
Iterative Lösung von f (n) [ f ](n) :
f 0 ( n ) (n)
fi 1 (n) [ f i ](n)
f 0 (n)
f1 (n) [ f 0 ](n)
n 0
n 0
f1 (n) 1 n 0
1 n 0
n n 0 n 0
n 0
f 2 (n) [ f1 ](n) 1 n 0
n f (n 1) n 0
n 0
1 n 0
f 2 (n) n n 1 0 n 0
n 1 n 1 0 n 0
n n 1 0 n 0
n 0 n 0
1 n 0
1 n 0
f 2 ( n)
n n 0 1 n 1
n 1 n 1
n 0
1 n 0
f3 (n) 1 n 1
2 n 2
n 2
Folgerung:
nach der i-ten
0 n i bekannt.
n
f0
f1
f2
f3
Tabelle:
-1
Teration
0
1
1
1
ist
der
1
1
1
Wertebereich
2
2
der
Fakultätsfunktion
3
Umsetzung in ein Ocaml Programm:
type intbot = Bottom | int;;
let rec tau f x = match x with
| 0 -> 1
| x -> x * f(x-1)
| n < 0 -> Bottom;;
let rec iteration tau n =match n with
| 0 -> Bottom
| n -> tau (iteration tau (n-1));;
Beispiel: (6- Iteration) Der Aufruf
iteration tau 6;;
liefert eine Funktion, die die Werte der Fakultätsfunktion für 0 n 6 berechnet.
4
für