Die Community zu .NET und Classic VB.
Menü

Gitterreduktion und Empirische Mathematik

 von 

Gitterreduktion und Empirische Mathematik 

In der Schule lernen wir aus gutem Grund, bei Rechnungen nicht mit gerundeten Näherungswerten aus dem Taschenrechner zu arbeiten, sondern stattdessen die exakten symbolischen Ausdrücke weiterzubenutzen. Wir sagen also Latex: \sqrt{2\pi} statt Latex: 2,506628275. Im Allgemeinen gibt es für komplexer werdende Probleme und Gleichungen jedoch keine systematischen symbolischen Lösungsverfahren mehr oder wir kennen zumindest keines. Es muss zunächst numerisch gearbeitet werden. Dennoch könnte das Endergebnis eine einfache und aufschlussreiche symbolische Darstellung haben. Ein kompliziertes Rechenverfahren spuckt, sagen wir,

Latex: x = 3,8416075273496059561780...
als Lösung eines geometrischen Problemes aus.

Wenn wir auf einen exakten Ausdruck hoffen, könnten wir auf ein paar der üblichen Verdächtigen setzen: Summen, Produkte, Potenzen, vielleicht Wurzeln und natürlich die berühmten mathematischen Konstanten Latex: \pi, e, \gamma. Wir können anfangen, diese Bausteine probehalber zu kleinen Ausdrücken zusammenzubasteln und mit Glück die gesuchte Zahl Latex: x wiedererkennen.

Latex: \pi, 2\pi, 2\pi+1, \sqrt 2\pi + 1, \sqrt {2 \pi} + 1, \sqrt{2\pi+1}, 3\pi, ...?
Die schiere Anzahl solcher Ausdrücke ist erdrückend. Wie sollen wir sie zudem sortieren? Nach Länge, Verschachtelungstiefe, nach Größe der auftretenden Zahlen? Da dauert es unter Umständen schon sehr lange, bei einer recht einfachen Form anzugelangen. Ein intelligenterer Ansatz muss her.

Integer relations  

Anstatt beliebige Ausdrücke zu bilden, ist es erfolgversprechend, sogenannte integer relations zu suchen: kleine ganzzahlige Beziehungen . Was meine ich damit?

Nehmen wir Latex: x = 0,66666666667. Dann erfüllt dieses Latex: x die Beziehung

Latex: 3x - 2 \approx 0
und das identifiziert somit Latex: x in guter Näherung als Latex: 2/3.

Diese Beziehung ist ganzzahlig, da wir nur ganzzahlige Koeffizienten benutzen. Wieso kleine ganze Zahlen? Nunja, naturgemäß ist auch

Latex: 3000x - 2000 \approx 0
ist eine ganzzahlige Beziehung, oder viel schlimmer
Latex: 3001x - 1999 \approx 0.
Die Näherung Latex: x \approx 1999/3001 ist aber nicht jene aussagekräftige, die wir wollten.

Gut - eine Bruchzahl, das war einfach. Nehmen wir die Zahl Latex: x = 1,414213562 als Näherung von Latex: \sqrt 2. Hier finden wir keine sinnvolle ganzzahlige Beziehung, die nur Latex: x involviert (Latex: x ist irrational!). Aber natürlich ist

Latex: x^2 - 2 \approx 0
eine wunderbare kleine ganzzahlige Beziehung zwischen Latex: x^2 und Latex: 1. Das bringt uns auf die richtige Fährte. Wir suchen integer relations zwischen Latex: 1, Potenzen Latex: x, x^2, x^3, \ldots, vielleicht Potenzen von Konstanten Latex: e und Latex: \pi ... Je mehr Komplexität wir dem gesuchten Ausdruck zugestehen, desto mehr potenzielle Parameter müssen wir vorberechnen, Logarithmen, Exponentiale inklusive. Dann hoffen wir auf eine knackige ganzzahlige Beziehung zwischen diesen Werten.

Gehen wir doch mal das Latex: x vom Anfang des Artikels an. Ich schenke euch folgende Beziehung (nachrechnen)

Latex: 4x^2 + 4x - 24\pi + 1 \approx 0.

Eindeutig liegt hier ein exakter Ausdruck für Latex: x in der Luft. Welcher das ist? Dazu müssen wir wieder die Gleichung lösen. Latex: \pi-Terme nach rechts, binomische Formel auf der linken Seite anwenden, Wurzel ziehen. Wir formen um:

Latex: 4x^2+4x-24\pi+1=0
Latex: \Leftrightarrow x^2 + x + \frac 1 4 = 6\pi
Latex: \Leftrightarrow (x+1/2)^2 = 6\pi
Latex: \Leftrightarrow x+1/2 = \pm\sqrt{6\pi}

Die plausible Lösung ist also Latex: x = \sqrt{6\pi} - \frac 1 2.

Die große Frage ist nun: Wie findet man solche integer relations? Man kann natürlich anfangen und Zahlenkombinationen durchprobieren. Das ist systematischer als das Erzeugen beliebiger Ausdrücke wie oben, aber immer noch quälend langsam, soll heißen, exponentiell in der Anzahl der Parameter, zwischen denen man eine Beziehung sucht. Wir werden nun sehen, wie integer relations auf eine primitive Weise ein Gitterproblem ergeben, und daraufhin den Reduktionsalgorithmus LLL zur Lösung anwenden.

Gitterreduktion und LLL  

Gitter sind eine regelmäßige Anordnung von Punkten (Vektoren) im Raum, die man erhält, indem man ausgehend von Basisvektoren ganzzahlige Kombinationen bildet. Zwei solcher Basen können durchaus dasselbe Gitter liefern, wenn sie sich ineinander ausdrücken lassen. Leider sieht man Basen nicht an, ob das Gitter, das sie erzeugen, irgendwelche besonders kurzen Vektoren enthält. Wenn ja, würde man sich eine Basis aus solchen Vektoren wünschen. Ansonsten passiert es, dass wir für einen sehr kurzen Vektor erst sehr weit in eine Richtung laufen müssen und dann wieder sehr weit zurück, um fast am Anfang wieder herauszukommen. Das unterscheidet "gute" und "schlechte" Basen. Die Aufgabe, zu einer beliebigen Gitterbasis eine gute Basis zu finden, die dasselbe Gitter erzeugt, heißt Gitterreduktion.


Abbildung 1: Gute und schlechte Basen

In der verlinkten Kolumne war vom 2-dimensionalen Gitter mit folgender Basis die Rede

Latex: z_1 = \begin{pmatrix} 4831 \\ 220 \end{pmatrix},\; z_2 = \begin{pmatrix} 129361 \\ 5891 \end{pmatrix}.

Wie können wir diese Basis zu einer guten Basis reduzieren? Der vielleicht prominenteste Algorithmus dazu heißt LLL-Algorithmus und hat unzählige Anwendungen. Leider handelt es sich um einen sehr ausgefeilten Algorithmus, den man nicht mal so eben selbst implementiert. Er ist aber Standard in den meisten Computeralgebrasystemen.

Wir wollen ihn gleich austesten und benutzen das CAS Macaulay2, das wir dankenswerterweise direkt interaktiv im Browser ausführen können. Im Eingabefenster sehen wir, dass uns mit dem geladenen Package LLLBases direkt eine Implementierung zur Verfügung steht.

Wir schreiben die Basis unseres Gitters in die Spalten einer 2x2-Matrix und rufen die Funktion LLL auf. In Code

m = matrix{
    {4831, 129361},
    {220,  5891}
};

LLL m

Ins Eingabefenster kopieren und Enter drücken. Ausgabe ist die Matrix

Latex: \begin{pmatrix}-1 & 0 \\ 0 & -1 \end{pmatrix}.
Unser Gitter ist tatsächlich das Einheitsgitter und wird von Latex: (1|0) und Latex: (0|1) erzeugt (Vorzeichen spielen keine Rolle)!

Die Ausgabe von LLL hat zudem die schöne Eigenschaft, dass der erste Basisvektor der reduzierten Basis ein sehr kurzer Gittervektor (short vector) ist. Das werden wir jetzt für die Suche nach integer relations benutzen.

Wir wollen die ganzzahlige Beziehung zu Latex: x = 3,8416075273496059561780... selbstständig finden. Wir beziehen die Parameter Latex: 1, x, x^2, \pi mit ein. Betrachten wir ein Gitter mit folgender Basis

Latex: \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 1 & x & x^2 & \pi \end{pmatrix}

Eine Linearkombination der Spalten mit ganzen Zahlen Latex: n_1, \ldots, n_4 liefert einen Vektor

Latex: \begin{pmatrix} n_1 \\ n_2 \\ n_3 \\ n_4 \\ n_1 + n_2x + n_3x^2 + n_4\pi \end{pmatrix}.
In den ersten vier Koordinaten erhalten wir einfach unsere Koeffizienten wieder und in der letzten Koordinate die entsprechende Linearkombination unserer Parameter. Ziel ist es jetzt, die letzte Koordinate auf 0 zu bekommen! So erhalten wir eine ganzzahlige Beziehung, das allein berücksichtigt aber noch nicht, dass die Koeffizienten möglichst klein seinen sollen. Wir beziehen die Koeffizienten Latex: n_1, \ldots, n_4 mit ein, indem wir einen Vektor suchen, der insgesamt möglichst kurz ist.

Das minimiert wiederum die Qualität der Beziehung und die Größe der Koeffizienten in gleichem Maße. Die Summe in der letzten Koordinate könnte erheblich von Null abweichen, wenn nur die benutzen Koeffizienten klein sind. Wir gewichten das, indem wir z.B. die Basis

Latex: \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 1000 & 1000x & 1000x^2 & 1000\pi \end{pmatrix}

benutzen. Das Durchmultiplizieren mit irgendeiner großen Zahl ändert nichts an den Koeffizienten der Beziehung, sorgt aber dafür, dass in erster Linie die letzte Koordinate minimiert wird. Schließlich können wir diese Zahlen sogar abrunden und eine rein ganzzahlige Matrix bekommen. Ein short vector im von diesen Vektoren erzeugten Gitter löst das ganzzahlige Beziehungsproblem, und diesen finden wir als ersten Ausgabevektor von LLL.

Zu abstrakt?

x = 3.8416075273496059561780;
n = 1000000000;

m = matrix{
    {1, 0, 0, 0},
    {0, 1, 0, 0},
    {0, 0, 1, 0},
    {0, 0, 0, 1},
    {floor(n*1), floor(n*x), floor(n*x^2), floor(n*pi)}
};

LLL m

Für die unreduzierte Basis m haben wir

| 1          0          0           0          |
| 0          1          0           0          |
| 0          0          1           0          |
| 0          0          0           1          |
| 1000000000 3841607527 14757948394 3141592653 |

LLL gibt das Ergebnis

| 1   -286 430  134   |
| 4   178  897  241   |
| 4   -31  -315 64    |
| -24 19   246  -638  |
| 12  -1   247  -1391 |

aus. Die erste Spalte Latex: (1|4|4|-24|12) bedeutet, dass die Koeffizienten Latex: 1,4,4,-24 die letzte Koordinate auf den Wert Latex: 12 minimieren. In der Größenordnung von einer Milliarde, die wir dranmultipliziert haben, kann man das glatt als Null gelten lassen. Ablesen der Koeffizienten: Wir haben die Beziehung

Latex: 1 + 4x + 4x^2 - 24\pi \approx 0
gefunden.

Komplexität  

Je komplexer wir die Ausdrücke vermuten, desto mehr Parameter müssen wir einbeziehen und desto hochdimensionaler werden die Gitter. Das Integer Relation-Problem ist NP-vollständig, da es sogar eine Verallgemeinerung des berüchtigten Subset-Sum-Problems ist.

Gegeben eine Liste von Zahlen und eine vorgegebene Zahl Latex: n, gibt es eine Auswahl von Zahlen aus der Liste, die sich zu Latex: n summieren?

Die Lösung ist nämlich nichts anderes als eine integer relation zwischen den gelisteten Zahlen und Latex: n, die nur Koeffizienten 0 und 1 benutzt (und Latex: -1 vor Latex: n). Ebenso sind das Auffinden von short vectors und Gitterreduktion NP-vollständig, da wir diese Verfahren ja eben benutzt haben, um integer relations zu finden. Wer möchte, kann sich einmal versuchen und mit LLL und Macaulay2 auch ein Subset-Sum-Problem lösen. Der Code von oben muss strukturell kaum modifiziert werden.

Der LLL-Algorithmus ist ein polynomieller und für mittelgroße Matrizen ziemlich effizienter Algorithmus, allerdings wird eine Ausgabe mit steigender Dimension exponentiell schlechter. Sprich, irgendwann ist der gefundene erste Basisvektor nicht unbedingt der kleinste des Gitters, sondern nur bis auf irgendeinen großen Faktor. Man kann also stets LLL als effizienten Ansatz probieren, aber muss dann über die Qualität der gefundenen Relationen nachdenken.

Empirische Mathematik  

Wir haben gesehen, wie man zu gegebenen Rundungswerten symbolische Ausdrücke raten kann. Bekommen wir tatsächlich einen Ausdruck hin, ist dessen Wert unterschiedlich. Wenn man lang genug mit immer komplexeren Formeln sucht, wird man schließlich immer irgendwie fündig, nur was sagt das noch? Gelangt man aber, wie man hofft, zu einer knappen prägnanten Formel, kann man so tatsächlich auf einen neuen Zugang zu mathematischer Wahrheit gestoßen sein, der die Erforschung lohnt. Gerade durch die Leistungsfähigkeit von Computern, die solche Entdeckungen heute möglich macht, gesellt sich zur klassischen deduktiven Arbeitsweise des Mathematikers eine empirische hinzu. Einen korrekten Beweis ersetzt ein Computerfund natürlich nie, eine Quelle für Inspiration und Intuition kann er allemal sein.

Zum Austoben  

Wer zum Abschluss des Artikels Lust bekommen hat, sich auszutesten, versuche sich an folgendem Problem: Die gerundete Zahl Latex: x = 0.345160992493238 entsteht durch einen schönen Ausdruck. Welchen?

Man sollte die mathematischen Konstanten, ihre Potenzen sowie positive und negative Potenzen von Latex: x berücksichten. Die Antwort darf gerne in den Foren gepostet werden :)

Quellen  

  • Beispiel für das gezeigte Verfahren auf Wikipedia
  • Hoffstein, Pipher, Silvermann: Introduction to Mathematical Cryptography [Kapitel über Gitter, Subset sum problem und LLL]
  • Ich will nicht verschweigen, dass die Erlösung aller Erstsemester, Wolframalpha , ebenfalls versucht, zu gegebenen Eingaben plausible geschlossene Ausdrücke zu finden: Beispiel

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Hat's schon wer probiert? - Henrik Ilgen 09.11.15 12:28 1 Antwort