Einführung in die Verwendung von Namen in formalen Sprachen im Rahmen der Lehre formaler Sprachen. [] (Name, scope, Namen, identifier, Bezeichner, Verwendung, Bedeutung, Gültigkeitsbereich, Bindung), Lektion, Seite 721200
http://www.purl.org/stefan_ram/pub/formal_namensverwendung_de ist die kanonische URI dieser Seite.
Stefan-Ram-Startseite

Verwendung von Namen

Ein Name steht nicht für sich selbst, sondern für das Benannte (Bezeichnete).

Entitäten

Bei der sprachlichen Kommunikation werden bestimmte Modelle  zugrunde gelegt. Im Rahmen solch eines Modelles werden bestimmte Dinge (durch Vereinbarung) als existent  angesehen. Diese Dinge werden auch die Entitäten  des Modells genannt.

Im Alltag verwendet man das Modell (Weltbild) des naïven Realismus, demzufolge beispielsweise der Mond  eine Entität ist (existiert). In der Mathematik verwendet man Modelle der Mengenlehre, in denen Mengen  oder Funktionen  Entitäten sind. In bestimmten Märchen gibt es Modelle, in denen Drachen, Hexen  oder Einhörner  existieren. In einer Programmiersprache verwendet man Quelltextstrukturmodelle und Programmausführungsmodelle, in denen beispielsweise Anweisungen  oder Werte  Entitäten sind. Eine Entität kann also alles mögliche sein, je nach dem verwendeten Modell.

Entitäten werden in dieser Lektion über Namen deshalb erwähnt, weil sie es sind, die durch Namen benannt werden können.

Wenn man einen Namen verwendet, um von einer Entität zu sprechen, dann verwendet man den Namen so als sei er die Entität. Man sagt also nichtumständlich„Peter ist ein Name  des Hausmeisters,” sondern einfach „Peter ist  der Hausmeister,“wenn keine Mißverständnisse möglich sind.

Bindung

In einem Text einer formalen Sprache steht ein Name in einem bestimmten Zusammenhang (Gültigkeitsbereich und Ausführungskontext) für eine bestimmte Entität. Die Beziehung zwischen dem Namen und dem Benannten wird als Bindung  bezeichnet, man sagt der Name sei an das Benannte gebunden. Ein Name ist ein Teil des Quelltextes, eine Entität stellt man sich dagegen meist als etwas außerhalb des Quelltextes  Existierendes vor. Die Bindung stellt also in der Regel eine Beziehung von einem Quelltextbezeichner zu einer Entität  (vom Quelltext zu Elementen eines bestimmten Modells) dar. Die Entität, an die ein Name gebunden ist, kann man auch als die Bedeutung  dieses Namens bezeichnen.

Name, Bindung und Entitaet [statisches Strukturdiagramm]

Quelltext | Modell 

.-----------------. | .-----------------.  
| Name | | Bindung | Entitaet | 
| (im Quelltext) |-------------------------->| (ausserhalb | 
| | | | des Quelltexts) | 
'-----------------' | '-----------------' 

|

Definition

Eine Festlegung mit der für einen Namen innerhalb eines bestimmten Textes (Gültigkeitsbereichs) eine bestimmte Bindung an eine bestimmte Entität bestimmt wird, nennt man eine Definition.

So kann man beispielsweise den Namen "x" als Name für den Wert 2 definieren. Solch eine Definition kann auch folgendermaßen geschrieben werden.

x  ≝ 2

Dadurch ist der Name "x" dann an den Wert "2" gebunden. (Obwohl das Numeral "2" Teil des Quelltextes ist, erfolgt die Bindung in diesem Beispiel an den Wert 2, der selber nicht Teil des Quelltextes ist.)

In allen Verwendungen steht der Name "x" dann innerhalb seines Gültigkeitsbereichs für den Wert 2.

Bindung des Namens "x" an den Wert 2 [statisches Strukturdiagramm]

Quelltext | Modell 

.-----------------. | .-----------------.  
| x:Name | | Bindung | 2:Wert | 
| ------ |-------------------------->| ------ | 
| | | | | 
'-----------------' | '-----------------' 

|

Verwendung

Wird ein definierter Name verwendet, so steht er für seine Bedeutung und nicht für sich selbst.

z x  · 3

In dem Ausdruck "x  · 3" steht der Name "x" also nach vorangehender Definition "x  ≝ 2" für 2, so daß der Ausdruck "x  · 3" als "2 · 3" zu lesen ist.

Das Ersetzen eines Namens durch seine Bedeutung wird auch als Auflösung  des Namens bezeichnet.

Im mathematischen Schriftsatz ist es üblich Namen, die für eine gerade vereinbarte Bedeutung stehen, kursiv zu schreiben. Auch in dieser Lektion wird eine Name kursiv gesetzt, falls er für das Benannte steht und nichtkursiv, falls er für sich selbst steht.

Gültigkeitsbereich

Durch die Definition eines Namens wird dieser nicht für alle möglichen Situationen und Zeiten festgelegt. Ein Name hat eine Bedeutung im Rahmen einer festgelegten Bindung nur innerhalb eines bestimmten Zusammenhangs, wie beispielsweise eines bestimmten Textes. Dieser Zusammenhang wird auch als Gültigkeitsbereich  (scope ) oder als Textbereich  des Namens bezeichnet. Er wird in formalen Sprachen oft ausdrücklich als Bereich innerhalb des Textes gekennzeichnet.

In vielen Programmiersprachen ist der Gültigkeitsbereich ein Teil des Programmtexts. Ein Name, der in einem Quelltext verwendet wird, hat seinen Sinn also nur innerhalb dieses Quelltextes. Der Anfang und das Ende eines Gültigkeitsbereiches werden manchmal beispielsweise durch geschweifte Klammern markiert.

{ x  ≝ 2 }

In dem folgenden Beispiel wird der Textbereich durch geschweifte Klammern gekennzeichnet. Der Name "z" wird als "2 · 3" definiert, da seine Definition mit der Definition "x  ≝ 2" in einem Textbereich ist.

{ x  ≝ 3 }
{ x  ≝ 2
  z x  · 3 }

Innerhalb eines Gültigkeitsbereichs darf ein Name nur höchstens einmal definiert werden. (Eine Ausnahme für den Fall verschiedener Namensräume wird später behandelt.) Damit ist die mehrfache Definition des Namens "x" innerhalb eines Gültigkeitsbereichs fehlerhaft.

{ x  ≝ 3
  x  ≝ 2 }

Die Auswirkung solch fehlerhafter mehrfacher Definitionen wird auch als Namenszusammenstoß  (name clash ) oder Namenskonflikt  bezeichnet.

Um solche Namenskonflikte zu vermeiden, sollte der Gültigkeitsbereich eines Namens immer möglichst klein  gewählt sein. Das macht die Texte auch übersichtlicher, weil bei einem kleinen Gültigkeitsbereich die Definition und alle Verwendungen eines Namens relativ nahe zusammenstehen und insgesamt relativ wenige Namen definiert sind. In einem großen Gültigkeitsbereich können viele Namen enthalten sein, und es kann schwierig werden, die Definition oder alle Verwendungen eines Namens zu finden.

Substitutionsprinzip

In dem folgenden Beispiel wird zunächst der durch "2" bezeichnete Wert als "x" benannt.

Das durch "x · 2" Bezeichnete wird mit dem Namen "z" benannt.

{ x  ≝ 2
  z x  · 3 }

In der zweiten Definition kann der durch die erste Definition bestimmte Name "x" durch seine Bedeutung "2" substituiert  (ersetzt) werden. Diese Substitution ändert nichts an der Bedeutung des Textes. Nach der Substitution ergibt sich dann der folgende Text für die Definition von "z".

z  ≝ 2 · 3

Egal ob nun der Name "x" oder der Wert 2 in der Definition verwendet wurde oder nicht: Der Name "z" steht in beiden Fällen für 2 · 2.

Substitutionsprinzip Eine Verwendung eines Namens kann durch (eine andere Schreibweise für) die Bedeutung des Namens ersetzt werden, ohne an der Bedeutung des Textes etwas zu ändern.

Nominelle Transparenz

Da ein Name in einer formalen Sprache immer für das Benannte  steht, kann in Texten einer formalen Sprache in der Regel nicht von dem Namen selber  gesprochen werden. (Eine Ausnahme bilden einzelne Sprachen, die dafür besondere Vorkehrungen enthalten.) Man kann auch sagen: Ein Name ist keine Entität. Man kann auch sagen, ein Name sei transparent  (durchsichtig), weil man durch ihn hindurch immer die benannte Entität sieht und nicht den Namen selber.

In den meisten Programmiersprachen kann ein Programm also auf die darin verwendeten Namen nicht zugreifen. Diese Konvention wirkt sich beispielsweise dahingehend aus, daß es in der Regel nicht möglich ist, in einem Programm beispielsweise ein Programmstück zu schreiben, das automatisch alle in dem Programm verwendeten Namen ausgibt. Genauso ist es in der Regel nicht möglich, daß ein Programm irgendwelche Texte einliest und mit Variablennamen vergleicht. Auch kann beispielsweise im allgemeinen auch kein Programmstück geschrieben werden, das für ein beliebiges Programm beispielsweise den ersten Buchstaben des ersten definierten Namens ausgibt. (In einigen Programmiersprachen ist dies aber doch möglich.)

Ein Text einer formalen Sprache wird eben verwendet, um über Entitäten  zu sprechen und nicht über die im Text selber verwendeten Namen oder den Quelltext selber. Man kann auch sagen, daß externe Texte, also solche Texte, die ein Programm ausgeben oder einlesen kann, nicht zum Gültigkeitsbereich eines Namens gehören, der meist ein bestimmter Teil des Quelltextes ist.

Nominelle Transparenz (Fortsetzung)

Namen sind Schall und Rauch.

Redensart

Die nominelle Transparenz wirkt sich auch dahingehend aus, daß die Schreibweise eines Names  für die Bedeutung eines Textes keiner Rolle spielt, weil diese gar nicht „sichtbar“ ist. Welcher  Name gewählt wurde, ist also egal.

{ x  ≝ 2
  z x  · 3 }

Es wurde ja schon festgestellt, daß die folgende Definition des Namens "z" die gleichen Bedeutung hat, wie die vorangehende.

z  ≝ 2 · 3

Wenn in dem gesamten Gültigkeitsbereich alle Vorkommen  eines Namens (unter Beachtung einiger Regeln) durch einen anderen ersetzt werden, dann ändert sich ebenfalls nichts an der Bedeutung.

In dem gegebenen Gültigkeitsbereich beispielsweise der Name "x" durch den Namen "y" ersetzt werden. Es ergeben sich dann die beiden folgenden Definitionen.

{ y  ≝ 2
  z y  · 3 }

Die Bedeutung der zweiten Definition ist wieder die gleiche.

Wenn man einen Namen ändert, muß man allerdings darauf achten, daß der Name überall  in seinem Gültigkeitsbereich verändert wird. In dem folgenden Gültigkeitsbereich ist die Bedeutung der zweiten Definition verändert, weil der Name "x" nur in einem Fall  durch den Namen "y" ersetzt wurde.

{ x  ≝ 2
  z y  · 3 }

Wenn man einen Namen ändert, muß man auch darauf achten, daß der neuen Name nicht schon  im selben Gültigkeitsbereich verwendet wird. In dem folgenden Gültigkeitsbereich ist die Bedeutung der zweiten Definition verändert, weil der Name "x" durch den Namen "z" ersetzt wurde, der aber schon bisher im selben Bereich auch verwendet wurde. Die sich ergebende zweimalige Definition eines Namens innerhalb desselben Gültigkeitsbereichs ergibt in der Regel keinen Sinn.

{ z  ≝ 2
  z z  · 3 }

Die Ersetzung durch einen anderen Namen beläßt die Bedeutung auch nur dann unverändert, wenn im Text kein Bezug auf spezielle Eigenschaften des gewählten Namens genommen wird, wie beispielsweise auf seine Länge oder seine Schreibweise. Das ist in den meisten formalen Sprachen aber ohnehin möglich.

Unter Beachtung dieser Regeln kann ein Name also durch einen anderen Namen ersetzt werden. Der gewählte Name selber hat dann also gar keine Relevanz, man kann daher auch sagen, er sei „transparent“.

Nominelle Transparenz Wird ein Name in einem Text einer formalen Sprache überall in seinem Bereich  durch einen anderen, noch nicht verwendeten, Namen ersetzt, so ändert sich dadurch nichts an der Bedeutung des gesamten Texts, wenn dieser nicht irgendwie den Namen selber zum Thema hat.

Wenn sich beispielsweise alle Menschen einigten, statt „Lehrling“ den Begriff „Auszubildender“ zu verwenden, dann wäre ein Verständigung wieder ohne Mißverständnisse möglich. In der Kurzgeschichte „Ein Tisch ist ein Tisch “ von Peter Bichsel  beschließt ein Mann, dem Bett „Bild“ zu sagen und weitere Dinge umzubenennen. Da diese Umbenennung jedoch nicht von allen Zeitgenossen im deutschen Sprachraum mitgemacht wurde, war eine Verständigung bald nicht mehr möglich.

Andere Beispiele von Namenswechseln aus dem Alltag, sind die Umbenennung durch Heirat oder die Änderung eines Künstler- oder Produktnamens. Da Namen natürlicher Sprachen aber meist durch ihre Etymologie und Geschichte mit anderen Wörtern verbunden sind und somit oft vielfältige spezifische Konotationen aufweisen, ist ein Name in der Umgangssprache selten ganz bedeutungslos und eine Umbenennung erfolgt in einer natürlichen Sprache selten ganz ohne Bedeutungsverschiebung. Das liegt daran, daß man bei natürlichen Sprachen fast nie in allen Verwendungen eines Namens den Namen durch einen anderen ersetzen kann, weil man nicht so viel Einfluß hat und die Verwendungen teilweise auch in der nicht mehr änderbaren Vergangenheit liegen. Außerdem reagieren Menschen auch auf Namensähnlichkeiten, die bei formalen Sprachen im allgemeinen keine Rolle spielen.

Namensräume

Ein Name kann in einem Gültigkeitsbereich verschiedenen Bedeutungen haben (überladen sein), wenn mehrere Namensräume  verwendet werden. Jeder Namensraum kann einem Namen dann eine bestimmte Bedeutung zuordnen.

Beispielsweise könnte es in einer formalen Sprache möglich sein, Definitionen zu benennen, etwa als "a" und "b".

{ a : x  ≝ 2 
  b : z x  · 3 }

Wenn für die Namen von Definitionen ein eigener Namensraum existiert, dann kann es innerhalb eines Gültigkeitsbereichs sowohl eine Definition  mit dem Namen "x" (beispielsweise "y  ≝ 7") geben als auch einen Wert  mit dem Namen "x" (beispielsweise "2").

{ w: x  ≝ 2 
  x: y  ≝ 7 
  y: z x  · 3 }

Es ergeben sich in den beiden Namensräumen dann folgende Zuordnungen.

Definitionen w: "x  ≝ 2", x: "y  ≝ 7", y: "z x  · 3".

Werte x: 2, y: 7, z: 6.

Der Name "x" kommt also mit unterschiedlicher Bedeutung in beiden Namensräumen vor.

In der Definition "z x  · 3" muß dann zur Auflösung des Namens "x" der Namensraum der Werte  herangezogen werden, da eine Definition an der Stelle der Verwendung von "x" nicht vorgesehen ist, somit ergibt sich nach der Auflösung die Definition "z 2  · 3".

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Seiteninformation und Impressum  |   Formular für diese Seite betreffende Mitteilungen an den Herausgeber  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz