Pfeilschreibweise

In der Mathematik ist die Pfeilschreibweise eine Methode, die Donald E. Knuth 1976 entwickelte, um sehr große Zahlen zu schreiben. Sie ist eng verwandt mit der Ackermannfunktion. Die Idee basiert auf wiederholter Exponentiation, ebenso wie Exponentiation eine wiederholte Multiplikation ist und die Multiplikation eine wiederholte Addition ist.

Einführung

Die Multiplikation einer natürlichen Zahl kann als wiederholte Addition definiert werden:

a b = b + b + + b a  Kopien von  b {\displaystyle {\begin{matrix}a\cdot b&=&\underbrace {b+b+\dotsb +b} \\&&a{\mbox{ Kopien von }}b\end{matrix}}}

Zum Beispiel:

3 2 = 2 + 2 + 2 = 6 3  Kopien von  2 {\displaystyle {\begin{matrix}3\cdot 2&=&\underbrace {2+2+2} &=&6\\&&3{\mbox{ Kopien von }}2\end{matrix}}}

Eine natürliche Zahl als Exponent b {\displaystyle b} kann als wiederholte Multiplikation definiert werden:

a b = a b = a a a b  Kopien von  a {\displaystyle {\begin{matrix}a\uparrow b=a^{b}=&\underbrace {a\cdot a\cdot \dotsm \cdot a} \\&b{\mbox{ Kopien von }}a\end{matrix}}}

Zum Beispiel:

3 2 = 3 2 = 3 3 = 9 2  Kopien von  3 {\displaystyle {\begin{matrix}3\uparrow 2=3^{2}=&\underbrace {3\cdot 3} &=&9\\&2{\mbox{ Kopien von }}3\end{matrix}}}

Dies inspirierte Knuth dazu, einen „Doppelpfeil“-Operator für wiederholte Exponenten zu definieren:

a ↑↑ b =   b a = a a . . . a = a a a b  Kopien von  a b  Kopien von  a {\displaystyle {\begin{matrix}a\uparrow \uparrow b&={\ ^{b}a}=&\underbrace {a^{a^{{}^{.\,^{.\,^{.\,^{a}}}}}}} &=&\underbrace {a\uparrow a\uparrow \dots \uparrow a} \\&&b{\mbox{ Kopien von }}a&&b{\mbox{ Kopien von }}a\end{matrix}}}

Zum Beispiel:

3 ↑↑ 2 =   2 3 = 3 3 = 3 3 = 27 2  Kopien von  3 2  Kopien von  3 {\displaystyle {\begin{matrix}3\uparrow \uparrow 2&={\ ^{2}3}=&\underbrace {3^{3}} &=&\underbrace {3\uparrow 3} &=&27\\&&2{\mbox{ Kopien von }}3&&2{\mbox{ Kopien von }}3\end{matrix}}}

Dieser Operator ist rechtsassoziativ, das heißt, er wird von rechts nach links ausgewertet.

Nach dieser Definition ist

3 ↑↑ 2 = 3 3 = 27 {\displaystyle 3\uparrow \uparrow 2=3^{3}=27}
3 ↑↑ 3 = 3 3 3 = 3 27 = 7 625 597 484 987 {\displaystyle 3\uparrow \uparrow 3=3^{3^{3}}=3^{27}=7\,625\,597\,484\,987}
3 ↑↑ 4 = 3 3 3 3 = 3 7 625 597 484 987 {\displaystyle 3\uparrow \uparrow 4=3^{3^{3^{3}}}=3^{7\,625\,597\,484\,987}} (um diese Zahl vollständig als Binärzahl darzustellen, würden ungefähr 1,37 Tebibyte bzw. 1,51 Terabyte benötigt werden, nämlich 7 625 597 484 987 log 3 log 2 {\displaystyle 7\,625\,597\,484\,987\cdot {\tfrac {\log 3}{\log 2}}} bits)
3 ↑↑ 5 = 3 3 3 3 3 = 3 3 7 625 597 484 987 {\displaystyle 3\uparrow \uparrow 5=3^{3^{3^{3^{3}}}}=3^{3^{7\,625\,597\,484\,987}}}
usw.

Dies führt bereits zu einigen sehr großen Zahlen, aber Knuth erweiterte seine Notation noch. Er führte einen „Dreifachpfeiloperator“ ein, um wiederholte Anwendung des „Doppelpfeils“ darzustellen:

a ↑↑↑ b = a ↑↑ a ↑↑ ↑↑ a b  Kopien von  a {\displaystyle {\begin{matrix}a\uparrow \uparrow \uparrow b=&\underbrace {a_{}\uparrow \uparrow a\uparrow \uparrow \dots \uparrow \uparrow a} \\&b{\mbox{ Kopien von }}a\end{matrix}}}

gefolgt von einem „Vierfachpfeiloperator“:

a ↑↑↑↑ b = a ↑↑↑ a ↑↑↑ ↑↑↑ a b  Kopien von  a {\displaystyle {\begin{matrix}a\uparrow \uparrow \uparrow \uparrow b=&\underbrace {a_{}\uparrow \uparrow \uparrow a\uparrow \uparrow \uparrow \dots \uparrow \uparrow \uparrow a} \\&b{\mbox{ Kopien von }}a\end{matrix}}}

und so weiter. Die allgemeine Regel dazu lautet, dass ein n {\displaystyle n} -fach-Pfeiloperator zu einer b {\displaystyle b} -fachen Wiederholung eines ( n 1 ) {\displaystyle (n-1)} -fachen Pfeiloperators wird:

a     b = a     a     a     a     a     n       n 1   n 1       n 1           b  Kopien von  a {\displaystyle {\begin{matrix}a\ \underbrace {\uparrow _{}\uparrow \!\!\dots \!\!\uparrow } \ b=a\ \underbrace {\uparrow \!\!\dots \!\!\uparrow } \ a\ \underbrace {\uparrow _{}\!\!\dots \!\!\uparrow } \ a\ \dots \ a\ \underbrace {\uparrow _{}\!\!\dots \!\!\uparrow } \ a\\\quad \ \ \,n\qquad \ \ \ \underbrace {\quad n_{}\!-\!\!1\quad \ \,n\!-\!\!1\qquad \quad \ \ \ \,n\!-\!\!1\ \ \ } \\\qquad \qquad \quad \ \ b{\mbox{ Kopien von }}a\end{matrix}}}

Beispiele:

3 ↑↑↑ 2 = 3 ↑↑ 3 = 3 3 3 = 3 27 = 7 625 597 484 987 {\displaystyle 3\uparrow \uparrow \uparrow 2=3\uparrow \uparrow 3=3^{3^{3}}=3^{27}=7\,625\,597\,484\,987}

3 ↑↑↑ 3 = 3 ↑↑ 3 ↑↑ 3 = 3 ↑↑ ( 3 3 3 ) = 3 3 3 3 3 3  Kopien von  3 = 3 3 3 7 625 597 484 987  Kopien von  3 {\displaystyle {\begin{matrix}3\uparrow \uparrow \uparrow 3=3\uparrow \uparrow 3\uparrow \uparrow 3=3\uparrow \uparrow (3\uparrow 3\uparrow 3)=&\underbrace {3_{}\uparrow 3\uparrow \dots \uparrow 3} \\&3\uparrow 3\uparrow 3{\mbox{ Kopien von }}3\end{matrix}}{\begin{matrix}=&\underbrace {3_{}\uparrow 3\uparrow \dots \uparrow 3} \\&7\,625\,597\,484\,987{\mbox{ Kopien von }}3\end{matrix}}}

Notation

In Ausdrücken wie a b {\displaystyle a^{b}} wird in der Schreibweise der Exponent b {\displaystyle b} für gewöhnlich hochgestellt gegenüber der Basis a {\displaystyle a} . Allerdings lassen viele Umgebungen – beispielsweise Programmiersprachen und Klartexte wie E-Mail – solche zweidimensionalen Layouts nicht zu. Man hat sich hier mit der Notation a b {\displaystyle a\uparrow b} beholfen. Der Pfeil soll als „Erhöhung des Exponenten“ gelesen werden. Lässt die Umgebung keinen Pfeil zu, wird stattdessen der Zirkumflex ^ genutzt.

Die hochgestellte Schreibweise a b {\displaystyle a^{b}} bietet sich nicht zu einer Verallgemeinerung an. Deshalb hat Knuth die Pfeilnotation gewählt, die stattdessen in einer Zeile geschrieben werden kann.

In manchen Programmiersprachen wird das Zeichen ^ für einen anderen Operator verwendet, beispielsweise in Python für XOR. Hier wird ** zuweilen als Alternative zum Pfeiloperator {\displaystyle \uparrow } genutzt, wie dies auch in VHDL und Fortran der Fall ist. Dabei kommt hier ebenfalls die wiederholte Schreibung zum Einsatz, die eine wiederholte Anwendung des einzelnen Operators bedeuten soll. Es wäre also möglich, *** als Äquivalent zum Doppelpfeil ↑↑ {\displaystyle \uparrow \uparrow } zu nutzen, dies ist allerdings nicht gebräuchlich.

Definition

Die Pfeilnotation wird formal definiert durch

a n b = { a b , wenn  n = 0 ; a b , wenn  n = 1 ; a , wenn  b = 1 ; a n 1 ( a n ( b 1 ) ) , sonst {\displaystyle a\uparrow ^{n}b=\left\{{\begin{matrix}a\cdot b,&{\mbox{wenn }}n=0;\\a^{b},&{\mbox{wenn }}n=1;\\a,&{\mbox{wenn }}b=1;\\a\uparrow ^{n-1}(a\uparrow ^{n}(b-1)),&{\mbox{sonst}}\end{matrix}}\right.}

für alle natürlichen Zahlen a , b , n {\displaystyle a,b,n} , für die gilt b 1 , n 0 {\displaystyle b\geq 1,n\geq 0} .

n {\displaystyle \uparrow ^{n}} bedeutet hier n {\displaystyle n} nebeneinanderstehende Pfeile (z. B. a 3 b = a ↑↑↑ b {\displaystyle a\uparrow ^{3}b=a\uparrow \uparrow \uparrow b} ).

Alle Pfeiloperatoren (normale Exponentenschreibweise wird hierbei als a b {\displaystyle a\uparrow b} angesehen) sind rechtsassoziative Operatoren, das heißt bei mehreren Operatoren wird der Ausdruck von rechts nach links ausgewertet. Zum Beispiel gilt allgemein: a b c = a ( b c ) {\displaystyle a\uparrow b\uparrow c=a\uparrow (b\uparrow c)} , nicht ( a b ) c {\displaystyle (a\uparrow b)\uparrow c} ; zum Beispiel
3 ↑↑ 3 = 3 3 3 {\displaystyle 3\uparrow \uparrow 3=3^{3^{3}}} ist 3 ( 3 3 ) = 3 27 = 7 625 597 484 987 {\displaystyle 3^{(3^{3})}=3^{27}=7\,625\,597\,484\,987} nicht ( 3 3 ) 3 = 27 3 = 19 683. {\displaystyle \left(3^{3}\right)^{3}=27^{3}=19\,683.}

Für diese Rechtsassoziativität gibt es einen guten Grund. Würde von links nach rechts ausgewertet, dann würde a ↑↑ b {\displaystyle a\uparrow \uparrow b} dasselbe ergeben wie a ( a ( b 1 ) ) {\displaystyle a\uparrow (a\uparrow (b-1))} , sodass ↑↑ {\displaystyle \uparrow \uparrow } keinen neuen Operator ergeben würde. Siehe hierzu auch Potenzturm.

Die Definition kann auf wenige ganze Zahlen n < 1 {\displaystyle n<1} erweitert werden. So kann man zum Beispiel a 0 b = a b {\displaystyle a\uparrow ^{0}b=a\cdot b} , a 1 b = a + b {\displaystyle a\uparrow ^{-1}b=a+b} und a 2 b = b + 1 {\displaystyle a\uparrow ^{-2}b=b+1} setzen. Vorsicht ist jedoch mit der Wahl der Anfangsbedingung für b = 1 {\displaystyle b=1} geboten, denn es gilt dann (anders als für größere n {\displaystyle n} ): a 1 1 = a + 1 {\displaystyle a\uparrow ^{-1}1=a+1} und a 2 1 = 2 {\displaystyle a\uparrow ^{-2}1=2} .

Siehe auch

Literatur

  • Donald E. Knuth: Coping with Finiteness. In: Science. Band 194, Nr. 4271, Dezember 1976, S. 1235–1236, doi:10.1126/science.194.4271.123. 
  • Pfeilnotation. In: Guido Walz (Hrsg.): Lexikon der Mathematik. Band 4. Moo bis Sch. Spektrum Akademischer Verlag, Heidelberg u. a. 2002, ISBN 3-8274-0436-3. 

Weblinks