Kapitel 4. Funktionale Programmierung Es gilt nun für die Fixpunktgleichung eine Lösung f zu finden, die der durch die Termersetzung realisierten Berechnung für die Deklaration von f entspricht. Da rekursive Deklarationen für die funktionale Programmierung von fundamentaler Bedeutung sind, bildet die Fixpunkttheorie zur Festlegung der genauen Bedeutung von Rekursion eine der wichtigsten Grundlagen der funktionalen Programmierung. Sie klärt die Bedeutung von rekursiven Deklarationen und gibt eine Grundlage für Beweise von Eigenschaften für rekursive Rechenvorschriften. Wir beginnen mit einer Zusammenstellung einiger für die Fixpunkttheorie fundamentaler Begriffe. Minimum Maximum gerichtete Menge Sei (M, v) eine partiell geordnete Menge. Ein kleinstes Element oder ein Minimum ist ein ⊥ ∈ M mit ∀ a ∈ M : ⊥ v a. Ein größtes Element oder ein Maximum ist ein > ∈ M mit ∀ a ∈ M : a v >. Ein Minimum ist eindeutig im Falle der Existenz; ebenso ist ein Maximum eindeutig, sofern es existiert. Eine partiell geordnete Menge heißt gerichtet, wenn jede endliche Teilmenge eine obere Schranke hat: (M, v) partielle Ordnung und (M, v) gerichtete Menge ⇔ . ∀ S⊆M : S endlich ⇒ ∃ z∈M ∀ s∈S : svz Äquivalent dazu, eine partiell geordnete Menge ist gerichtet, wenn sie nicht leer ist und je zwei Elemente der Menge eine obere Schranke in der Menge haben: (M, v) partielle Ordnung und M 6= ∅ (M, v) gerichtete Menge ⇔ . und ∀ x, y ∈ M ∃ z∈M : xvz ∧ yvz Kette Eine Kette ist eine partielle Ordnung, in der je zwei Elemente vergleichbar sind, d.h. (M, v) Kette vollständig partiell geordnet Projektion ⇔ ((M, v) partielle Ordnung ∧ ∀ x, y ∈ M : xvy ∨ yvx). Eine partiell geordnete Menge heißt vollständig partiell geordnet 1 , wenn jede gerichtete Teilmenge eine kleinste obere Schranke hat. Die Fixpunkttheorie baut fundamental auf der hier stichpunktartig dargestellten Theorie der partiell geordneten Mengen auf. Gegeben Mengen Mi (i ∈ QI), unter Projektion auf die j-te Komponente verstehen wir die Abbildung (.)j : Q i∈I Mi → Mj , x 7→ xj . Für die j-te Q Projektion einer ganzen Teilmenge D ⊆ i∈I Mi schreiben wir auch πj : P( i∈I Mi ) → P(Mj ), D 7→ {xj | x ∈ D}. 1 In der Literatur verwendet man den Begriff gerichtet-vollständig partiell geordnet (engl. directedcomplete partial order, oder dcpo), da es auch sogenannte ketten-vollständige partielle Ordnungen gibt. Den zweiten Begriff verwenden wir nicht und kürzen den ersten Begriff daher zu „vollständig partiell geordnet“ ab. 180 4.2 Auswertung von Termen: Rekursion und Berechnung Lemma 4.13: Sei I eine Indexmenge Q und (Mi , ≤i ) partielle Ordnungen (i ∈ I) und eine Teilmenge des Produkts F ⊆ i∈I Mi sei mit komponentenweiser Ordnung versehen. Ist D eine gerichtete Teilmenge von F , so ist für alle i ∈ I die Projektion von D auf die i-te Komponente gerichtet. Beweis: Sei v die punktweise Ordnung auf A → B. Sei i ∈ I und x, y ∈ πi (D). Also gibt es a, b ∈ D mit ai = x und bi = y. Dann existiert ein c ∈ D mit a v c und b v c. Dann ai ≤i ci und bi ≤i ci . Beachte, dass ci ∈ πi (D), x ≤i ci und y ≤i ci . Lemma 4.14: Sei I eine Indexmenge, (Mi , ≤i ) vollständig partiell geordnete Q Mengen (i ∈ I), und das Produkt P = i∈I Mi sei mit komponentenweiser Ordnung versehen. Zu jeder gerichteten Teilmenge von P existiert das Supremum, und es wird komponentenweise gebildet: (sup D)i = sup (πi (D)) (D ⊆ P, D gerichtet, i∈I). Beweis: Sei v die komponentenweise Ordnung auf P . Sei D ⊆ P gerichtet. Für jedes i ∈ I ist die Menge {xi | x ∈ D} gerichtet nach Lemma 4.13, besitzt also ein Supremum. Sei y = (sup {xi | x∈D})i∈I . Wir zeigen: „y ist eine obere Schranke von D“: Sei x ∈ D. Dann ∀ i ∈ I : xi ≤i sup{xi | x ∈ D} = yi . Also x v y. „y ist kleiner oder gleich jeder oberen Schranke von D“: Sei z eine obere Schranke von D. Dann ∀x ∈ D ∀ i ∈ I : xi ≤i zi . Wir vertauschen die Reihenfolge der Allquantoren: ∀i ∈ I ∀x ∈ D : xi ≤i zi . Also ∀ i ∈ I : sup{xi | x ∈ D} ≤ zi . Also ∀ i ∈ I : yi ≤i zi . Also y v z. Korollar 4.15: Sei I eine Indexmenge, (Mi , ≤i ) vollständig partiell geordnete Q Mengen (i ∈ I), und das Produkt P = i∈I Mi sei mit komponentenweiser Ordnung v versehen. Dann ist (P, v) eine vollständig partiell geordnete Menge. Der folgende Satz über die Existenz von Fixpunkten ist zentral für die Informatik. Er findet nicht nur im Zusammenhang mit rekursiven Funktionsdeklarationen Verwendung. Satz 4.16 (Pataraia): Sei M vollständig partiell geordnete Menge mit kleinstem Element und die Abbildung τ :M→M monoton, dann gilt: τ hat einen eindeutigen kleinsten Fixpunkt. 181 Kapitel 4. Funktionale Programmierung Es gibt zwei Beweise dieses Satzes: der erste erfordert transfinite Induktion und ist kurz; der zweite, den wir hier darstellen, ist etwas länger, kommt aber mit einfacheren Mitteln aus. Wir starten mit dem folgenden Lemma. Lemma 4.17: Sei A eine Menge, (B, ≤) eine vollständig partiell geordnete Menge und die Menge der Funktionen F = (A → B) sei mit punktweiser Ordnung versehen. Zu jeder gerichteten Teilmenge von F existiert das Supremum, und es wird punktweise gebildet: (sup D)(x) = sup{f (x) | f ∈D} (D ⊆ F, D gerichtet, x∈A). Beweis: Direkte Folgerung aus Lemma 4.14. Korollar 4.18: Sei A eine Menge, (B, ≤) eine vollständig partiell geordnete Menge und die Menge der Funktionen A → B sei mit punktweiser Ordnung v versehen. Dann ist ((A → B), v) eine vollständig partiell geordnete Menge. Ist (C, ≤) eine partiell geordnete Menge, so nennen wir eine Abbildung g : C → C extensiv, wenn x ≤ g(x) für alle x ∈ C gilt. Beweis des Satzes von Pataraia: Wir bezeichnen mit ≤ die partielle Ordnung und mit ⊥ das kleinste Element von M . Ein Postfixpunkt von τ ist ein x ∈ M mit x ≤ τ (x). Sei P die Menge aller Postfixpunkte von τ . Wir betrachten Teilmengen U ⊆ M , die die folgenden Eigenschaften erfüllen: (a) ⊥ ∈ U , (b) τ (U ) ⊆ U , (c) Ist G ⊆ U und (G, ≤|G×G ) gerichtet, so supM G ∈ U , d.h. U ist vollständig partiell geordnet mit denselben Suprema wie in M . (Wir benutzen den unteren Index M , um zu kennzeichnen, dass das Supremum in M gebildet wird.) Die Menge der Postfixpunkte erfüllt diese Eigenschaften: „⊥ ∈ P “: Denn ⊥ ≤ τ (⊥). “τ (P ) ⊆ P “: Denn ist x ∈ P gegeben, so x ≤ τ (x), also τ (x) ≤ τ (τ (x)) nach Monotonie, also τ (x) ∈ P . „P abgeschlossen unter Suprema gerichteter Teilmengen“: Sei (G, ≤|G×G ) gerichtet und G ⊆ P . Dann existiert supM G. Für alle x ∈ G ist daher x ≤ [da x ∈ P ] τ (x) ≤ τ (supM G). Daher ist τ (supM G) eine obere Schranke von G und somit supM G ≤ τ (supM G), also (supM G) ∈ P . Also ist \ C := {U ⊆ M | U erfüllt (a), (b) und (c)} wohldefiniert. Beachte, dass ⊥ ∈ C. Nun zeigen wir, dass C vollständig partiell geordnet mit denselben Suprema wie in M ist. Dazu sei G ⊆ C gerichtet. Dann G ⊆ U für jedes U ⊆ M , das (a), (b) und (c) erfüllt. Wegen (c) ist sup G ∈ U für jedes solche U . Daher sup G ∈ C. Also ist C eine vollständig partiell geordnete Menge mit kleinstem Element und denselben Suprema wie in M . Sei E(C) = {g ∈ (C → C) | g extensiv und monoton} und f = τ |C . 182 4.2 Auswertung von Termen: Rekursion und Berechnung Bemerke: f (C) ⊆ C. Da C ⊆ P , ist f extensiv und somit f ∈ E(C). Sei v die punktweise partielle Ordnung auf E(C). Nach Korollar 4.18 ist (E(C), v) eine vollständige partielle Ordnung. Wir bemerken, dass für extensive und monotone g, h : C → C auch deren relationale Komposition g ◦ h (zuerst g, dann h) extensiv und monoton ist. Also ist E(C) unter relationaler Komposition abgeschlossen. Nun zeigen wir, dass (E(C), v) eine gerichtete Menge ist. Dazu seien g, h ∈ E(C). Da h extensiv ist, gilt g(x) ≤ h(g(x)) (x ∈ C). Da g extensiv und h monoton ist, gilt h(x) ≤ h(g(x)) (x ∈ C). Also ist g ◦ h eine obere Schranke für g und für h. Da E(C) 6= ∅, ist E(C) gerichtet. Da E(C) vollständige partielle Ordnung ist, existiert m = sup E(C). Beachte, dass m◦f ∈ E(C) und somit m ◦ f v m. Da aber f extensiv ist, ist m v m ◦ f . Also m ◦ f = m. Daher gilt f (m(c)) = m(c) für alle c ∈ C. Also ist m(⊥) Fixpunkt von f , also auch von τ . Wir zeigen, dass m(⊥) der kleinste Fixpunkt von τ ist. Sei nun x ein beliebiger Fixpunkt von τ . Dann x ∈ P . Sei V = P ∩ {y ∈ M | y ≤ x}. Dann erfüllt V die Eigenschaften (a), (b) und (c): „⊥ ∈ V “: Denn ⊥ ≤ x und ⊥ ∈ P . „τ (V ) ⊆ V “: Sei v ∈ V . Da v ∈ P , gilt τ (v) ∈ P . Da v ≤ x, gilt τ (v) ≤ τ (x) = x. Daher τ (v) ∈ V . „V abgeschlossen unter Suprema gerichteter Teilmengen“: Sei (G, ≤|G×G ) gerichtet und G ⊆ V . Dann G ⊆ P . Da P unter Suprema gerichteter Mengen abgeschlossen ist, gilt supM G ∈ P . Da x eine obere Schranke von G ist, supM G ≤ x. Also supM G ∈ V . Also C ⊆ V . Insbesondere m(⊥) ≤ x. Also ist m(⊥) der kleinste Fixpunkt von τ . Für vollständige partielle Ordnungen M, N heißt eine monotone Abbildung f :M→N stetig, wenn für alle gerichteten Mengen S ⊆ M die Gleichung stetig f (sup S) = sup {f (x) : x ∈ S} gilt. Die Suprema existieren, da S gerichtet ist und da die Menge {f (x) : x ∈ S} wegen Monotonie von f gerichtet ist. Satz 4.19 (Einfache stetige Funktionen): Sei (M, ≤) eine vollständig partiell geordnete Menge. Dann gilt: (a) Die Identität ist stetig. (b) Die konstanten Funktionen sind stetig. Sei zusätzlich K ⊆ M so dass (K, ≤|K×K ) partiell geordnet so dass M -Suprema aller gerichteter Teilmengen von K zu K gehören. Dann gilt: (c) Die Injektion inj : K → M , K 3 x 7→ x ∈ M ist stetig. Sei I eine Indexmenge, seien (Mi , ≤i ) (i ∈ I) vollständig partiell geordnete Mengen Q und trage P = i∈I Mi die komponentenweise Ordnung. Dann gilt: (d) Die Projektionen (.)i : P → Mi , x 7→ xi sind stetig (i ∈ I). Beweis: (a) Die Identität idM ist monoton. Ist N ⊆ M gerichtet, so idM (sup N ) = sup N = sup(idM (N )). (b) Sei c ∈ M , f : M → M, x 7→ c. Die Abbildung f ist monoton. Außerdem gilt f (sup N ) = c = sup({c}) = sup(f (N )) für jede gerichtete (und daher nichtleere) Menge N ⊆ M . (c) Seien x, y ∈ K mit x ≤|K×K y. Dann x ≤ y, also inj(x) ≤ inj(y). Also ist die Injektion monoton. Sei N ⊆ K gerichtet. Dann ist supM (inj(N )) = supM N = supK N = inj(supK N ). 183