1 Allgemeine Angaben - Institut für Informatik - Martin

Werbung
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
Herunterladen