Document

Werbung

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
13
2
y2    2   1, 42
22
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
Herunterladen