Benutzer:Lowtec/p/Algebraische Spezifikation

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Die algebraische Spezifikation ist ein Gegenstand der theoretischen Informatik. Sie verwendet Begriffe, Methoden und Ergebnisse der allgemeinen Algebra, um abstrakte Datentypen mittels formaler Spezifikationen zu beschreiben. Technisch können so definierte Datentypen ggfls. durch geeignete Termersetzungssysteme direkt ausführbar gemacht werden.

In der Informatik treten eine Vielzahl von Datentypen wie Zahlen, Zeichenketten, Reihungen, endliche Abbildungen, Bäume usw. auf. Will man diese zum Gegenstand formaler (Korrektheits-)Beweise machen, dann stellt sich die Frage, welche Methoden man einsetzen kann, um sie hinreichend präziese zu beschreiben. Umgekehrt steht man im Rahmen einer formalen Fassung eines Datentypen vor dem Problem, gegebenenfalls mehr Details zu beschreiben, als gewünscht. Insbesondere soll eine formale Beschreibung möglichst neutral gegen einer Implementierung sein, von deren besonderen Details also abstrahiern. Allgemeiner hat eine geeignete Technik damit auch die Frage nach dem Verhältnis von Spezifikation und Implemenierung zufriedenstellend zu beantworten.

Zu allererst steht man bei der Herstellung eines Verfahrens, dass einen Datentyp abstrakt von jeglicher Implementierung und Darstellung beschreiben will, vor dem Problem, wie denn die Daten dann überhaupt noch darstellen soll, wenn man über deren Präsentation gar nicht mehr reden darf.

Der bei der algebraischen Spezifikation verfolgte Ansatz verwendet dazu zwei zentrale Mittel. Zunächst verbleiben für die Darstellung im Wesentlichen alleine die Namen der Operationen des Datentyps selbst als mögliche Grundlage. Da Operationen in diesem Zusammenhang grundsätzlich Funktionen sind, bieten sich Terme als hinreichend feinkörniges Ausdrucksmittel an.

Nun stehen Terme alleine allerdings nur für sich selbst, haben also zunächst keine besondere Bedeutung. Das zweite eingesetzte Mittel ist nun, die möglichen Werte eine Datentypen durch Gleichheit zwischen allen möglichen verschiedenen Darstellungen anzugeben. Damit kann ebenfalls formal präzisiert werden, welche Funktionen mit den Operationsnamen eigentlich genau bezeichnet sind.

Die Wirkung der Gleichheit als Mittel der Abstraktion lässt sich formal bereits durch Bildung von Klassen äquivalenter Gegenstände präzisieren. Legt man eine Menge von Präsentationen und eine Äquivalenzrelation zwischen ihnen zu Grunde, dann kann man alle zu äquivalente Präsentationen zu einer Klasse zusammenfassen: . Man kann dann von den Präsentationen, also der Mengen auf die Menge der so gebildeten Klassen übergehen. Den Übergang bewerkstelligt eine für die Äquivalenz charakteristische kanonische Abbildung .

Man kann die Klassen in diesem Zusammenhang als Werte bezeichen. Legt man als Repräsentationen Ausdrücke zu Grunde, dann stellen beispielsweise die Ausdrücke '3', '+3', '2+1' alle den selben Wert drei dar. Eine Klasse wären dann alle Ausdrück, die drei ergeben, die kanonische Abbildung das Ausrechnen der Ausdrücke.

Offenbar hat dieses Beispiel noch das Problem, dass die Ausdrücke nicht alleine aus Funktionen bestehen, sondern zudem noch Zahlen direkt enthält. Um sich in der Darstellung nun ganz auf Terme zurückzuziehen, können etwa die beiden Funktionsnamen 'eins' und 'plus' vereinbart werden, die alleine für die Bildung eines Terms verwendet werden dürfen.

Man erhielte dann für als Klasse für den Werte drei die beiden Terme 'plus(eins,plus(eins,eins))' und 'plus(plus(eins,eins),eins)'. Um die Terme nun zu ihren Klassen zusammenzufassen, ist eine geeignet Gleichheit anzugeben, wobei hier die Assoziativität von 'plus' bereits ausreicht, also:

plus(plus(A,B),C) = plus(A,plus(B,C))

Da Klassen nun aus vielen Elementen bestehen, sind sie in der Praxis ggfls. ein nur schwer handbares Darstellungsmittel. Durch Wahl eines Repräsentaten als Vertreter seiner jeweiligen Klasse, kann man sich jedoch wieder auf die Grundmenge selbst, die Terme also zur Darstellung zurückziehen. Dies führt auf den Begriff der kanonischen Normalform eines Terms.

Wendet man auf einen beliebigen Term die Assoziativitätsregel oben grundsätzlich von links nach rechts so lange an, wie dies möglich ist, dann erhält man in diesem Beispiel den Term in seiner kanonischen Form, hier etwa 'plus(eins,plus(eins,eins))' als Repräsentanten von drei. In dieser Form geht die Gleichheit in die Identität über, man kann also die Gleichheit zweier Terme testen, indem man sie kanonifiziert und die Normalformen unmittelbar vergleicht.

Die Gleichungen und damit auch die algebraische Spezifikations selbst können also u.U. als Termersetzungsregeln praktisch mit einem Termersetzungssystem zur Ausführung gebracht werden.

Leistung und Abgrenzung

[Bearbeiten | Quelltext bearbeiten]

Algebraische Spezifikationen sind ausdrucksstark genug, gängige Datentypen formal zufriedenstellend zu beschreiben. Welche Algebren, also Datentypen mit Hilfe von Gleichungen beschrieben werden können, hat Birkhoff[1] näher untersucht. Aus Sicht der Informatik sind gleichungsdefinierte Algebren ausdrucksstark genug, so ist etwa der Lambda-Kalkül algebraisch definierbar. Die Herstellung von Normalformen stösst entsprechend auf Entscheidbarkeitsprobleme.

Um algebraische Spezifikationen trotzdem sowohl möglichst natürlich und zugleich direkt ausführbar zu machen, wurden Termersetzungssysteme in der Informatik intensiv untersucht[2] und zahlreiche Programmiersprachen auf der Grundlage algebraischer Spezifikation entwickelt, darunter etwa die OBJ-Familie Goguens[3].

Zur Abgrenzung ist insbesondere hervorzuheben, dass Datentypen hier als Menge von Werten verstanden werden, also keine zustandsbehaftete Größe darstellen, etwa im Gegensatz zu Objekten im Sinne objektorientierter Programmierung. Historisch und z.T. noch landläufig wird der Terminus Datentyp auch für zustandsveränderliche Strukturen verwendet, Stapel, etwa. Da solche Beispiele auch in der Literatur zur algebraischen Spezifikation durchaus üblich ist[4], ist hier sorgfältig zu unterscheiden: Die algebraische Spezifikation ist sehr wohl in der Lage, den Inhalt eines Stapel als Wert zu beschreiben, auch durch eine Kette von Operation hindurch. Nicht beschrieben werden kann jedoch ein Stapel als zustandsveränderlich Größe. Dies müsste mit einer den Stapel als zustandsbehafteten Gegenstand präsentierenden (Programm-)Variablen geschehen, die den Inhalt des Stapels enthält und im Rahmen der Ausführung jeder Operation als Seiteneffekt aktualisiert wird.

Je nach dem, was im Vordergrund der formalen Modellierung steht, sind die Mittel entsprechend zu wählen. Möchte man Werte und deren Operationen beschreiben, kann algebraische Spezifikation geeignet sein, stehen Zustände im Vordergrund, dann sind ggfls. automatentheoretischen Möglichkeiten für eine Formalisierung besser geeignet.

Formale Beschreibung

[Bearbeiten | Quelltext bearbeiten]

Signaturen, Algebren

[Bearbeiten | Quelltext bearbeiten]

Signaturen beschreiben den Typ der spezifizierten Algebra in dem Sinne, in dem eine Signatur in der Programmierung zur Beschreibung der Schnittstelle eines Moduls verwendet wird.

In der universellen Algebra versteht man unter einer Signatur eine endliche Abbildung von Funktionsnamen auf natürliche Zahlen. Die Signatur gibt dann einfach die Arität der Operation an. Ein Signatur in diesem Sinne ist für das einleitende Beispiel , womit zum Ausdruck gebracht wird, dass man eine Algebra beschreibt, die zwei Operationen 'eins' und 'plus' hat, wobei letztere zwei Argumente und die erstere kein Argument benötigt, also eine Konstante ist.

Unter einer zu einer Signatur passenden Algebra wird dann ein Paar verstanden, wobei die Grundmenge und eine Familie von Funktionen , die jedem Funktionsnamen der Signatur eine -stellige Funktion über der Grundmenge der Algebra zuordnet.

Signaturen in algebraischen Spezifikationen

[Bearbeiten | Quelltext bearbeiten]

In algebraische Spezifikationen werden kompliziertere Signaturen verwendet, da man oft Operationen mit mehr als einem Datentyp beschreiben möchte. Entsprechend werden die Operationen durch die Signaturen getypt. Je nach Spezifikationmethode kann die Signatur noch beliebig komplizierter und die zugehörige Spezifikationssprache entsprechend ausdrucksstärker sein. Um die Darstellung hier nicht zu überfrachten, werden Signaturen wie die unten nur als Beispiele gebracht und nicht weiter präzisiert.

typ
 Nat
ops
 eins : Nat
 plus : Nat x Nat -> Nat

Terme, Termalgebra

[Bearbeiten | Quelltext bearbeiten]

Bei gegebener Signatur lassen sich bereits Terme angeben. Sind (induktiv) Terme und ist ein n-stelliges Funktionssymbol der Signatur, so ist ein Term. Sind dies die einzigen zugelassen Terme, dann spricht man auch von Grundtermen. 'plus(plus(eins,eins),eins)' war weiter oben ein Beispiel für einen Grundterm. Man bezeichnet die Menge der Grundterme zu einer Signatur mit .

Legt man nun als Grundmenge einer -Algebra zugrunde und definiert für jedes eine Funktion , dann erhält man zusammen die initiale Termalgebra dieser Signatur.

Da auf den ersten Blick scheint der praktische Nutzen einer Termalgebra durchaus zweifelhaft erscheinen mag, direkt eine Anwendung. Einleitend war erwähnt worden, dass man den Wert eines Terms durch Ausrechnen ermitteln kann. Mit der Termalgebra an der Hand, kann dies nun präzisiert werden. Für jede Signatur und jede -Algebra gibt es einen eindeutig bestimmten Auswertungs-Homomorphismus .

  • Term-Algebra
  • Gleichungsdefinierte Spezifikation
  • Quotient-Term-Algebra, Faktoralgebra
  • Lose (klassische), initiale, freie Semantik
  • Normalformen
  • Syntaktischer und Semantischer Folgerungsbegriff
  • Spezifikation, Modell

Implementierungen

[Bearbeiten | Quelltext bearbeiten]
  • Verweis auf entsprechende Systeme

Beispiel für Ausdruckskraft

[Bearbeiten | Quelltext bearbeiten]
S * x * y * z = (x * z) * (y * z)
K * x * y     = x

Weitere Literatur

[Bearbeiten | Quelltext bearbeiten]

[5] [6] [7]

  1. Birkhoff, G.: On the structure of abstract algebras. Proc. Cambridge Phil. Soc. 31, 433-454, 1935, [1]
  2. W.Wechler, Universal Algebra for Computer Scientists, Springer, 1992, ISBN 3-540-54280-9
  3. Joseph A. Goguen, Higher-Order Functions Considered Unnecessary for Higher-Order Programming. SRI 1990 [2]
  4. H. Ehrig, B.Mahr, Fundamentals of Algebraic Specification 1, Springer, 1985, S.56 ISBN 3-540-13718-1
  5. H. Werner, Einführung in die allgemeine Algebra, B.I., 1978, ISBN 3-411-00120-8
  6. T. Ihringer, Allgemeine Algebra, Teubner, 1988, ISBN 3-519-02083-1
  7. H. Ehrig et al, Mathematisch-strukturelle Grundlagen der Informatik, Springer, 2001, ISBN 3-540-41923-3