„Inside CAS“ Teil I: Polynome faktorisieren Teil II: Automatisches Beweisen Heinz Klemenz, KZO Wetzikon,
„Inside CAS“ Teil I: Polynome faktorisieren Einleitung Kronecker-Algorithmus im Ring Z[x] Berlekamp-Algorithmus in Z p [x] „Lifting“ nach Z[x] Cantor und Zassenhaus (1980) prohabilistisch Multivariate Polynome (Kronecker)
Einleitung 1 Von „Hand“:
Einleitung 2 Weshalb sollte man Polynome faktorisieren können? Beispiele Terme vereinfachen (Kürzen!) Terme vereinfachen (Kürzen!) Polynomiale Gleichungen exakt lösen Polynomiale Gleichungen exakt lösen Codierungstheorie Codierungstheorie Kryptographie Kryptographie Symbolische Integration Symbolische Integration Gröbner-Basen vereinfachen (autom. Beweisen) Gröbner-Basen vereinfachen (autom. Beweisen)
Einleitung 3 Wie kann ein Polynom algorithmisch faktorisiert werden? Erste Versuche Isaac Newton, 1707: „Arithmetica universalis“ Isaac Newton, 1707: „Arithmetica universalis“ Friedrich von Schubert, 1793: Lineare und quadratische Faktoren finden Friedrich von Schubert, 1793: Lineare und quadratische Faktoren finden Leopold Kronecker, : Ausarbeitung der Ideen von Newton und Schubert Leopold Kronecker, : Ausarbeitung der Ideen von Newton und Schubert Neuzeit 1967 Elwin Berlekamp: Faktorisieren in Z p [x] 1967 Elwin Berlekamp: Faktorisieren in Z p [x]
„Inside CAS“ Teil I: Polynome faktorisieren Einleitung Einleitung Kronecker-Algorithmus im Ring Z[x] Berlekamp-Algorithmus in Z p [x] „Lifting“ nach Z[x] Cantor und Zassenhaus (1980) prohabilistisch Multivariate Polynome (Kronecker)
Der Kronecker-Algorithmus 1 Leopold Kronecker Schüler von Kummer Student von Dirichlet und Jakob Steiner Professor in Berlin 1883 mit 60 J. (!) Streit mit Cantor und Weierstrass Vorläufer des Brower- schen Intuitionismus
Der Kronecker-Algorithmus 2 Wir betrachten ein Polynom f(x) aus Z[x] vom Grad n. Wir suchen g(x) und h(x), so dass gilt: f(x) = g(x)·h(x), wobei der Grad von g(x) höchstens m=[n/2] beträgt. Wir suchen g(x) und h(x), so dass gilt: f(x) = g(x)·h(x), wobei der Grad von g(x) höchstens m=[n/2] beträgt. Beispiel: f(x) = x 7 +2x 4 +x 3 +2 = g(x)·h(x) mit g(x) höchstens vom Grad 3... Beispiel: f(x) = x 7 +2x 4 +x 3 +2 = g(x)·h(x) mit g(x) höchstens vom Grad 3...
Der Kronecker-Algorithmus 3 Beobachtung: Der TI-89 schafft i. a. nur quadratische Faktoren (wie Newton). Wie finden wir kubische Faktoren nach Kronecker? Idee: Da g(x) Teiler von f(x), sind auch die (ganzen) Zahlen g(x i ) Teiler von f(x i ) für die ganzzahligen Stützstellen x i.
Der Kronecker-Algorithmus 4 Beispiel: f(x) = x 7 +2x 4 +x 3 +2 Ansatz:g(x) = x 3 +ax 2 +bx+c x-Werte:-101 f(xi)226f(xi)226f(xi)226f(xi)226 g(x i )±1,±2±1,±2±1,±2 ±3,±6 Damit sind 4·4·8 = 128 bzw. 64 Fälle möglich (je zwei bis auf das Vorzeichen gleich)
Der Kronecker-Algorithmus 5 Gleichungssystem g(x i ) = x i 3 +ax i 2 +bx i +c für die Stützstellen x i lösen. liefert die Koeffizienten a, b und c. Schauen, ob dann g(x) Teiler von f(x) ist.
Der Kronecker-Algorithmus 6 Realisierung mit TI-Basic (ca. 12 Sekunden):
Der Kronecker-Algorithmus 7 Fazit: Der Kronecker-Algorithmus ist für die Computer-Praxis untauglich. Schuld sind die vielen möglichen Teiler. Eine Verbesserung ergibt sich, wenn man nicht über Z, sondern über Z p (p prim) faktorisiert, muss nachher aber „liften“. f 2 (x) = x 7 +x 3 = x 3 (x 4 +1) (x 3 +2)(x 4 +1)
„Inside CAS“ Teil I: Polynome faktorisieren Einleitung Einleitung Kronecker-Algorithmus im Ring Z[x] Kronecker-Algorithmus im Ring Z[x] Berlekamp-Algorithmus in Z p [x] „Lifting“ nach Z[x] Cantor und Zassenhaus (1980) prohabilistisch Multivariate Polynome (Kronecker)
Der Berlekamp-Algorithmus 1 Elwyn Berlekamp (geb. 1940) Studium der Elektrotechnik Professor der Mathematik in Berkeley 1967: Berlekamp- Algorithmus
Der Berlekamp-Algorithmus 2 Voraussetzungen für den Algorithmus: Koeffizienten der Polynome werden modulo einer Primzahl gerechnet. Polynome sind normiert, d.h. der Koeffizient der höchsten Potenz ist 1. Polynome sind quadratfrei, d.h. keine Fakto- ren kommen mehrfach vor. {ggT(f(x),f‘(x))=1} Beispiel: f(x) = x 7 +2x 4 +x 3 +2 ist quadratfreies, normiertes, univariates Polynom über Z
Der Berlekamp-Algorithmus 3 Grundidee des Berlekamp-Algorithmus: Um Teilerpolynome f i (x) von f(x) zu finden, bestimmen wir Polynome g(x), so dass ggT(f(x), g(x))= f i (x) gilt. Aber: Wie findet man die Polynome g(x)? Ohne Herleitung: Man muss zuerst die Berlekamp-Matrix aufstellen...
Der Berlekamp-Algorithmus 4 ... und die Berlekamp-Matrix sieht folgendermassen aus (TI89: in ca.10 s) Beispiel: f 7 (x) = x 7 +2x 4 +x 3 +2 in Z 7 [x]
Der Berlekamp-Algorithmus 5 Die Berlekamp-Matrix B ist so definiert:
Der Berlekamp-Algorithmus 6 Im nächsten Schritt wird der Kern von B-E mit dem sog. „Nullraumalgorithmus“ bestimmt. (z.B. mit Maple) Mit den Komponenten der Basisvektoren werden Polynome h i (x) gebildet: h 1 (x) = x h 2 (x) = x 5 + x 3 + 6x h 3 (x) = x 6 +3x 3 + 2
Der Berlekamp-Algorithmus 7 Die Dimension d der Basis liefert dabei gerade die Anzahl irreduzibler Faktoren. Diese möglichen Faktoren f i (x) erhalten wir durch Berechnung der ggT(f(x), h i (x)-c) = g i (x) Sobald wird d Faktoren gefunden haben, terminiert der Algorithmus. g 1 (x) = x 2 +4x+1g 2 (x) = x+2, g 3 (x) = wobei aber x 4 +1=(x 2 +4x+1)(x 2 +3x+1) mod 7 noch zerlegt werden kann g 1 (x) = x 2 +4x+1, g 2 (x) = x 3 +2, g 3 (x) = x 4 +1, wobei aber x 4 +1=(x 2 +4x+1)(x 2 +3x+1) mod 7 noch zerlegt werden kann
Der Berlekamp-Algorithmus 8 Die Faktorisierung über Z 7 lautet: f 7 (x) = (x+2)(x 2 +4x+1)(x 2 +3x+1) Die Faktorisierung über Z 7 lautet: f 7 (x) = (x 3 +2)(x 2 +4x+1)(x 2 +3x+1) Weitere Beispiele: f 5 (x) = (x+2)(x 2 +2x+4)(x 2 +3)(x+3) f 13 (x) = (x+2)(x 2 +8)(x 2 +5) f 29 (x) = (x 2 +17)(x 2 +12)(x 2 +3x+9)(x+26) f 991 (x) = (x+2)(x x+1)(x x+1) Weitere Beispiele: f 5 (x) = (x 2 +2)(x 2 +2x+4)(x 2 +3)(x+3) f 13 (x) = (x 3 +2)(x 2 +8)(x 2 +5) f 29 (x) = (x 2 +17)(x 2 +12)(x 2 +3x+9)(x+26) f 991 (x) = (x 3 +2)(x x+1)(x x+1)
„Inside CAS“ Teil I: Polynome faktorisieren Einleitung Einleitung Kronecker-Algorithmus im Ring Z[x] Kronecker-Algorithmus im Ring Z[x] Berlekamp-Algorithmus in Z p [x] Berlekamp-Algorithmus in Z p [x] „Lifting“ nach Z[x] Cantor und Zassenhaus (1980) prohabilistisch Multivariate Polynome (Kronecker)
„Lifting“ nach Z[x] Wie erhalten wir aus Faktorisierungen in Z p [x] die Faktorsierung in Z[x]? 1. Idee: Modulo eine grosse Primzahl p faktorisieren 2. Idee: Modulo eine kleine Primzahl q faktorisieren und dann Faktorisierung modulo p=q t daraus ermitteln (Hensel-Lifting) In beiden Fällen: Schranke (Mignotte) für den Modul p finden, so dass Faktoren in Z p [x] erscheinen, die auch in Z[x] vorkommen und dann Probedivisionen
„Inside CAS“ Teil I: Polynome faktorisieren Einleitung Einleitung Kronecker-Algorithmus im Ring Z[x] Kronecker-Algorithmus im Ring Z[x] Berlekamp-Algorithmus in Z p [x] Berlekamp-Algorithmus in Z p [x] „Lifting“ nach Z[x] „Lifting“ nach Z[x] Cantor und Zassenhaus (1980) prohabilistisch Multivariate Polynome (Kronecker)
„Inside CAS“ Literatur M. Kaplan: Computeralgebra, Springer, 2005 D. E. Knuth: Arithmetik, Springer, 2001 F. Winkler: Polynomial Algorithms in Computer Algebra, Springer, 1996 Geddes, Czapor, Labahn: Algorithms for Computer Algebra, Kluwer 1992
„Inside CAS“ Schlussbemerkungen Hinter dem Faktorisieren steckt interessante Mathematik. Algorithmisches Faktorisieren ist nicht streng deterministisch. Ein Algorithmus zum Faktorisieren braucht viel Rechenaufwand.