Otto Forster Algorithmische Zahlentheorie Ans dem Programm _ _ _ _ _ _ _ _ _ _ _ ____. Mathematik Analysis, Bd. 1-3 von O. Forster Lineare Algebra von G. Fischer Algebra vanE. Kunz Einfiihrnng in die Zahlentheorie nnd Algebra von J. Wolfart Zahlentheorie fiir Einsteiger von A. Bartholome, J. Rung, H. Kern Moderne Verfahren der Kryptographie von A. Beutelspacher, J. Schwenk, K.-D. Wolfenstetter Vieweg _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _~ Otto Forster Algorithmische Zahlentheorie ~ Vl8weg Prof. Dr. Otto Forster Mathematisches Institut der Ludwig-Maximilians-UniversiUit MUnchen Theresienstr. 39 80333 MUnchen Email: [email protected] Das in diesem Buch und auf der zugehorigen CD enthaltene Programm-MateriaI ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Die Autoren und der Verlag Ubernehmen infoIgedessen keine Verantwortung und werden keine daraus foIgende oder sonstige Haftung Ubernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-MateriaIs oder Teilen davon entstehl. AIle Rechte vorbehalten © Springer Fachmedien Wiesbaden 1996 Urspriinglich erschienen bei Friedr. Vieweg & Sohn VerJagsgeseIlschaft mbH, Braunschweig/Wiesbaden, 1996 Softeover reprint ofthe hardcover 1st edition 1996 Das Werk einschlieBlieh aller seiner Teile ist urheberrechtlich geschUtzt. Jede Verwertung auBerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzuliissig und strafbar. Das gilt insbesondere fUr Vervielfiiltigungen, Obersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Umschlaggestaltung: Klaus Birk, Wiesbaden Gedruckt auf siiurefreiem Papier ISBN 978-3-663-09240-7 DOI 10.1007/978-3 -663-09239-1 ISBN 978-3-663-09239-1 (eBook) Inhaltsverzeichnis 1 2 3 4 5 6 Vorwort Installation und Gebrauch der Software vii Die Peano-Axiome 1 9 16 22 33 45 54 59 Die Grundrechnungsarten Die Fibonacci-Zahlen Der euklidische Algorithmus Primfaktor-Zerlegung Der Restklassen-Ring Z/mZ 7 Die Satze von Fermat, Euler und Wilson 8 Die Struktur von (Z/mZ)*, Primitivwurzcln 9 Pseudo-Zufalls-Gencratoren 10 Zur Umkehrung des Satzes von Fermat 11 Qlladratische Rcste, qlladratisches Reziprozitats-Gcsetz 12 13 14 15 16 Probabilistische Primzahltests Die Pollard'sche Rho-Methode Die (p-1)- Faktorisierungs-Methode Das RSA -Kryptographie-Verfahren Quadratische Erweiterungen 17 Der (p+l)-Primzahltest, Mersenne'sche Primzahlen 18 19 20 21 22 23 24 2.5 26 Die (p+ 1)- Faktorisierungs-Methode Faktorisierung mit elliptischen Kurven Schnelle Fourier-Transformation und die Multiplikation groBer Zahlen Kettenbriiche Faktorisierung mit Kettenbriichen Quadratische Zahlkorper Der Vier-Quadrate-Satz von Lagrange Die Pell'sche Gleichung Idealklassen quadratischer Zahlkorper Literat urverzeichnis Namens- und Sachverzeichnis Funktions-Index v ix 72 78 85 98 105 113 123 130 140 148 154 172 189 204 218 228 238 247 271 274 277 Vorwort Ziel des Buches ist eine Darstellung der elementaren Zahlentheorie von der einfachen Teilbarkeits-Lehre iiber die Theorie der quadratischen Reste bis zu den Anfangsgriinden der quadratischen Zahlkorper, wie Einheiten reell-quadratischer Zahlkorper und die Klassengruppe imaginar-quadratischer Zahlkorper. Daneben solI auch die Untersuchung spezieller Zahlen, wie der Fibonacci-Zahlen sowie der Fermat'schen und Mersenne'schen Primzahlen nicht zu kurz kommen. Dabei wird einerseits versucht, durch Beleuchtung des algebraischen Hintergrunds zu einem vertieften Verstandnis der Aussagen zu gelangen; andrerseits wird immer auch ein algorithmischer Standpunkt eingenommen. Dieser gibt sich nicht mit rein en Existenzsatzen zufrieden, sondern fragt stets auch, wie man gesuchte existierende Objekte (etwa die Primfaktor-Zerlegung einer natiirlichen Zahl oder eine Primitivwurzel modulo einer Primzahl) effizient konstruieren kann. Die algorithmische Zahlentheorie kann auf eine lange Tradition zuriickblicken, gehoren doch zwei der altesten Algorithmen der Mathematik, namlich der euklidische Algorithmus und das Sieb des Eratosthenes, zur Zahlentheorie. Auch die iiber 300 Jahre alte Theorie der Kettenbriiche hatte von Anfang an auch einen algorithmischen Aspekt (etwa zur Losung der Pell'schen Gleichung). Zu zwei Grundproblemen der algorithmischen Zahlentheorie (die heute u.a. in der Kryptographie und fiir die Computer-Sicherheit praxis-relevant geworden sind) schreibt GauB in Art. 329 seiner Disquisitiones Arithmeticae (zitiert nach der deutschen Ubersetzung von 1889): "Dass die Aufgabe, die Primzahlen von den zusammengesetzten zu unterscheiden und letztere in ihre Primfactoren zu zerlegen zu den wichtigsten und niitzlichsten der gesamten Arithmetik gehort und die Bemiihungen und den Scharfsinn sowohl der alten wie auch der neueren Geometer in Anspruch genom men hat, ist so bekannt, dass es iiberfiiissig ware, hieriiber viele Worte zu verlieren. Trotzdem . .. . .. ; ausserdem aber diirfte es die Wiirde der Wissenschaft erheischen, alle Hiilfsmittel zur Losung jenes so elegant en und beriihmten Problems fieissig zu vervollkommnen. " Die Hilfsmittel, die GauB selbst anwendet, sind seine Theorie der quadratischen Reste und quadratische Formen. In den letzten Jahrzehnten sind zu den Problemen der Primzahlerkennung und der Faktorzerlegung groBe Fortschritte erzielt worden, die durch das Aufkommen leistungsstarker Computer ermoglicht wurden. Neben der Fortentwicklung klassischer Methoden wurden dazu auch neue Ideen eingebracht, wie probabilistische Verfahren und die Anwendung der Theorie der elliptischen Kurven iiber endlichen Korpern. Vll Urn der Leserinl zu ermoglichen, dies auf ihrem PC nachzuvollziehen, liegt dem Buch eine Diskette mit einem unter MS-DOS lauffahigen PAscAL-ahnlichen Multiprazisions-Interpreter ARIBAS bei. (Eine UNIX-Version von ARIBAS ist uber das Internet erhaltlich.) Es sind nur geringfUgige Programmier-Vorkenntnisse (in PASCAL, Modula-2 oder C) n6tig, urn sich mit ARIBAS zurechtzufinden. Vollstandige Quelltexte fUr lauffahige Versionen aller behandelten Algorithmen sind im Buch abgedruckt und auch in Dateien auf der Diskette abgelegt. Zwar sind mit dem ARIBAs-Interpreter keine Primzahl-Rekorde oder Hochstleistungen bei der Faktorisierung moglich, aber man kann damit immerhin selbst z.B. 100-stellige Primzahlen finden oder 30- bis 40-stellige Zahlen faktorisieren, aber vor allem durch das Studium der Quelltexte und die leicht mogliche Abanderung und Anpassung des Codes zu einem vertieften Verstandnis der Algorithmen gelangen. An mathematischen Vorkenntnissen reicht im Wesentlichen 2 das aus, was man in den Anfanger- Vorlesungen des erst en Studienjahres lernt; insbesondere wird vorausgesetzt, dass der Leser weiB, was eine Gruppe, ein Ring oder ein Korper ist und dass er Begriffe wie Homomorphismus, injektiv und surjektiv kennt. Der zweite Teil des Buches, der ab §16 (quadratische Erweiterungen) beginnt, ist etwas anspruchsvoller als der erste. Es werden die ublichen Bezeichnungen benutzt. Z.B. bezeichnet N die Menge der naturlichen Zahlen (einschlieBlich der 0), Z den Ring der ganzen Zahlen und Q, R., C die Korper der rationalen, reellen und komplexen Zahlen. Fur eine Menge Mist Card(M) die Anzahl ihrer Elemente. Das Buch ist aus Vorlesungen und einem Seminar hervorgegangen, die ich an der Universitat Munchen gehalten habe. Ich danke Herrn U. Weiss, der mein Assistent fUr die Betreuung der Ubungen und des Seminars war, fUr seine kompetente UnterstUtzung und den Teilnehmern der Ubungen und des Seminars, insbesondere Herrn M. Rehm, fUr die intensive Benutzung von ARIBAS, durch die einige Bugs entdeckt wurden und beseitigt werden konnten. Obwohl ich mich naturlich bemuht habe, die Anzahl der Fehler moglichst gering zu halten, hoffe ich auch auf die freundliche Hilfe von Leserinnen und Lesern, mir Fehler im Text und im Programm zu melden, damit sie in der nachsten Version verbessert werden konnen. Otto Forster Munchen, August 1996 Dem Autor sind mannliche und weibliche Leser gleichermaBen willkommen. Umjedoch die/den LeserIn vor Konstruktionen zu bewahren, die ihr/sein asthetisches Empfinden verletzen konnten, wurden geeignete TEX-Makros geschrieben, die automatisch eine der Formen m/w auswahlen. Es fUhle sich jeweils auch das andere Geschlecht angesprochen. 2 Diese Schreibweise, ebenso wie Mersenne'sche Primzahl usw., folgt bereits den neuen Rechtschreibregeln. viii Installation und Gebrauch der Software Auf der beiliegenden Diskette befindet sich der Multipdizisions-Interpreter ARIBAS (fUr MS-DOS ab Version 3.2), sowie ARIBAs-Quelltexte zu den im Buch besprochenen Algorithmen und Funktionen. Es sind nur minimale Hardware-Voraussetzungen notig: Ein PC mit Intel-Prozessor ab 8086 und mindestens 500 KB freiem konventionellen Speicher (extended Memory ist nicht erforderlich). Bei Installation auf Festplatte sollte knapp 1 MB freier Platz zur VerfUgung stehen, jedoch ist notfalls auch der Betrieb von der Diskette aus moglich. Inhalt der Diskette: Die erforderlichen Dateien befinden sich (in unkomprimierter Form) auf der Diskette im Directory ARIBAS und seinen Unter-Directories DOC, ZTH und EXAMPLES. Der Interpreter liegt in zwei Versionen aribas. exe und aribasO. exe vor. Dabei ist aribas. exe ftir Rechner mit 80386-Prozessor (oder hoher). Nur im unwahrscheinlichen Fall, dass Sie noch einen 80286er oder gar 8086er Rechner haben, brauchen Sie aribasO. exe. (Allerdings gibt es auch DOSEmulatoren, die nur einen 80286er Prozessor emulieren.) Die Datei aribas. hlp dient der Online-Hilfe und muss sich immer im selben Directory befinden, wie aribas. exe. Wenn Sie auf Online-Hilfe verzichten, ist diese Datei nicht erforderlich. 1m Unter-Directory DOC befindet sich ein Tutorial aribas. tut und eine etwas systematischere Dokumentation aribas. doc. Beides sind reine ASCIIDateien und konnen mit einem beliebigen Text-Editor (z.B. EDIT ab MS-DOS 5.0) angeschaut werden. Sie konnen diese Dateien auch ausdrucken (Vorsicht, hoher Papierverbrauch!). 1m Directory ZTH befinden sich die Dateien chapOl. ari bis chap26. ari. Dies sind ebenfalls reine ASCII-Dateien. Sie enthalten die ARIBAsQuelltexte fUr die Beispiele aus §1 bis §26 des Buches (diese Quelltexte sind auch samtlich im Buch abgedruckt). Schlief3lich enthalt das Directory EXAMPLES noch weitere Beispiel-Dateien fUr ARIBAs-Source-Code. Installation: Urn die Software auf der Festplatte, z.B. in Laufwerk c: zu installieren, legen Sie am besten ein Directory c: \ARIBAS an, in das Sie den Inhalt des Directory's ARIBAS der Diskette samt allen Unter-Directories kopieren. Dies kann bequem mit xcopy geschehen. Wechseln Sie in das Directory c: \ARIBAS. Falls sich die Diskette in Laufwerk A: befindet, geben Sie den DOS-Befehl xcopy A:\ARIBAS IS Achten Sie bitte darauf, dass Sie den Befehl vom Directory c: \ARIBAS aus geben, was meistens durch einen Eingabe- Prompt c: \ARIBAS> erkennbar ist. Nach erfolgreicher Ausfiihrung von xcopy befinden sich dann alle Dateien im Directory c: \ARIBAS und seinen Unter-Directories. Falls Sie einen 80386er (oder hoher) besitzen, konnen Sie aribasO. exe loschen. Andernfalls loschen Sie aribas . exe und benennen aribasO. exe in aribas. exe urn. Damit Sie ARIBAS stets von tiberall IX aus starten k6nnen, ist es niitzlich, die Pfad-Variable zu erganzen. Falls sich in der Datei autoexec. bat z.B. die Zeile PATH C:\DOSiC:\WINDOWS befindet, erganzen Sie diese zu PATH C:\DOSiC:\WINDOWSiC:\ARIBAS Nach dem nachsten Neustart des Rechners wird dies wirksam. UNIX-Versionen von ARIBAS Es gibt auch Versionen von ARIBAS fUr UNIx-Workstations und fUr LIN UX auf 80386-Rechnern. Diese sind iiber anonymous ftp oder das World-Wide-Web von folgenden Adressen erhaltlich. a) FTP-Server des Mathematischen Instituts der LMU Miinchen ftp.mathematik.uni-muenchen.de Directory pub/forster/aribas. b) WWW-Adresse des Autors http://www.mathematik.uni-muenchen.de/-forster U nterpunkt Software - Aribas Bitte lesen Sie die jeweiligen README-Dateien fUr Einzelheiten. Die Dateien chapOl. ari bis chap26. ari mit ARIBAs-Quelltexten auf der Diskette gelten auch fUr die UNIx-Version; sie miissen nur mit dos2unix oder einem ahnlichen Hilfsmittel auf UNIx-Form transformiert werden. Email-Adresse des Autors (fUr Bug-Reports und sonstige Mitteilungen) forster~rz.mathematik.uni-muenchen.de x Kurz-Anleitung fUr ARIBAS Nach der Installation starten Sie ARIBAS fUr einen ersten Test durch Eingabe von aribas am DOS-Prompt. Dann meldet sich ARIBAS mit einigen Mitteilungen und es erscheint der ARIBAs-Prompt ==> , der besagt, dass ARIBAS zum Rechnen bereit ist. Geben Sie zum Beispiel ein Das Ende einer Eingabe muss in ARIBAS immer durch einen Punkt gekennzeichnet werden. Nach Driicken der RETURN-Taste erscheint das Ergebnis -: 6998 Man kann die Ergebnisse von Rechnungen auch Variablen zuordnen, z.B. Hisst sich die Zahl 267 - 1 wie folgt unter dem Namen M67 speichern (der Potenz-Operator wird in ARIBAS durch ** dargestellt): ==> M67 := 2**67 - 1. -: 1_47573_95258_96764_12927 Diese Variable kann man jetzt z.B. als Argument der eingebauten Funktion rab_primetest iibergeben: ==> rab_primetest(M67). -: false Das Ergebnis zeigt, dass 267 - 1 keine Primzahl ist, (siehe dazu §12). Die drei letzten Ergebnisse sind stets auch unter den Namen _, __ und ___ gespeichert, z.B. enthiilt die Pseudo-Variable ___ zur Zeit den Wert 6998, aus dem man mit ==> sqrtC __ ). -: 83.6540495 die Quadratwurzel ziehen kann. Eingaben k6nnen sich auch iiber mehrere Zeilen erstrecken, z.B. ==> x := 1; for i := 2 to 10 do x := x*i; end; x. Dabei kann man mit den Cursor-Tasten auch auf friihere Zeilen zuriickgehen und evtl. Ausbesserungen von Tippfehlern vornehmen. Mit der Tabulator-Taste kann man den Text iibersichtlich einriicken. Die obige Befehls-Sequenz berechnet 10!, die Syntax der for-Schleife ist wie in Modula-2. Zum Abschicken der Eingabe muss sich der Cursor hinter dem Abschluss-Punkt befinden und dann die RETURN -Taste gedriickt werden. Das Ergebnis ist Xl -: 3628800 Man kann auch eigene Funktionen definieren. Z.B. ergibt folgende Eingabe eine Funktion zur Berechnung der Fakultat einer natiirlichen Zahl. ==> function fac(n: integer): integer; var x,i: integer; begin x := 1; for i := 2 to n do x := x*i; end; return x; end. Die Syntax ist auch hier wie in Modula-2 (in ARIBAS miissen jedoch alle Schliisselwarter klein geschrieben werden). Man beachte: Wahrend auf dem Top-Level Variable einfach durch Zuweisungen erzeugt werden kannen, miissen sie innerhalb von Funktionen explizit deklariert werden. Wird obige Eingabe abgeschickt, erscheint als Ergebnis -: fac und die Funktion steht zum kiinftigen Gebrauch zur Verfiigung. Entdeckt ARIBAS einen Fehler, z.B. eine nicht deklarierte Variable oder einen Tipp-Fehler, so erscheint eine Fehler-Meldung. In diesem Fall hole man die letzte Eingabe durch die Tastenkombination CTRL-Fl zuriick. Man kann dann wieder mit den CursorTasten an die fehlerhafte Stelle gehen und Korrekturen vornehmen. (Mit CTRLF2 erhalt man die vorletzte, mit CTRL- F3 die drittletzte Eingabe zuriick.) Falls Sie die Funktion fehlerfrei eingegeben haben, kannen Sie damit z.B. rechnen ==> fac(40). -: 815_91528_32478_97734_34561_12695_96115_89427_20000_00000 Es kann manchmal vorkommen, dass eine Rechnung zu lange dauert oder dass man durch einen Programmierfehler in eine unendliche Schleife geraten ist. In diesem Fall kann man (meistens) durch gleichzeitiges Driicken der linken SHIFTund CTRL- Taste einen Abbruch erreichen. Versuchen Sie das etwa nach der Eingabe ==> x := 1; while x > 0 do inc(x); end. Xli Der Befehl inc(x) erhoht die integer-Variable x urn 1, die Bedingung in der while-Schleife ist also immer erfUllt. Nach Drucken von SHIFT-CTRL erscheint die Meldung user interrupt ** RESET ** und ein neuer Prompt ==> . Wir konnen hier auch gleich em Beispiel fUr die Online-Hilfe geben. Eingabe von ==> help(inc). ergibt die Auskunft inc(var x: integer [; delta: integer]): integer; Erhoeht die Integer-Variable x urn delta (Defaultwert delta = 1). Rueckgabewert ist der neue Wert von x. inc kann also auch mit einem optionalen 2. Argument aufgerufen werden, z.B. ist inc (x, 2) gleichwertig mit x : = x+2. Man verlasst ARIBAS durch die Eingabe ==> exit Hier ist ausnahmsweise kein Schluss-Punkt notig (aber auch nicht verboten). Fur kompliziertere Funktionen oder Projekte mit mehreren Funktionen ist es nicht zweckmaBig, den Code direkt in ARIBAS einzutippen. In diesem Fall empfiehlt es sich, den Code mit einem externen Editor zu erstellen. (Z.B. mit dem schon erwahnten EDIT; man beachte, dass es ein reiner ASCII-Editor sein muss, kein Textverarbeitungs-System, das die Datei mit Steuer-Zeichen versieht.) Den Code legt man dann in einer Datei mit der Extension . ari ab, z.B. mit dem N amen test 1. ari. AnschlieBend kann die Datei von ARIBAS aus mit dem Befehl ==> load(ltest1"). geladen werden. Der Code der Funktionen fUr die in den einzelnen Paragraphen des Buches besprochcnen Algorithmen ist in den Dateien chapxx. ari im Directory ZTH abgelegt, wobei xx fUr die Nummer des Paragraphen steht. Falls Sie z.B. den §3 Die Fibonacci-Zablen studieren und dabei Beispiele rechnen wollen, starten Sie ARIBAS von dem Directory c: \ARIBAS\ZTH aus und laden die zugehorige Datei mit ==> load(l chap03"). (Falls ARIBAS von c: \ARIBAS aus gestartet wurde, muss es statt des sen heiBen load( "zth \chap03").) Sie sollten folgende Ausgabe erhalten: Xlll fib_ree fib_it fib -: true Das zeigt an, dass ARIBAS jetzt die Funktions-Definitionen von fib_ree, fib_it und fib gespeichert hat. Das Ergebnis true erhiilt man nach erfolgreicher Ausfiihrung von load. Nun konnen Sie z.B. mit ==> fib(83). -: 99_19485_30947_55497 die 83. Fibonacci-Zahl berechnen. (Dies ist iibrigens eine Primzahl, wie in §10 gezeigt wird.) Man kann eine zu ladende Datei mit ARIBAs-Code auch direkt beim Start von ARIBAS als Kommandozeilen-Argument angeben, in unserem Beispiel also durch das Kommando aribas ehap03 vom DOS-Prompt aus. Eine ausfiihrlichere Einfiihrung in ARIBAS erhalt man durch das Tutorial aribas. tut und die Dokumentation aribas. doe. Das Wesentliche kann man aber bereits durch das Betrachten der im Buch abgedruckten Programm-Beispiele lernen. XIV 1 Die Peano-Axiome Die element are Zahlentheorie, die wir in diesem Buch vorallem vom algorithmischen Standpunkt aus betrachten wollen, handelt hauptsiichlich von den natiirlichen Zahlen, die aus dem Bediirfnis des Menschen entstanden sind, Mengen gleichartiger Objekte (etwa eine Herde Schafe) abzuziihlen und anschliellend mit diesen Mallzahlen Vergleiche anzustellen und zu rechnen. Will man die natiirlichen Zahlen auf eine axiomatische Grundlage stellen, so bieten sich die (vor hundert lahren aufgestellten) Peano-Axiome an, die von dem Prinzip ausgehen, dass es zu jeder natiirlichen Zahl eine niichst grollere gibt. 1m Anschluss an die Peano-Axiome kann man die Addition, Multiplikation und Potenzierung definieren und die dafiir geltenden Rechen-Gesetze beweisen, was wir exemplarisch durchfiihren ohne Vollstiindigkeit anzustreben. Aus den Definitionen von Addition, Multiplikation und Potenzierung lassen sich jeweils unmittelbar rekursive Algorithmen zu ihrer Berechnung ableiten, die aber wenig effektiv sind. Zur Vorbereitung von schnelleren Algorithmen im niichsten Paragraphen leiten wir noch die Biniir-Darstellung der natiirlichen Zahlen her. Die Peano-Axiome. Die natiirlichen Zahlen bilden eine Menge N mit einem ausgezeichneten Element 0 E N und einer Abbildung v : N -+ N, (NachfolgeFunktion; ist y = vex), so heiBt y Nachfolger von x und x Vorganger von y), so dass folgende Axiome erfUllt sind: I) Die Abbildung v : N -+ N ist injektiv, d.h. zwei verschiedene natiirliche Zahlen haben auch verschiedene Nachlolger. II) Es gilt v(N) = N" {O}, d.h. jede natiirliche Zahl aufler der 0 besitzt einen Vorganger, (der nach Axiom I eindeutig bestimmt ist), die 0 besitzt keinen Vorganger. III) (Axiom der vollstandigen Induktion) Sei MeN eine Menge natiirlicher Zahlen mit lolgenden Eigenschalten: i) 0 E M. ii) Aus x E M lolgt vex) E M. Dann gilt M = N. Die Aussagen dieser Axiome werden durch un sere intuitive Vorstellung von den natiirlichen Zahlen gedeckt. Insbesondere sagt Axiom III, dass man durch Abzahlen von der 0 ausgehend schlief31ich zu allen natiirlichen Zahlen gelangt. Jede natiirliche Zahl taucht also schlieBlich in der unendlichen Folge 0, v(O), v(v(O)), v(v(v(O))), v(v(v(v(O)))), v(v(v(v(v(O))))), ... auf, die man auch durch 0, I, II, III, 1111, 11111, .. , abkiirzen kann. Selbstverstandlich ist das keine sehr effektive Darstellung fUr die natiirlichen Zahlen, insbesondere, wenn sie etwas grofier sind. 2 §1 Das Axiom der vollstandigen Induktion kann man fUr sog. Beweise durch vollstandige Induktion benutzen. Hierzu gleich ein Beispiel. 1.1. Satz. Fur jede natiirliche Zahl x E N gilt v( x) i= x. Beweis. Wir bezeichnen mit M die Menge aller x E N mit v( x) i= x. Um den Satz zu beweisen, muss en wir zeigen, dass M = N. Wir haben also die beiden Eigenschaften i) und ii) nachzupriifen. Aus Axiom II folgt 0 EM. Sei nun x EM, also v(x) i= x. Aus Axiom I folgt daraus v(v(x)) i= v(x), d.h. v(x) E M. Wegen des Induktions-Axioms III gilt daher M = N, q.e.d. Eine andere Anwendung des Axioms der vollstandigen Induktion sind Definitionen durch vollstandige Induktion. Ais Beispiel betrachten wir die Addition natiirlicher Zahlen und definieren die Addition n + x zweier Zahlen n und x durch voIlstandige Induktion uber x. Definition der Addition. Sei n E N eine naturliche Zahl. Dann wird die Summe n + x fUr aIle x E N durch folgende Vorschriften festgelegt: i) n+O:=n. ii) n+v(x):=v(n+x) Aus dem Induktions-Axiom folgt, dass hierdurch die Summe n+x fUr aIle natiirlichen Zahlen x definiert ist. Definiert man 1 := v(O), so ergibt sich als spezieller Fall von ii) fUr die N achfolge-Funktion die Darstellung v( n) = n + l. In einer Programmiersprache, die Rekursion erlaubt, kann man aus der obigen Definition sofort einen (wenn auch nicht sehr effektiven) Algorithmus zur Addition zweier natiirlichen Zahlen ableiten. Z.B. leistet folgende ARIBAs-Funktion p3dd das Verlangte (das Prafix p_ erinnert an Peano). function p_add(x,y: integer): integer; var z: integer; begin if y = 0 then return x; else z := p_add(x,dec(y)); return inc(z); end; end. Dabei sind inc und dec eingebaute ARIBAS- Funktionen, die den N achfolger bzw. Vorganger einer naturlichen Zahl ergeben. (Allerdings sind inc und dec auf der Menge aller ganzen Zahlen definiert, so dass fUr das korrekte Funktionieren von 3 Die Peano-Axiome p_add vorausgesetzt wird, dass die Argumente x und y tatsachlich naturliche Zahlen, d.h. nicht negativ sind.) Die Rekursions-Tiefe ist offenbar gleich y; urn also z.B. 10 zu addieren, ruft sich die Funktion lO-mal rekursiv selbst auf. Sie ist daher hauptsachlich von theoretischem Interesse und nur zur Addition kleiner Zahlen geeignet; wir werden im nachsten Paragraphen effektivere Algorithmen besprechen. Die Definition der Addition ist unsymmetrisch in beiden Summanden. Es erfordert einige Muhe, urn die Kommutativitat der Addition aus den Axiomen abzuleiten, was wir im Folgenden durchfuhren. 1.2. Satz. Fur aile x, yEN gilt x + y = y + x. Beweis. Wir gehen in mehreren Schritten vor und zeigen zunachst zwei Hilfsaussagen. a) Fur aile x E N gilt x + 0 = 0 + x. Wir zeigen dies durch vollstandige Induktion nach x. Fur x = 0 ist die Aussage trivial. Es ist noch zu zeigen, dass aus x + 0 = 0 + x folgt vex) + 0 = 0 + vex). Dies sieht man so: 0+ v( x) = v(O + x) = v( x + 0) = v(x) = v(x) + O. DID D Dabei gelten die Gleichungen an den mit D markierten Stellen aufgrund der Definition der Addition und an der mit I markierten Stelle aufgrund der InduktionsVoraussetzung. b) Fur alle n, x E N gilt v( n + x) = v( n) + x. Wir verwenden wieder vollstandige Induktion nach x. Fur x = 0 folgt die Behauptung direkt aus der Definition der Addition von O. Fur den Induktions-Schluss x -+ v( x) machen wir folgende Rechnung: v( n + v( x )) = v( v( n + x)) = v( v( n) + x) = v( n) + v( x). D I D Damit ist b) bewiesen. c) Jetzt k6nnen wir die ursprungliche Behauptung x + y = y + x durch vollstandige Induktion nach y beweisen. Der Induktions-Anfang y = 0 wurde in Teil a) bewiesen. Zum Induktions-Schluss y -+ v(y): x + v( y ) = v( x + y) = v( y + x) = v( y) + x. D I b) Daraus folgt die Behauptung. Das Assoziativgesetz der Addition kann man ahnlich beweisen. §1 4 Anordnung der natiirlichen Zahlen. Fur Elemente x, yEN definiert man x < y genau dann, wenn ein sEN, s -I 0, existiert mit x + s = y. Fur x < y schreibt man auch y > x. Die Schreibweise x ~ y bedeutet x = yoder x < y. 1.3. Satz. Die Anordnung der natiirlichen Zahlen genugt folgenden Regeln. a) Fur zwei natiirliche Zahlen besteht genau eine der Beziehungen x < y, x = y, y < x. b) A us x < y und y < z folgt x < z. Beweis. a) Fur eine naturliche Zahl a definieren wir die Mengen < a}, R( a) := {x EN: x > a}. L(a) := {x EN: x Die Behauptung a) ist dann mit folgenden Bedingungen aquivalent: i) N = L(a) U {a} U R(a). ii) Die Mengen L(a), {a} und R(a) sind paarweise disjunkt. Urn i) zu zeigen, definieren wir M := L(a) U {a} U R(a) und zeigen, dass M den beiden Bedingungen des Induktions-Axioms genugt. Zunachst ist klar, dass EM. Sei jetzt x E M. Es ist zu zeigen vex) E M. Falls x E R(a) oder x E {a}, folgt unmittelbar v( x) E R( a) eM. Es ist also nur noch der Fall x E L( a) zu untersuchen. N ach Definition von L( a) gibt es ein s -I mit x + s = a. Nun ist s = vet) mit einem tEN, woraus folgt a = x + vet) = vex) + t. Falls t = 0, ist vex) = a, sonst vex) < a, d.h. vex) E L(a), also in jedem Fall vex) E M. Also folgt M = N und i) bewiesen. Der Beweis von ii) sei der Leserin uberlassen. ° ° b) Aus x < y und y < z folgt x + s = y und y + t = z mit gewissen naturlichen Zahlen s -I 0, t -I 0. Daraus ergibt sich s t -I und x (s t) = z, also x < z, q.e.d. + ° + + 1.4. Satz. Jede nichtleere Menge MeN naturlicher Zahlen besitzt ein kleinstes Element, d.h. es gibt ein Xo EM, so dass Xo ~ x fur alle x EM. Beweis. Wir fuhren folgende Bezeichnung ein: Fiir n E N sei [0, n] := {x EN: x ~ n}. Es ist leicht zu verifizieren, dass [0, v(n)] = [0, n] U {venn. a) Wir zeigen zunachst durch vollstandige Induktion nach n folgende abgeschwachte Aussage: Jede nichtleere Teilmenge M C [0, n] besitzt ein kleinstes Element. Die Peano-Axiome 5 Dies ist trivial fUr n = 0, denn [0,0] = {o}. Zum Induktions-Schritt n ...... v( n): Sei eine nichtleere Teilmenge M C [0, v( n)] gegeben. Falls Ml := M n [0, n] =I 0, besitzt Ml nach Induktions-Voraussetzung ein kleinstes Element Xo und dies ist auch ein kleinstes Element von M. Falls aber M n [0, n] = 0, folgt M = {venn und v(n) ist das kleinste Element von M. b) Sei jetzt MeN eine beliebige nichtleere Teilmenge. Da M =I 0, existiert ein n E M und Ml := M n [0, n] =I 0. Nach Teil a) besitzt Ml ein kleinstes Element Xo und dies ist auch kleinstes Element von M. Definition der Multiplikation. Das Produkt n· x zweier nattirlicher Zahlen n, x wird durch Induktion tiber x wie folgt definiert. i) n· 0 := O. ii) n.v(x):=n·x+n. Ahnlich wie bei der Addition beweist man das Kommutativ- und AssoziativGesetz der Multiplikation sowie die Distributiv-Gesetze. Es folgt auch n·1 = 1· n = n, denn n· 1 = n . v(O) = n· 0 + n n .2 = 0 + n = n. Mit 2 := v(l) gilt = 2 . n = n + n. Wieder urn ergibt sich aus der Definition der Multiplikation sofort eine Implementierung durch eine rekursive ARIBAs-Funktion. function p_mult(x,y: integer): integer; var z: integer; begin if y = 0 then return 0; else z := p_mult(x,dec(y)); return p_add(z,x); end; end. Die Funktion p_mul t ist sehr zeitaufwendig: Zur Multiplikation mit einer nattirlichen Zahl y wird rekursiv y-mal die Funktion p_mult selbst und y-mal die Funktion p_add mit zweitem Argument x aufgerufen. Wie wir oben gesehen haben, ruft sich die Funktion p_add selbst rekursiv x-mal auf. Zur Berechnung von xy sind also ingesamt mindestens xy Funktions-Aufrufe erforderlich. §1 6 Wir beweisen noch einen Satz tiber das Teilen mit Rest, den wir spater fUr den Euklidischen Algorithmus brauchen werden. 1.5. Satz. Seien x, y natiirliche Zahlen, y > O. Dann gibt es natiirliche Zahlen q, r mit x = qy + r und 0:::;; r < y. Beweis. Wir beweisen den Satz durch Induktion nach x. Der Induktions-Anfang x = 0 ist trivial (man wahle q = r = 0). Induktionsschritt. Sei x = qy + r mit 0 :::;; r < y. Dann gilt v(x) = qy + v(r). Falls nun v( r) < y, sind wir fertig. Andernfalls ist v( r) = y und wir haben die Darstellung v(x) = v(q)y + o. Bemerkung. Die Zahlen q, r sind sogar eindeutig bestimmt. Definition der Potenz. Die Potenz nX wird fUr zwei nattirliche Zahlen n, x durch Induktion tiber x wie folgt definiert. i) n O := l. ii) nV(x):= nX . n. Durch Induktion kann man wieder die tiblichen Rechenregeln fUr die Potenz beweisen: Wir zeigen als Beispiel die erste dieser Formeln durch vollstandige Induktion nach y. Der Induktions-Anfang y = 0 ist klar. Zum Induktions-Schritt y -+ v(y): nX+v(y) = nV(x+y) = n X+Y . n = nX . nY . n = nX . nV(Y). I Das Folgende ist eine sich aus der induktiven Definition ergebende rekursive ARIBAs-Funktion zur Berechnung der Potenz. function p_pow(x,y: integer): integer; var z: integer; begin if y = 0 then return 1; else z := p_pow(x,dec(y»; return z * x; end; end. Die Peano-Axiome 7 Dabei wurde aber zur Multiplikation statt der Funktion p_mult die eingebaute Multiplikations-Routine benutzt, da es andernfalls schon bei kleinen Beispielen zu Stack-UberUiufen kommen wiirde. Binar-Darstellung der natiirlichen Zahlen Das durch die Peano-Axiome nahegelegte Modell der natiirlichen Zahlen als die Menge { 0, I, II, III, 1111, 11111, ... } eignet sich schlecht zur Gewinnung effektiver Algorithmen. Eine bessere, dem Computer-Gebrauch angepasste Moglichkeit ist die Binar-Darstellung. Darunter versteht man die Darstellung einer Zahl x E N als n-l (1) x = bk ·2 k mit bk E {O, I}. k=O L 1.6. Satz. Jede natUrliche Zahl besitzt eine Biniir-Darstellung. Beweis. Wir beweisen zunachst durch Induktion nach n die Aussage: Jede natiirliche Zahl x < 2n besitzt eine Binar-Darstellung der Gestalt (1). Dies ist klar fUr n = 0, denn dann ist x = und x wird durch die leere Summe dargestellt. (N ach Definition hat die leere Summe den Wert 0.) Zum Induktions-Schritt n -+ n + 1: Sei x < 2n+l. Falls sogar x < 2n, sind wir fertig. Andernfalls ist 2n ~ x < 2n +1 und es gilt x = 2n + y mit einer natiirlichen Zahl y < 2n. Nach Induktions-Voraussetzung lasst sich yin der Gestalt (1) darstellen. Addition von 1· 2n ergibt dann eine Binar-Darstellung fUr x. Es bleibt noch zu zeigen, dass es fUr jedes x E N wenigstens ein n gibt mit x < 2n. Dies ist wieder trivial fUr x = 0. Zum Induktions-Schritt: Sei x < 2n. Dann gilt entweder auch v( x) < 2 n oder v( x) = 2n. 1m letzteren Fall ist aber v( x) < 2n+1 . ° Eine nach Satz 1.6 in der Form (1) dargestellte Zahl x lasst sich durch den "BitVektor" (bn-l,···,bl,bo), bk E {0,1}, reprasentieren. Man kann leicht sehen, dass dieser Vektor, abgesehen von fUhrenden Nullen, durch x eindeutig bestimmt ist. Fiir die schriftliche Darstellung von Zahlen hat die Binar-Darstellung gegenliber der gewohnten Dezimal-Darstellung den Nachteil, dass sie mehr als dreimal so lang ist. Diesem Nachteil kann man entgehen, wenn man jeweils 4 Binar-Ziffern zusammenfasst und durch ein einziges Symbol gemafi der folgenden Tabelle darstellt. 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 o 2 345 6 7 8 9 ABC D E F Man gelangt so zur sog. Hexadezimal-Darstellung mit der Basis 24 = 16.