1 Allgemeine Angaben Erstantrag auf Gewährung einer Sachbeihilfe. 1.1 Antragsteller Dr. Henning Thielemann geb. 1976-08-25 Staatsangehörigkeit: BRD Dienstliche Adresse: Fachbereich Mathematik und Informatik Martin-Luther-Universität Halle-Wittenberg 06099 Halle Tel.: 0345/5524773 Fax.: 0345/5527033 E-Mail: [email protected] Privatadresse: Henning Thielemann Pfännerhöhe 42 06110 Halle 1.2 Thema Mathematische Notationen und Konzepte 1.3 Fach- und Arbeitsrichtung Grundlagen der Mathematik, Logik, funktionale Programmierung, Computeralgebra, maschinelle Beweisprüfung 1.4 Voraussichtliche Gesamtdauer 2 Jahre 1.5 Antragszeitraum 2007-01-01 bis 2008-12-31 1.6 Zusammenfassung Die mathematische Notation gilt gegenüber natürlichen Sprachen als besonders präzise. Sie soll mathematische Aussagen unmissverständlich machen, sie soll formale Manipulationen erlauben, sie dient als Vorbild für Programmiersprachen, Computeralgebrasysteme und maschinelle Beweissysteme. Tatsächlich gibt es aber einige etablierte Notationen, die gewisse Schwierigkeiten mit sich bringen, welche spätestens beim Einsatz in Computersystemen offensichtlich werden. Für grundlegende Begriffe der Analysis, Algebra und Stochastik soll in diesem Projekt herausgearbeitet werden, was heute als konventionelle mathematische Notation gilt und inwiefern sie 1 zur zuverlässigen Formelmanipulation geeignet ist. Es soll überprüft werden, welche Notationskonzepte der funktionalen Programmierung, des automatischen Beweisens und der Computeralgebra sich sogar besser als entsprechende konventionelle Notationen zur manuellen Formelmanipulation eignen. Ein Schwerpunkt liegt auf Notationen im Zusammenhang mit Funktionen. Zum Testen und zur einfachen Einführung alternativer Notationen ist die Implementation eines Systems vorgesehen, mit dem man in LATEX-Text Formeln in der Programmiersprache Haskell notieren kann, welche wahlweise in traditioneller oder formaler Weise gesetzt werden. Damit werden sich zudem mathematisch orientierte Haskell-Bibliotheken und ihre Herleitungen in LATEXDokumenten ( Literarische Programmierung“) in mathematischer Notation darstellen lassen. ” 2 2.1 Stand der Forschung, eigene Vorarbeiten Stand der Forschung Obwohl die Mathematik durch das Aufstellen von Theorien und Ableiten von Schlussfolgerungen gewachsen ist, so verdankt sie viele ihrer Fortschritte auch der Weiterentwicklung der mathematischen Notation. Bei der Darstellung von Zahlen hat sich das Positionensystem gegenüber den römischen Zahlenzeichen durchgesetzt. Die Symbolsprache hat die natürlichen Sprachen ergänzt und gilt heute als präziser als Prosa. Variablen haben das Erklären von Rechenverfahren anhand von Beispielen abgelöst. All dies hat den Boden für Computeralgebrasysteme, Beweisprüfer und automatische Beweiser bereitet. Natürlich kann ein Computer auch mit römischen Zahlen rechnen, und zukünftige Programmsysteme können sicher auch selbständig Texte analysieren und Rechenbeispiele verallgemeinern. Zweifellos hat die Formalisierung der Mathematik aber die Unterstützung durch Rechenmaschinen vereinfacht und ein tieferes Verständnis für Mathematik geschaffen – und natürlich erst recht die Entwicklung des Computers beschleunigt, der intern selbst auf einem Positionensystem aufbaut. Was Schul- und Mathematik-Grundstudiumsniveau betrifft, gilt die mathematische Notation heute als ausgereift und abgeschlossen und international weitgehend vereinheitlicht. Wesentlich dazu beigetragen haben dürfte die Standardisierung der International Organization for Standardization ISO [Int93] und des Ausschuss für Einheiten und Formelgrößen des Deutschen Instituts für Normung [DIN94, DIN99]. Für Programmiersprachen und Computeralgebrasysteme (allgemeine System wie Axiom, Derive, Maple, Mathematica, MuPad, Yacas, aber auch spezialisierte wie Singular) wird in der Regel alles daran gesetzt, die traditionelle mathematische Notation nachzubilden. S TEPHEN W OLFRAM, der Schöpfer von Mathematica, stellt fest [Wol00], dass zwar alle erdenklichen Aspekte natürlicher Sprachen von Linguisten studiert wurden und werden, dass die mathematische Notation als solche bislang wenig untersucht wurde. Er bemängelt außerdem, dass sich seit F LORIAN C AJORI niemand mehr systematisch mit mathematischer Notation befasst hat. Dieser hatte die Entwicklung der Notationen für verschiedene Anwendungen bis Anfang des 20. Jahrhunderts aufgearbeitet. In [Caj93] zeigt er vielfältige konkurrierende Notationen für zentrale mathematische Gebiete. Allerdings bewertet er kaum, und wenn, dann eher nach typografischen Gesichtspunkten. Gesichtspunkte wie die gute Modellierung eines mathematischen Sachverhalts durch eine Notation oder Eignung für mechanische Umformungen bleiben weitgehend unbeachtet. Die Formalisierung der Mathematik wird heute vor allem im Bereich der Forschung an Programmiersprachen und -konzepten, als auch bei automatischen Beweisern und Beweisprüfern vorangetrieben, wie Theorema bzw. Mizar, der darauf basierenden Zeitschrift Journal of For” malized Mathematics“, Isabelle einschließlich dem Archive of Formal Proofs“, dem PVS Spe” cification and Verification System und der Spezifikationssprache Z. Bis auf wenige Kritiken an der konventionellen mathematischen Notation und ihrem Gebrauch [Har96, Dij86], waren die bisherigen Anstrengungen darauf gerichtet, computergerechte Interpretationen etablierter Notationen zu finden, möglichst automatisch konventionelle Notationen in präzise interne Darstellungen zu überführen, oder sie umgekehrt in konventioneller 2 Notation darzustellen. Beispielsweise versucht man in der Computerlinguistik mit so genannten Shift/Reset-Operatoren Notationen zu erklären, welche funktionale Zusammenhänge beschreiben, aber Funktionswerte und nicht Funktionen zueinander in Beziehung setzen [Sha04]. Alles in allem war es stets das Ziel, dem Benutzer herkömmliche Schreibweisen als Schnittstelle zur Maschine zu bieten. Der Grund dafür ist sicher, dass der Benutzer die mathematische Notation über Jahre in Schule und Universität erlernt hat, und sie in nahezu allen Lehrbüchern vorfindet, und es schwer fällt, häufig zwischen der konventionellen Notation in Büchern und einer abweichenden Notation im Computer umzudenken. Darüber blieb bislang die Frage unbeachtet, welche Nachteile die traditionelle Notation gegenüber formaleren Notationen hat. Es gibt noch nicht einmal eine Übersicht über die formalen Interpretationen gängiger Notationen. In der traditionellen Notation haben zum Beispiel viele Bestandteile eines Ausdruckes keine eigenständige Bedeutung. Sie stehen nicht für mathematische Objekte sondern sind Teil einer Schablone. Beispielsweise steht in lim an n→∞ das Zeichen ∞ nicht für ein mathematisches Objekt. Eine unendlich große Zahl wird für die Definition von lim auch nicht benötigt. Auch der Pfeil → ist keine mathematische Operation. Der linke Operand muss immer eine Variable sein, 2 → ∞ ergibt keinen Sinn. Mit der Funktionalanalysis wurde die Idee entwickelt, auch Abbildungen, die von Funktionen oder auf Funktionen abbilden, als mathematische Objekte aufzufassen. Mit diesen sogenannten Operatoren und Funktionalen lassen sich elegant Grenzwertbildung, Differentiation, Integration, Integraltransformationen und vieles mehr in eine Theorie einbetten und es lassen sich Begriffe wie Stetigkeit und Differenzierbarkeit auf die komplexeren Abbildungen übertragen. Parallel dazu wurden in der funktionalen Programmierung Funktionen höherer Ordnung eingeführt. Während sich das Konzept der Funktionen höherer Ordnung in der Mathematik bewährt hat, wurden entspreche Notationen nicht entwickelt oder haben sich nicht durchgesetzt. Funktionalanalytisch gesehen ist die Grenzwertwertbildung von Folgen ein Funktional. Eine Notation, die diese Interpretation umsetzt, könnte zum Beispiel so aussehen: lim a . Die Variable a steht für eine Folge und an für deren n. Element. Der Ausdruck lim bezeichnet nun eine Funktion, welche jeder Folge ihren Grenzwert zuordnet. Im Gegensatz zu der herkömmlichen lim-Schablone, kann man mit dem lim-Funktional Mathematik betreiben. Der Definitionsbereich von lim ist die Menge aller konvergenten Folgen. Das Funktional lim ist linear, man kann es auf Stetigkeit und Differenzierbarkeit bezüglich verschiedener Normen untersuchen usw. Für die Arbeit am Computer haben formale Notationen zweifellos Vorteile, etwa Unmissverständlichkeit und Zugänglichkeit für mechanische Umformungen. Kann man davon als Mensch ebenfalls profitieren? Diese Idee wird häufig ausgeklammert, weil formale Notationen als umständlicher, unintuitiver, oder einfach weitschweifiger und damit schwerer lesbar als traditionelle Notationen gelten. Teilweise trifft dieser Vorwurf zu, etwa bei x 7→ x ∈ O(x 7→ x2 ) im Vergleich zu x = O(x2 ), teilweise ist aber genau das Gegenteil der Fall, vergleiche etwa f mit f (·) und lim a mit limn→∞ an . Möglicherweise liegt die Umständlichkeit formaler Notationen nur an einem Mangel an etablierten Werkzeugen. Erlaubt man etwa die Potenzschreibweise für die punktweise Potenzierung einer Funktion, ließe sich auch id ∈ O(id2 ) schreiben. (Das wirft allerdings die Frage auf, wie man die mehrfache Hintereinanderausführung von Funktionen von der Potenzierung abgrenzt.) Stünde eine Notation wie in Haskell zum Auslassen eines Operanden eines Infixoperators zur Verfügung ( section“) so könnte man auch knapp id ∈ O(ˆ2) schreiben. Es stellt ” sich daher die Frage, welche Schwierigkeiten mit Notationen substantiell sind und welche auf Gewohnheit beruhen. Die Wahl der Notationen ist aber nicht nur für Mathematik auf dem Papier“ interessant, ” sondern auch für Computeralgebrasysteme. Diese sind häufig nicht ausreichend für das 3 Arbeiten mit Funktionen ausgestattet. MuPad, Maple und Mathematica unterstützen sowohl die Ableitung von Ausdrücken nach Variablen (analog zu ddx f (x)) als auch die Ableitung von Funktionen (analog zu f 0 ). Dagegen unterstützen diese Systeme und auch Axiom Auflösung von Gleichungen, Grenzwertbildung, Reihenentwicklung, Lösung von Differentialgleichungen, Integration und O-Notation nur für Ausdrücke mit freien Variablen, aber nicht für Funktionen. Funktionalanalytische Formelmanipulationen sind daher von vornherein ausgeschlossen. Funktionalanalysis mit Computeralgebrasystemen wäre aber sinnvoll und machbar. Angenommen es bezeichnen lim das Folgengrenzwertfunktional, cont f die stetige Fortsetzung der Funktion f (also das funktionalanalytische Gegenstück zum Grenzwert von Funktionen), partialDerive f x n die partielle Ableitung von f nach der n. Komponente an der Stelle x und gateauxDerive f x y die Richtungsableitung von f in Richtung y an der Stelle x, dann würden einem Computeralgebrasystem Vereinfachungen wie partialDerive lim x n −→ 0 gateauxDerive cont x y −→ cont y keine Probleme bereiten. Nebenbei bemerkt wäre cont in dichten Zahlenmengen auch für siche2 −b2 zu a + b nur für a 6= b erlaubt ist, gilt res Kürzen nützlich. Während die Vereinfachung von aa−b a2 −b2 cont (a, b) 7→ a−b = (a, b) 7→ a + b uneingeschränkt. Zufallsgrößen werden von keinem der genannten Computeralgebrasysteme unterstützt. Aber ein solches System sollte beispielsweise in der Lage sein, die Summe zweier unabhängiger normalverteilter Zufallsvariablen zu vereinfachen. normal v0 m0 + normal v1 m1 −→ normal (v0+v1) (m0+m1) (siehe Punkt Stochastik auf Seite 9) Die Fixierung auf Ausdrücke und deren freie Variablen bringt Komplikationen mit sich, denen in den genannten Algebrasystemen mit einer Reihe von Hilfsfunktionen begegnet wird. Dazu zählen das Erzwingen der Ausdrucksauswertung (Evaluate, eval) und die Unterdrückung der Auswertung von Ausdrücken (Hold, hold). Ist zum Beispiel die Variable x bereits mit einem Zahlenwert belegt, muss man in MuPAD statt diff(xˆ2,x) nun diff(hold(xˆ2),hold(x)) verwenden. Die Computerfunktion diff ist also keine mathematische Funktion, weil sie nicht den Wert der übergebenen Variable x benötigt, sondern deren Namen. Andere Fälle sind noch schwerer auflösbar. Möchte man zum Beispiel die Stammfunktion von cos an der Stelle 2 auswerten, so kann man in MuPAD subs(int(cos(x),x),x=2) schreiben, was korrekt zu sin(2) vereinfacht wird. Ist dagegen der Integrand nicht geschlossen integrierbar, so ergibt der entsprechende Ausdruck Unsinn. subs(int(sin(sin(x)),x),x=2) → int(sin(sin(2)), 2) Dieses Problem existiert ebenso bei Mathematica und Maple, wohingegen Axiom eine Hilfsvariable für das Integral einführt. Idealerweise muss ein Computeralgebrasystem gar nicht zwischen ausgewerteter und unausgewerteter Form eines Ausdruckes unterscheiden, sondern einfach zwischen verschiedenen Beschreibungen des gleichen mathematischen Objektes. So beschreiben sin0 und cos die gleiche Funktion, aber die zweite Beschreibung ist einfacher. Funktionen wie simplify, factor, expand repräsentieren die Identitätsfunktion. Sie ändern lediglich“ die Beschreibung eines ma” thematischen Objektes. Würde man konsequent das Integral als mathematischen Operator ansehen, dann wären die Beschreibungen int(cos) und sin gleichwertig. Ebenso könnte man mit int(sin@sin) weiterrechnen, obwohl sich der Integraloperator nicht eliminieren lässt. Man könnte zum Beispiel numerisch Näherungen berechnen oder differenzieren. 4 2.2 Eigene Vorarbeiten Der Antragsteller hat sich bislang nur in informellen Beiträgen etwa mit Quantoren und der ONotation auseinandergesetzt. Mithilfe der gewonnenen Erkenntnisse über mathematische Notationen wurde in der Dissertation [Thi06b] ein Formalismus für die Wavelet- und Filterbanktheorie entwickelt. Der Antragsteller arbeitet zusammen mit DYLAN T HURSTON an einer überarbeiteten Typklassenhierarchie für Typen mathematischer Objekte in der Programmiersprache Haskell [TT06]. 3 Ziele und Arbeitsprogramm 3.1 Ziele Ziel des beantragten Forschungsprojekt ist es, Notationen zu finden, welche sich gut für formale Manipulationen auf dem Papier“ eignen. Dazu sollen für typische Beispiele aus Analysis, Algebra ” und Stochastik Herleitungen und Beweise jeweils in traditioneller und formaler Notation geführt und verglichen werden. Die hinter den Notationen stehenden Konzepte sollen herausgearbeitet und verglichen werden. Weiterhin soll untersucht werden, wie traditionelle Notationen in Computeralgebrasysteme umgesetzt wurden und ob dies zweckmäßig war. Wo formale Notationen traditionellen Notationen überlegen sind, sollen Vorschläge erarbeitet werden, wie sich die formalen Notationen in Computeralgebrafunktionen übertragen lassen. Zum Erproben alternativer Notationen soll ein Computerprogramm entwickelt werden, welches in LATEX-Texten eingebettete Formeln wahlweise sowohl in traditioneller (am besten DINgerechter) als auch in experimenteller Notation setzen kann. Siehe Punkt 3.2.6. Zusammengefasst soll das Forschungsprojekt folgende Fragen beantworten: • Bestandsaufnahme: Welche Notationen sind heute allgemein akzeptiert? Wie bewähren sie sich in der Anwendung? Wie wurden diese Notationen für Computeralgebrasysteme übersetzt? Welche Schwierigkeiten ergeben sich damit? • Alternative Notationen: Falls für eine Situation alle gebräuchlichen Notationen Probleme aufwerfen, wie könnten Alternativen aussehen? Welche neuen Notationen und Konzepte wurden für Programmiersprachen, Beweisprüfer und Computeralgebrasysteme entwickelt? Kann man bestehende unproblematische Notationen noch verbessern? Welche Vor- und Nachteile haben neue oder bislang wenig beachtete Notationen? • Vergleich: Welche konkurrierenden Notationen für ein spezielles Problem eignen sich im direkten Vergleich am besten für Umformungen? • Bewertungsmaßstäbe: Welche Kriterien für Notationen erlauben eine schnelle Beurteilung, ob sich eine Notation gut für Umformungen eignet? Wie kann man unter konkurrierenden Notationen die geeignetste finden? • Anwendung: In welchem Umfeld kann man am besten mit neuen Notationen experimentieren? Welche Anwendungen können von formalen Notationen profitieren? Wie kann man die Akzeptanz ungewohnter Notationen erhöhen? 3.2 Arbeitsprogramm Es folgt eine Beschreibung, auf welche Weise Antworten für die unter Ziele“ aufgeworfenen ” Fragen gefunden werden sollen. 5 3.2.1 Bestandsaufnahme Um über Probleme der konventionellen Notation reden zu können, muss man zunächst feststellen, was überhaupt als konventionelle Notation gilt. Da jeder Buchautor gewisse Vorlieben hat und in manchen Punkten von etablierten Notationen abweicht, ist es sicher am sinnvollsten zuerst die Standards des DIN und der ISO zu konsultieren [DIN94, DIN99, Int93]. Einen viel direkteren Einfluss auf die Verwendung von Notationen haben allerdings Lehrbücher und Nachschlagewerke. Augenmerk für dieses Projekt liegt auf besonders weit verbreiteten Notationen. Diese kommen natürlicherweise bei den Grundlagen von Analysis, Algebra und Stochastik vor. Deshalb sollen vor allem Standardlehrbücher für die Abiturstufe und das Mathematikgrundstudium und Standardnachschlagewerke aus diesen Bereichen, wie zum Beispiel [BSM00, KRG95], herangezogen werden. Eine Schwierigkeit beim Erfassen von Konventionen besteht darin, dass viele nicht ausdrücklich benannt werden. So wird zum Beispiel die Umformung von Gleichungen mit skalaren Werten in den Lehrbüchern detailliert eingeführt, aber beim späteren Übergang zur Differentialrechnung und zu Differentialgleichungen wird nicht darauf eingegangen, welche neuen Umformungsregeln erlaubt sind. Beispielsweise könnte ein Student versuchen, Differentialgleichungsumformungen einzusetzen, um die transzendente Gleichung sin x = exp x zu lösen. Leitet er die Gleichung auf beiden Seiten ab, gelangt er zu cos x = exp x, und damit zu einer Lösung“ ” x = 0. (Selbstverständlich wäre nur die Umformung von sin = exp zu cos = exp zulässig. Da die Ausgangsgleichung nicht stimmt, erübrigt sich die Umformung.) Da die Einschätzung, was unter traditioneller Notation zu verstehen ist, sehr subjektiv ist, sollen in dieser Frage andere Mathematiker einbezogen werden. Zu diesem Zweck soll ein Seminar abgehalten werden. In diesem sollen mathematische Notationen, ihre Anwendung und aufgeworfene Schwierigkeiten, geschichtliche Wurzeln, didaktische Belange und Bezüge zu Computeralgebrasystemen und maschinellen Beweisern behandelt werden. 3.2.2 Alternative Notationen Die verschiedenen Versuche, Mathematik zu formalisieren, haben eine Reihe von alternativen Notationen hervorgebracht. Diese sollen zwecks Gegenüberstellung mit konventionellen Notationen herausgearbeitet werden. Als Quellen für formale Notationen sollen dienen • der formalisierte Aufbau mathematischer Gebiete von B OURBAKI, • Bibliotheken formalisierter Beweise ( Journal of Formalized Mathematics“ (Mizar), Archive ” ” of Formal Proofs“ (Isabelle), MetaMath), • Computeralgebrasysteme (Axiom, Derive, Maple, Mathematica, MuPAD, Singular) und • Programmiersprachen (Haskell beinhaltet einige Ansätze zur Abbildung mathematischer Konzepte auf Computeranwendungen, siehe Seite 11). 3.2.3 Vergleich An klassischen Herleitungen, Beweisen und Lösungen von Aufgaben soll untersucht werden, ob sich die Umformungen mit konventionellen Notationen sicher formal bewältigen lassen, oder ob auf intuitive Argumente zurückgegriffen werden muss. Gibt es verschiedene Notationen für eine Situation oder Vorschläge für ganz neue Notationen, so sollen Beweise für den gleichen Satz in verschiedenen Notationen gegenübergestellt werden. Daraus soll abgeleitet werden, warum eine Notation die betrachtete Situation gut modelliert oder nicht. Dies wiederum legt den Grundstein für vereinfachte Kriterien für formal sichere Notationen. Dies soll im folgenden an drei Beispielen demonstriert werden. 6 Trennung der Variablen Die Differentialschreibweise eignet sich gut, um Zusammenhänge wie die Kettenregel, die Ableitung von Umkehrfunktionen oder die Trennung der Variablen zur Lösung von gewöhnlichen Differentialgleichungen 1. Ordnung zu erläutern. Letzteres wird beispielsweise in [Bar86, Abschnitt 8.2.1] so eingeführt: y0 dy dx ψ(y) d y Z ψ(y) d y ϕ(x) ψ(y) ϕ(x) = ψ(y) = ϕ(x) d x Z = ϕ(x) d x + C = Diese Umformung besticht mit einer gewissen Ästhetik. Durch die Multiplikation mit d x wird die Gleichung symmetrisch, der Unterschied zwischen der Veränderlichen x und der abhängigen Größe y wird vorübergehend aufgehoben. Aber ist dieser Formalismus zuverlässig? Kann man ohne weiteres auf beiden Seiten der Gleichung bezüglich verschiedener Variablen integrieren? Wie kommt die Konstante C in die Gleichung? Natürlich gehört die Integrationskonstante formal immer zum unbestimmten Integral. Bei skalaren Gleichungen kann man aber aus der Gleichung x = y und der Definiertheit von f (x) direkt f (x) = f (y) folgern. Dies ist eine fundamentale Eigenschaft von Funktionen. Ist also Integration keine Funktion? Kann man nicht einfach durch bestimmte Integration die Ungewissheit beseitigen, etwa so Z t Z t ψ(y) d y = ϕ(x) d x ? 0 0 Wir vollziehen diese Herleitung nun mit Funktionen statt mit Differentialen nach. Die Schlussweise x = y ⇒ f (x) = f (y), welche jegliche Gleichungsumformung rechtfertigt, gilt dadurch uneingeschränkt weiter. Wir fassen y als reelle Funktion auf, also als ein mathematisches Objekt, das einer Gleichung genügt. Die Differentialgleichung lautet y 0 = x 7→ ϕ(x) ψ(y(x)) . Wenn man die punktweise Division von Funktionen ebenfalls mit einem Bruchstrich notiert, kann man diese Gleichung zu ϕ y0 = ψ◦y verkürzen. Wenn y 0 überall definiert ist, darf die Funktion ψ ◦ y nirgends Null sein. Also kann man auf beiden Seiten punktweise mit ψ ◦ y multiplizieren und kürzen. (ψ ◦ y) · y 0 = ϕ Nun berechnet man von den Funktionen auf beiden Seiten ein bestimmtes Integral. Wenn ϕ integrierbar ist, ist dieser Schritt ungefährlich, denn man wendet lediglich eine Funktion (im funktionalanalytischen Sinne ein Funktional) auf beide Seiten der Gleichung an. Z t Z t 0 ∀t ((ψ ◦ y) · y ) = ϕ 0 0 Wenn nun Φ eine Stammfunktion von ϕ ist und Ψ eine Stammfunktion von ψ, dann kann man die linke Seite mit der Substitutionsregel umformen und es gilt Z t ((ψ ◦ y) · y 0 ) = (Ψ ◦ y)(t) − (Ψ ◦ y)(0) 0 Z = Ψ(y(t)) − Ψ(y(0)) = Φ(t) − Φ(0) . t ϕ 0 7 Das heißt, für jede Wahl der Stammfunktionen Φ und Ψ gilt ∀t Ψ(y(t)) − Ψ(y(0)) = Φ(t) − Φ(0) ∀t y(t) = Ψ−1 (Ψ(y(0)) + Φ(t) − Φ(0)) . Integrationskonstanten sind nun in der Wahl der Stammfunktionen versteckt. Diese Integrationskonstanten heben sich allerdings in den Differenzen weg, sodass jede beliebige Stammfunktion alle möglichen Lösungen für y erlaubt, welche nur noch vom Anfangswert y(0) abhängen. Diesem Lösungsweg fehlt zwar die Ästhetik der Differentialschreibweise, jedoch kann man die Differentialgleichung nun auf die gleiche Weise umformen, wie eine Gleichung von Zahlen. In jedem Schritt kann man sich überlegen, mit welchen Objekten man es zu tun hat, welche Umformungsschritte erlaubt sind und ob Fallunterscheidungen notwendig sind. Komplexitätstheorie Mit der O-Notation wird in der Komplexitätstheorie Wachstumsverhalten von Laufzeit und Speicherplatzbedarf von Algorithmen beschrieben. Diese Notation ist ganz ähnlich zu den L ANDAU-Symbolen O und o, welche unter anderem bei TAYLORReihenentwicklungen eingesetzt werden. Es sei T (n) die genaue Laufzeit eines Algorithmus, dessen Laufzeit proportional zum Quadrat der Größe n der Eingangsdaten wächst. Dafür schreibt man häufig T (n) = O(n2 ), siehe z.B. [Sed98]. Diese Notation ist in vielerlei Hinsicht problematisch. Erstens suggeriert das Gleichheitszeichen echte Gleichheit. Dass diese Suggestion falsch ist, kann man sich leicht verdeutlichen, indem man z.B. aus den allgemein akzeptierten Aussagen n = O(n) und n = O(n2 ) formal die Aussage O(n) = O(n2 ) ableitet, welche wohl von den meisten Lesern abgelehnt wird. Zweitens bezeichnen T (n) und n2 die Laufzeiten für bestimmte Eingabegrößen. Die Idee der asymptotischen Laufzeitbetrachtung ist aber gerade, von der Laufzeit bei einzelnen Eingabegrößen zu einem Wachstumsverhalten zu abstrahieren. In Beziehung gesetzt werden müssten also die Funktionen T und n 7→ n2 und nicht deren Funktionswerte. [Tho99, Abschnitt 19.1, Complexity ” of functions“, Seite 414], [AD04] Kennt man die Bedeutung der O-Notation nicht, kann man aus der Funktionswertnotation leicht falsche Schlüsse ziehen. Rein formal könnte man folgendes ableiten: Weil jede konstante Funktion bis auf einen Faktor durch jede beliebige positive konstante Funktion beschränkt ist, kann man induktiv aus 1 4 9 = O(1) = O(2) = O(3) n2 = O(n) die allgemeine Form folgern (Details siehe [Thi02]). Auch diese Aussage wird wohl von den meisten Nutzern der ONotation als falsch angesehen. Eine unproblematische Modellierung von Komplexitäten und Komplexitätsklassen und die dafür benötigten Notationen sind bekannt, aber weniger gebräuchlich. Man fasst O besser als Operator auf, der eine Funktion auf eine Funktionenmenge abbildet. O(f ) bezeichnet die Menge aller Funktionen, die asymptotisch nach oben durch f beschränkt sind. Die Aussage aus dem Beispiel könnte man mit T ∈ O(n 7→ n2 ) wiedergeben. Die oben angedeutete Induktion führt nun 8 zu einem korrekten Ergebnis. t 7→ 1 ∈ O(t 7→ 1) t 7→ 4 ∈ O(t 7→ 2) t 7→ 9 ∈ O(t → 7 3) .. . t 7→ n2 ∈ O(t 7→ n) D.h. jede konstante Funktion t 7→ n2 ist durch die konstante Funktion t 7→ n asymptotisch beschränkt. Diese funktionalanalytisch motivierte Modellierung beschreibt den Sachverhalt allein mit mathematischen Objekten. Es lässt sich zum Beispiel feststellen, dass O(f ) mit Funktionsaddition und -skalierung einen Vektorraum bildet. Das Konzept lässt sich problemlos auf Komplexitätsfunktionen mit mehreren Parametern verallgemeinern, etwa die Anzahl von Knoten und Kanten eines Graphen. Stochastik Um mit Zufallsgrößen in der Stochastik arbeiten zu können, benötigt man immer den Kontext des Wahrscheinlichkeitsraumes. Der Wahrscheinlichkeitsraum beschreibt die Abhängigkeiten zwischen Zufallsgrößen. Diese Abhängigkeiten gehen aus der Notation für die Zufallsgrößen nicht hervor. Beispielsweise kann man E(X · Y ) nur dann in EX · EY umformen, wenn X und Y unabhängige Zufallsgrößen sind. Dieser Wahrscheinlichkeitsraum muss von Anfang an so gewählt sein, dass alle Zufallsgrößen enthalten sind, mit denen man arbeiten möchte. Dieser recht schwer fassbare Kontext könnte der Grund sein, warum Computeralgebrasysteme das Rechnen mit Zufallsgrößen bislang nicht unterstützen, obwohl sie sehr wohl beliebig verteilte (Pseudo-)Zufallszahlen erzeugen können. Möglicherweise braucht man den Kontext des Wahrscheinlichkeitsraumes und darauf definierte Zufallsgrößen gar nicht, um Zufallsexperimente mathematisch zu beschreiben. Statt mit Zufallsgrößen könnte man mit Verteilungsfunktionen und Operationen zwischen diesen arbeiten. Statt von der Verteilungsfunktion FX zur Zufallsgröße X müsste man dann von der Verteilung VF zur Verteilungsfunktion F sprechen. Für eine Verteilungsfunktion F über der Grundgesamtheit A gilt F ∈ A → [0, 1]. (Analog zur Funktionalen Programmierung steht hier A → B für die Menge aller partiellen Funktionen von A nach B.) Eine Verteilung soll sich nur im Typ von der Verteilungsfunktion unterscheiden, aber eine gleichwertige Darstellung besitzen. Bezeichnet man die Menge aller Verteilungen über A mit V(A), kann man VF ∈ V(A) schreiben. Es gilt zum Beispiel Z E(VF ) = t d F (t) A VF + VG = V(F ∗G)0 (VF , VG ) = VF ⊗G VF ≤ a = VG , mit G(falsch) G(wahr) = 1 − F (a) = 1 . Hierbei wird VF ≤ a als diskrete Verteilung über der Grundgesamtheit {falsch, wahr} betrachtet. Es gilt (≤) ∈ V(A) × A → V({falsch, wahr}). Da ein Name einer Verteilung wie X nur für die Verteilungsfunktion steht, gehen etwaige Abhängigkeiten zwischen Verteilungen nur über die Operationen zwischen den Größen ein. Wenn beispielsweise · für die Multiplikation unabhängiger Zufallsgrößen steht, dann gilt immer E(X · Y ) = EX · EY , weil X und Y für unabhängige Größen stehen, und genauso E(X · X) = EX · EX, weil lediglich zwei unabhängige Größen mit der gleichen Verteilung multipliziert werden, aber es gilt im Allgemeinen nicht X · X = X 2 . Möchte man mit abhängigen Zufallsgrößen arbeiten, muss man auf auf Tupeln definierte Verteilungsfunktionen zurückgreifen. Dies kann man auch auf komplexere stochastische Objekte 9 ausweiten. Für die Verteilungsfunktion F eines reellen stochastischen Prozesses beispielsweise gilt F ∈ (R → R) → [0, 1]. Der Vorteil einer entsprechenden Notation wäre, dass Abhängigkeiten immer sichtbar bleiben. Die Notation (X, Y ) bliebe unabhängigen Größen X und Y vorbehalten. Aus Verteilungen, welche für unabhängigen Größen stehen, können aber durch weitere Rechenschritte Verbundverteilungen werden, welche für abhängige Größen stehen. Wenn X eine Verteilung ist, dann repräsentiert (X, . . . , X) ein Tupel unabhängiger Größen. Die Verteilungsfunktion ist ein mehrfaches Tensorprodukt der Verteilungsfunktion zu X. Die aufsteigende Anordnung sort erzeugt allerdings abhängige Zufallsgrößen in Form einer tupelwertigen Verteilung sort(X, . . . , X). Den Operator sort kann man natürlich genauso gut auf ein Tupel abhängiger Größen Y anwenden: sort Y . 3.2.4 Bewertungsmaßstäbe Das übergeordnete Ziel dieses Projektes ist es, Notationen zu finden, die zuverlässiges Umformen von Gleichungen erlauben. Ohne eine genaue Definition von sicherem Umformen und ohne einfacher handhabbare Kriterien müsste man aber Notationen immer anhand von Beispielen erproben. Deswegen sollen in diesem Projekt einfach zu prüfende Bewertungsmaßstäbe herausgearbeitet werden. Im folgenden sind erste Vorschläge aufgeführt. • Reduktion des Kontextes Je weniger Kontextinformationen nötig sind, um einen Ausdruck zu verstehen, um so einfacher sind Ausdrücke zu verstehen. Die Schlussweise x = y und definiertes f (x) implizieren ” f (x) = f (y)“ soll keinerlei zusätzliche Informationen über x, y und f benötigen. • Kapselungsprinzip Das Gebot der Kontextfreiheit übertragen auf Teilausdrücke führt zu einem Kapselungsprinzip oder Baukastenprinzip. Die Bedeutung eines Teilausdruckes sollte nicht vom umgebenden Ausdruck abhängen. Wenn das gewährleistet ist, lassen sich kleine Ausdrücke bedenkenlos zu größeren zusammensetzen. Es lassen sich Formeln manipulieren, ohne die Definition aller Bestandteile zu kennen. Die genaue Schreibweise eines Teilausdruckes, etwa (2 + 2) oder 4, sollte egal sein, solange er für das gleiche mathematische Objekt steht. • Funktionen statt Schablonen Um dem Kapselungsprinzip zu genügen, sollte man Funktionen Schablonen vorziehen. Funktionen haben weiter den Vorteil, dass sie sich selbst wieder durch Funktionen transformieren lassen. • Gleichheitszeichen Das Gleichheitszeichen soll nur dazu dienen, anzuzeigen, dass auf beiden Seiten des Gleichheitszeichen Bezeichnungen für das gleiche mathematische Objekt stehen. Wendet man auf beide Seiten der Gleichung Funktionen an, bleibt daher die Gleichheit erhalten. • Variablen Die ursprüngliche Bedeutung von Variablen soll konsequent beibehalten werden. Danach bezeichnen Variablen mathematische Objekte, sind aber selbst keine. Ihr Name dient allein dazu, gleiche mathematische Objekte zu kennzeichnen, aber der Variablenname soll nicht in Berechnungen eingehen. • Kombinierbarkeit Je weniger Notationen es gibt, desto leichter behält man den Überblick, desto weniger Rechenregeln benötigt man. Die Anzahl der Notationen lässt sich gering halten, indem man kombinierbare Notationen einsetzt und Redundanzen vermeidet. Wenn sich eine wenig benötigte Notation auch durch die Kombination zweier einfacher Notationen darstellen lässt, könnte man auf die Spezialnotation verzichten. 10 • Typkonsistenz Halten die Ausdrücke einer Typkontrolle stand? In n = O(n2 ) zum Beispiel stehen auf der linken Seite ein skalarer Wert und auf der rechten Seite eine Menge. Die Werte beider Seiten können also nicht im eigentlichen Sinne gleich sein. 3.2.5 Anwendung Ungewohnte Notationen stoßen natürlich immer auf Akzeptanzprobleme. Wer mit der traditionellen Notation vertraut ist, kennt die Probleme und umgeht sie. Unberührt davon bleibt die Frage, ob man mit alternativen Notationen die Arbeit mit mathematischen Ausdrücken vereinfachen kann. Tatsächlich gibt es Anwendungen, in denen diese Vereinfachungen die Vorteile der Gewohnheit überwiegen können. • Eine verlässliche Notation kann als Prüfstein in Fällen herangezogen werden, in denen man mit der traditionellen Notation kein sicheres Urteil fällen kann. Um einem anderen Menschen erklären zu können, wo der Fehler in einer widersinnigen Umformung liegt, bedarf es einer Sprache, die von Uneindeutigkeiten möglichst befreit ist. • Man kann davon ausgehen, dass eine Notation das Erlernen von Formelmanipulationen erleichtert, wenn man sich auf mechanische Umformungsschritte verlassen kann. Deswegen sind formale Notationen auch für die Didaktik interessant. • Bislang versuchen Programmiersprachen- und Algebrasystementwickler der traditionellen Notation möglichst nahe zu kommen, auch wenn es die Entwicklung verkompliziert und die Bedienung bei komplizierten Aufgaben erschwert. Dem Benutzer große Umstellungen von der mathematischen Notation abzuverlangen, senkt voraussichtlich die Akzeptanz einer Sprache oder eines Algebrasystems. Andererseits werden Notationsprobleme am Computer schneller offenbar und sind hartnäckiger als in der Mathematik auf dem Papier, wo man über Probleme einfacher hinweggehen kann. Gerade funktionale, stark und statisch typisierte Sprachen bieten Ansätze, von denen man auch in der Mathematik lernen kann. Die Ergebnisse dieses Projektes sollen daher so aufbereitet sein, dass sie direkt in Computeralgebrasysteme einfließen können. Wegen der direkten Mitwirkungsmöglichkeit bieten sich hier Systeme mit offengelegten Programmtexten an, etwa Axiom, Yacas oder Reduce. Möglicherweise verhilft der Einsatz in Computeralgebrasystemen funktionalen Notationen zu einer breiteren Akzeptanz und auch zum Einsatz auf dem Papier“. ” A • Bislang werden mathematische Formeln in LTEX rein nach dem Aussehen gesetzt. Dies widerspricht der LATEX-Philosophie von der Trennung von Form und Inhalt. Wünschenswert ist ein System, mit dem man Ausdrücke in LATEX-Dokumente integrieren kann, welche sich einerseits auswerten und prüfen lassen, und andererseits in verschiedenen Notationen setzen lassen. Ein entsprechendes System soll im Rahmen dieses Projektes entwickelt werden. Siehe nächsten Abschnitt. 3.2.6 Automatischer Satz formaler Ausdrücke Viele heutige Computeralgebrasysteme sind bereits mit Möglichkeiten zur Gestaltung und Präsentation von Berechnungen ausgestattet. Allerdings enthalten Computeralgebraausdrücke häufig nicht genug Informationen für funktionale Notationen. Auch Beweissysteme wie Isabelle und Mizar sind in der Lage, ganze (LATEX-)Dokumente aus maschinell prüfbaren Inhalten zu erzeugen. Während bei diesen Projekten die Herleitung oder der Beweis im Vordergrund steht, dem sich die Gestaltung unterordnet, sollte es auch möglich sein, in ganz normalen LATEX-Dokumenten 11 an Stelle von LATEX-Formeln Ausdrücke zu integrieren, die sich an mathematischem Inhalt orientieren. Das heißt, ein LATEX-Dokument soll wie bisher mit allen Freiheiten der Gestaltung durch LATEX erstellt werden können und nur die Formeln sollen durch maschinell auswertbare und prüfbare Ausdrücke ersetzt werden. Dies ist gewissermaßen ein Zwischenschritt zwischen reinen LATEX-Dokumenten, in denen Formeln allein dem Aussehen nach beschrieben sind, und automatisch aufbereiteten Dokumenten. Möglicherweise erhöht dieser Zwischenschritt langfristig auch die Akzeptanz von Beweissystemen. Mit der vorgeschlagenen Technik lässt sich aus der gleichen Dokumentbeschreibung je ein Dokument für Mathematiker, die die traditionelle Notation bevorzugen, und für jene, die eine formalere Notation ausprobieren wollen, erzeugen. Dies ist ideal für Publikationsserver (arxiv.org), welche Dokumente erst auf Anfrage aus den LATEX-Quellen erstellen, oder WWWNachschlagewerke wie PlanetMath.org oder MathWorld.com, welche durch den Benutzer konfiguriert werden könnten. Zusammen mit einer maschinell auswertbaren Beschreibung der DIN-Richtlinien, kann man dann Dokumente erzeugen, die garantiert den DIN-Standards entsprechen. Der automatische Formelsatz trennt also ganz im Sinne der LATEX-Philosophie Inhalt und Form und könnte sich als ähnlich nützlich erweisen, wie BibTEX zum Formatieren von Literaturverzeichnissen. Es stellt sich die Frage, in welcher Sprache die mathematischen Ausdrücke notiert sein könnten. Greift man auf eine existierende Sprache zurück, spart man den Aufwand der Entwicklung einer Sprache und passenden Analysewerkzeugen. Für dieses Projekt wird die Sprache Haskell favorisiert, die sich aus folgenden Gründen für den Formelsatz anbietet: • Als rein funktionale Sprache verbietet sie Seiteneffekte, genau wie es bei mathematischen Ausdrücken der Fall ist. Diese Eigenschaft ist wesentlich für das Führen von Beweisen. [DvE04] • Haskell an sich unterstützt keine Makros. Dies zwingt Programmierer zur rein funktionalen Programmierung (also ohne Seiteneffekte, sofern die Programmierer nicht eigenhändig etwa den C-Präprozessor einsetzen) und erleichtert die Syntaxanalyse. • Durch Typklassen werden die Vorteile strenger und statischer Typisierung (Sicherheit und effiziente ausführbare Programme) mit den Vorteilen schwacher oder dynamischer Typisierung (flexible Wiederverwendbarkeit von Programmteilen) kombiniert. So steht etwa das Plus-Symbol abhängig von den Typen der Operanden für eine den Typen angepasste Addition. Dies kann man als Formalisierung des Umstandes betrachten, dass auch in der Mathematik das Symbol + gleichermaßen für natürliche wie gebrochene Zahlen, Polynome oder Matrizen verwendet wird. • Die unvollständige Auswertung von Funktionen erlaubt das Rechnen mit Funktionen, also die Definition von Funktionen höherer Ordnung wie etwa dem Differentialoperator. Dieser Operator kann näherungsweise durch Differenzenquotienten implementiert werden, wobei die Schrittweite im LATEX-Satz ausgelassen wird. • Die Bedarfsauswertung von Ausdrücken erlaubt den Umgang mit unendlichen Datenstrukturen, wie Folgen und Potenzreihen [Hug84]. Daher kann man in Haskell auch komplexere mathematische Sachverhalte formulieren und entsprechende Berechnungen durchführen oder wenigstens numerisch annähern. • Haskell-Interpreter akzeptieren in der Regel Programmtext im sogenannten Stil der Li” terarischen Programmierung“, also reinen Text oder LATEX-Text gemischt mit HaskellProgrammtext. Zeilen, welche Haskell-Programmtext enthalten, können zum Beispiel durch >-Zeichen markiert werden. Solche Texte können unverändert sowohl mit LATEX übersetzt, als auch mit einem Haskell-Interpreter verarbeitet werden. • Haskell wird in der Forschung breit eingesetzt und wird durch eine Reihe von Werkzeugen unterstützt, welche für unsere Anwendung wichtig sind. 12 Mit der Sprache Haskell existiert also bereits eine formale Sprache, welche die traditionelle Mathematik recht gut abbildet. Mit der vorgeschlagenen Formelsatztechnik könnte man ein Dokument schreiben, welches ein mathematisches Problem in konventioneller oder experimenteller Notation beschreibt, gleichzeitig aber eine direkt einsetzbare Haskell-Funktionsbibliothek beinhaltet. Anstatt für diese Funktionsbibliothek eine Testbibliothek zu schreiben, könnte man die Herleitungen und Beweise als Tests einsetzen, und mit einem Programm wie QuickCheck [CH00] durch zufällig gewählte Eingaben prüfen lassen. So kann man beispielsweise mit quickCheck (\x y -> xˆ2 + yˆ2 >= 2*x*y) die Ungleichung x2 + y 2 ≥ 2 · x · y zwar nicht beweisen, aber wenigstens Flüchtigkeitsfehler ausschließen. In Haskell könnte beispielsweise die Funktion finiteSum wie folgt definiert sein finiteSum :: Num a => (Int,Int) -> (Int -> a) -> a finiteSum rng summand = sum (map summand (Array.range rng)) . Anstatt \sum_{i=0}ˆ{10} iˆ2 direkt in den LATEX-Text zu schreiben, könnte man den Haskell-Ausdruck finiteSum (0,10) (\i -> iˆ2) speziellen LATEX-Kommandos als Argument übergeben. \haskellformula{finiteSum (0,10) (\i -> iˆ2)} \begin{haskelldefinition} > x :: Num a => a > x = finiteSum (0,10) (\i -> iˆ2) \end{haskelldefinition} Die erste Notation ist als Ersatz für LATEX-Formeln in Textabsätzen gedacht, während die zweite direkt in eine Haskell-Programmierumgebung geladen werden kann. Die Haskell-Ausdrücke ließen sich sowohl mit einem Haskell-Übersetzer berechnen, als auch automatisch als mathematische Formel aufbereiten, wahlweise traditionell als 10 X 1. i2 i=0 oder experimentell als 2. 10 X (i 7→ i2 ) oder auch als 3. X i2 : i ∈ {0, . . . , 10} . 0 Hierzu muss eine Bibliothek von Ersetzungsregeln angelegt werden. Beispielsweise könnten mit arg beginnende Bezeichner als Platzhalter verwendet werden. Die Ersetzungen für finiteSum (argLower,argUpper) (\argIndex -> argSummand) wären dann 1. \sum_{\argIndex=\argLower}ˆ{\argUpper} \argSummand 2. \sum_{\argLower}ˆ{\argUpper} \left(\argIndex \mapsto \argSummand\right) 3. \sum \left(\argSummand : \argIndex\in\left\{\argLower,\dots,\argUpper\right\}\right) 13 . Zusätzlich zu den Ersetzungsregeln muss ein Mechanismus eingesetzt werden, um in Ausdrücken mit Infixoperatoren die Klammern zu reduzieren. Hat der Infixoperator eines Teilausdruckes einen niedrigeren Vorrang als der Operator der nächsthöheren Ebene, oder ist ein Operator mit Infixnotation nicht assoziativ, so müssen Klammern gesetzt werden. Für eine flexible Definition der Vorrangreihenfolge sollten hier aber nicht Prioritätenzahlen wie in Haskell oder Isabelle eingesetzt werden, sondern Regeln der Art x hat Vorrang vor y“, x und y haben ” ” gleichen Vorrang“, x ist rechtsassoziativ“ und x hat keine bevorzugte Assoziativität“. Anhand ” ” einer repräsentativen Menge von Dokumenten könnte man automatisch eine Vorrangreihenfolge bestimmen, welche die Anzahl der Klammern minimiert. Es soll betont werden, dass es nicht darum geht, beliebige Haskell-Ausdrücke in ansprechende mathematische Notation zu verwandeln. Vielmehr muss der Benutzer die Ausdrücke immer so notieren, dass sie sich sowohl für traditionelle und experimentelle Darstellung als auch für Berechnungen eignen. Beispielsweise wäre eine direkte Umsetzung der O-Notation, etwa f ‘elem‘ asympUpperBound g wenig hilfreich, weil zu ihrer Überprüfung die Menge aller durch g asymptotisch beschränkten Funktionen nach f durchsucht werden müsste, ganz zu schweigen davon, dass man auch die Gleichheit von Funktionen testen müsste. Eine Umsetzung der H ARDY-Notation erscheint hier als der günstigere Weg. Ein Ausdruck wie asympLess c f g, bei dem c für einen empirisch gefundenen Faktor steht, könnte bereits zur Prüfung auf Flüchtigkeitsfehler (vertauschtes f und g) genutzt werden. Dieser könnte als f . g oder f ∈ O(g) mathematisch gesetzt werden. Allerdings wäre es schwierig, für einen Ausdruck wie asympLess c (\x -> f x) (\y -> g y) automatisch die traditionelle Schreibweise abzuleiten. Die Umsetzung f (x) ∈ O(g(y)) entspricht sicher nicht den Erwartungen. Deswegen ist die Schreibweise asympLess c (\x -> (f x, g x)) vorzuziehen. Diese kann problemlos traditionell als f (x) ∈ O(g(x)) und funktional als (x 7→ f (x)) ∈ O(x 7→ g(x)) aufbereitet werden. Es bleibt zu prüfen, ob für die funktionale Schreibweise zum Beispiel durch η-Reduktion (x 7→ f (x) durch f ersetzen) oder durch Verwendung der Funktionsverkettung (x 7→ g(f (x)) durch g ◦ f ersetzen) automatisch vereinfacht werden sollten. Die Assistenz des Benutzer vorausgesetzt, lassen sich auch komplexe Ausdrücke verarbeiten, die nur insgesamt einen Sinn ergeben. Beispielsweise hat die Notation a < b < c keinerlei Entsprechung in gängigen Programmiersprachen. Dennoch gibt es für Haskell eine Notation, welche sich leicht in die mathematisch übliche überführen lässt. Dabei wird mit Hilfe von zwei Infixoperatoren eine Liste von Paaren aus Vergleichsfunktion und Operand aufgebaut. Mit den Hilfsfunktionen infixr 4 &-, -& type Cmp a = (a -> a -> Bool) type Chain a = [(Cmp a, a)] -- add comparison to a chain (&-) :: Cmp a -> (a, Chain a) -> Chain a cmp &- (x,xs) = (cmp,x):xs -- add operand to a chain (-&) :: a -> Chain a -> (a, Chain a) (-&) = (,) -- check if all comparisons are true check :: (a, Chain a) -> Bool check (x,chain) = let (cmps,xs) = unzip chain in and (zipWith3 id cmps (x:xs) xs) lässt sich dann die Aussage 14 example :: Bool example = check (1 -& (<) &- 5 -& (==) &- 5 -& (<=) &- 10 -& []) aufbauen, welche als 1 < 5 = 5 ≤ 10 gesetzt werden soll. Neben der weitgehend automatischen Umsetzung von Haskell-Ausdrücken in mathematische Formeln muss auch eine Möglichkeit für manuelle Eingriffe in den Satz vorgesehen sein. Wenn zum Beispiel eine Zeile zu lang ist, könnte der Benutzer von Hand durch einen speziellen Haskell-Kommentar die Zeile an der entsprechenden Stelle umbrechen. Da der gleiche Haskell-Ausdruck verschieden in Formeln umgesetzt werden kann, ist diese Vorgehensweise problematisch. Zu prüfen wäre der Einsatz eines LATEX-Makros für Sollbruchstellen in Formeln, analog zu \linebreak und \pagebreak, welche automatisch vom Haskell-FormelÜbersetzer eingefügt werden. Es bleibt noch die Frage zu klären, auf welchem Wege man die Haskell-Ausdrücke in einem LATEX-Dokument verarbeitet. Im folgenden werden verschiedene Ansätze diskutiert. • Der LATEX-Präprozessor lhs2TeX bietet die Möglichkeit, Haskell-Programmtext innerhalb eines LATEX-Dokumentes statt mit einer Schriftart mit konstanter Zeichenbreite (Schreibmaschinenschrift) in einer mehr mathematisch aussehenden Form zu setzen. Daraus entstand auch die Möglichkeit, Haskell-Programmtext in mathematische Formeln umzuwandeln. Dies wurde vom Antragsteller bereits in Teilen von [Thi06b] verwendet. Der Satz der Formeln ist sehr nah an der Haskell-Notation ausgerichtet. Beispielsweise können Klammern nicht automatisch eingefügt werden und die Regeln zum Weglassen von Klammern sind nicht fein genug, um eine einheitliche Haskell-Präfixnotation wahlweise in Präfixnotation oder klammerarmer Infixnotation auszugeben. Dies liegt daran, dass lhs2TeX in Erwartung zukünftiger Haskell-Erweiterungen die Syntax der Haskell-Ausdrücke nicht vollständig prüft. Außerdem leidet lhs2TeX an typischen Präprozessor-Problemen, wie gestaffelten Escape-Sequenzen“ und dem unvollständigen Verständnis des LATEX-Textes. ” Für lhs2TeX aufbereiteter LATEX-Text lässt sich im Allgemeinen nicht mehr direkt von einem LATEX-Übersetzer verarbeiten. Der Vorteil ist allerdings, dass die Umwandlung von Haskell-Programmtext in LATEX-Formeln von der LATEX-Übersetzung abgekoppelt ist und man den umgewandelten Text einsehen kann. Letzteres kann zur Fehlersuche sehr nützlich sein. • Es gibt einen Haskell-Parser namens lambdaTeX, der ausschließlich in LATEX implementiert ist. Dieser würde eine gute Grundlage für ein System bilden, für das außer einem LATEX-Paket keine weiteren Programme zu installieren wären. Allerdings erscheint es wenig aussichtsreich, die recht komplizierte Aufbereitung von Haskell-Programmtext in der untypisierten Sprache LATEX zu implementieren. • Am meisten Erfolg verspricht daher der Ansatz, eingebetteten Haskell-Programmtext in eine LATEX-Umgebung einzuschließen, welche den enthaltenen Text in eine Art aux-Datei schreibt, welche von einem externen Programm als LATEX-Formel aufbereitet wird. Dieses externe Programm wird zweckmäßigerweise in Haskell geschrieben, denn zum Analysieren von Haskell-Programmtext gibt es bereits die Funktionsbibliothek haskell-src. Diese Architektur soll in diesem Projekt implementiert werden. Die Implementierung des Übersetzers von Haskell-Ausdrücken in LATEX-Formeln und des zugehörigen LATEX-Paketes soll einer studentischen Hilfskraft übertragen werden. 15 3.2.7 Zeitplan Quartal 1 2 3 4 5 7 6 8 1. 2. 3. 4. 5. 6. 7. 8. 1. 1.-12. Monat Bestandsaufnahme 2. 4.-7. Monat Seminar über mathematische Notationen 3. 7.-18. Monat Weitere Vergleiche zwischen traditioneller und formaler Notation analog zu denen in Abschnitt 3.2.3, Herausarbeiten von Bewertungskriterien, Veröffentlichung in Fundamenta Mathematicae“ oder Journal of Automated Reasoning“, ” ” Beitrag zu GAMM- oder DMV-Jahrestagung 4. 13.-24. Monat Vorschläge für Notationen, d.h. Funktionsschnittstellen für Computeralgebrasysteme, Veröffentlichung in Journal of Symbolic Computation“ ” 5. 1.-12. Monat Implementation der LATEX-Unterstützung für weitgehend automatischen Satz 6. 7.-24. Monat Implementation des automatischen Formelsatzes aus Haskell-Quellen als Open-SourceProjekt unter darcs.haskell.org, Beitrag zum Haskell Communities and Activities Report“ und ” zur International Conference on Functional Programming“ ” 7. 13.-24. Monat DIN-Richtlinie in Bibliothek umsetzen 8. 19.-24. Monat Prüfung des Einsatzes bei arxiv.org, Haskell-Wiki, PlanetMath.org oder MathWorld.com 3.3 Untersuchungen am Menschen oder an vom Menschen entnommenem Material keine 3.4 Tierversuche keine 16 3.5 Gentechnologische Experimente keine 4 Beantragte Mittel 4.1 Personalkosten • eine Stelle nach BAT-O IIa (eigene Stelle) • eine studentische Hilfskraft für die Dauer des Projektes und 40h/Woche zur Implementierung des automatischen Formelsatzes 4.2 Wissenschaftliche Geräte Zum Vergleich der Konzepte verschiedener Computeralgebrasysteme werden aktuelle Versionen der gängigen Vertreter benötigt. Derive MuPAD Maple Mathematica Summe 4.3 200 e 400 e 1000 e 1500 e 3100 e Verbrauchsmaterial nicht benötigt 4.4 Reisen Zusammenarbeit mit Wissenschaftlern auf dem Gebiet der Computeralgebra und der funktionalen Programmierung oder mit Mitarbeitern beim DIN Tagungsreisen Summe 4.5 1000 e 2000 e 3000 e Publikationskosten keine 4.6 Sonstige Kosten keine 5 5.1 Voraussetzungen für die Durchführung des Vorhabens Zusammensetzung der Arbeitsgruppe An dem Forschungsvorhaben wird ausschließlich Personal arbeiten, welches aus dem beantragten Projekt bezahlt wird. 17 5.2 Zusammenarbeit mit anderen Wissenschaftlerinnen und Wissenschaftlern Der Antragsteller arbeitet bereits an dem von DYLAN T HURSTON initiierten Haskell-Projekt Nu” meric Prelude“ mit, in welchem eine mehr algebraisch ausgerichtete Hierarchie von HaskellTypklassen erarbeitet, implementiert und getestet wird. Neben Wissenschaftlern auf dem Gebiet der funktionalen Programmierung (Haskell-Café) steht der Antragsteller außerdem in Kontakt mit (ehemaligen) Mitarbeitern beim DIN (Prof. Dr. G ERHARD B RECHT und Prof. Dr. A RNOLD O BER SCHELP ) und mit J OHN H ARRISON , einem Forscher auf dem Gebiet der automatischen Beweiser. Weiterhin sollen Entwickler von Computeralgebrasystemen einbezogen werden. Zum Knüpfen weiterer Kontakte besucht der Antragsteller mit dem Poster [Thi06a] die diesjährige DMV-Tagung in Bonn und den mitteldeutschen Computeralgebratag in Jena. 5.3 Arbeiten im Ausland und Kooperation mit Partnern im Ausland keine 5.4 Apparative Ausstattung keine 5.5 Laufende Mittel für Sachausgaben keine 5.6 Interessenkonflikte bei wirtschaftlichen Aktivitäten keine 5.7 Sonstige Voraussetzungen keine 6 Erklärungen Ein Antrag auf Finanzierung dieses Vorhabens wurde bei keiner anderen Stelle eingereicht. Wenn ich einen solchen Antrag stelle, werde ich die Deutsche Forschungsgemeinschaft unverzüglich benachrichtigen. Der Vertrauensdozent der Universität Halle für Angelegenheiten der Deutschen Forschungsgemeinschaft Prof. Dr. Wulf Diepenbrock wird über diesen Antrag unterrichtet. 7 Unterschrift Halle, 2006-09-11 18 8 Verzeichnis der Anlagen • Lebenslauf Henning Thielemann • Schriftenverzeichnis • Erklärung der aufnehmenden Institution 19 Literatur [AD04] AVIGAD, J EREMY und K EVIN D ONNELLY: Formalizing O notation in Isabelle/HOL. In: B A SIN , DAVID und M ICHA ËL RUSINOWITCH (Herausgeber): Automated Reasoning: Second international joint conference, IJCAR 2004, Nummer 3097 in Lecture Notes in Artificial Intelligence, Seiten 357–371. Springer, 2004. [Bar86] B ARTSCH , H ANS -J OCHEN: Mathematische Formeln. Buch- und Zeit-Verlagsgesellschaft Köln, 14. Auflage, 1986. [Bra77] B RANDENBURG , W ILHELM: Fundamental Mathematical Operations and Notations. Courses in Scientific English. Cornelsen & Oxford University Press, Berlin, Pilot Auflage, 1977. [BSM00] B RONSTEIN , I LJA N., KONSTANTIN A. S EMENDJAJEW und G ERHARD M USIOL: Taschenbuch der Mathematik. Harri Deutsch, 5. Auflage, September 2000. [Caj93] C AJORI , F LORIAN: A History of Mathematical Notation. Dover, New York, 1993. [CH00] C LAESSEN , KOEN und J OHN H UGHES: QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. In: International Conference on Functional Programming, ICFP 2000, Montreal, Canada, 2000. [Dij86] D IJKSTRA , E DSGER W.: Address to my students, April 1986. [DIN94] DIN (Herausgeber): Formelzeichen, Formelsatz, Mathematische Zeichen und Begriffe. Nummer 202 in DIN-Taschenbuch. Beuth, 2. Auflage, July 1994. [DIN99] DIN (Herausgeber): Einheiten und Begriffe für physikalische Größen. Nummer 22 in DIN-Taschenbuch. Beuth, 8. Auflage, March 1999. [DvE04] D OETS , K EES und J AN VAN E IJCK: The Haskell Road to Logic, Maths and Programming. King’s College Publications, London, 2004. [Har96] H ARRISON , J OHN: Formalized Mathematics. Technischer Bericht, Åbo Akademi University, Department of Computer Science, Lemminkäisenkatu 14a, 20520 Turku, Finland, August 1996. [Hug84] H UGHES , J OHN: Why Functional Programming Matters. http://www.md.chalmers. se/˜rjmh/Papers/whyfp.pdf, 1984. [Int93] I NTERNATIONAL O RGANIZATION FOR S TANDARDIZATION: Quantities and Units. Standards Handbook. ISO, 3. Auflage, 1993. [KRG95] K ÄSTNER , H ERBERT, H ELMUT RUDOLPH und S IEGFRIED G OTTWALD (Herausgeber): Kleine Enzyklopädie Mathematik. Bibliographisches Institut, Mannheim, 1995. [Meh90] M EHRTENS , H ERBERT: Moderne - Sprache - Mathematik. Suhrkamp, 1990. [Sed98] S EDGEWICK , R OBERT: Algorithms in Modula-3. Addison-Wesley, April 1998. [Sha04] S HAN , C HUNG - CHIEH: Quantification and polarity sensitivity. Technischer Bericht, Havard University, 33 Oxford Street Cambridge, MA 02138 USA, 2004. [Thi02] T HIELEMANN , H ENNING: Klein, aber O. i-mail, Zeitschrift der Fachschaft Mathematik/Informatik an der Martin-Luther-Universität Halle-Wittenberg, Sommersemester 2002:11–16, August 2002. [Thi06a] T HIELEMANN , H ENNING: Mathematical notation and the use of functions. Angenommen zur Jahrestagung der DMV (Posterpräsentation ausgefallen), September 2006. 20 [Thi06b] T HIELEMANN , H ENNING: Optimally matched wavelets. Doktorarbeit, Universität Bremen, March 2006. [Tho99] T HOMPSON , S IMON: Haskell: The Craft of Functional Programming. Pearson, Addison Wesley, 2. Auflage, 1999. [TT06] T HURSTON , DYLAN und H ENNING T HIELEMANN: Haskell Communities and Activities Report, Kapitel Numeric Prelude. http://www.haskell.org/, 10. Auflage, June 2006. [Wol00] W OLFRAM , S TEPHEN: Mathematical Notation: Past and Future. In: MathML and Math on the Web: MathML International Conference 2000, October 2000. 21