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