Algebra in Lean

10. Endliche Körper und der Frobenius🔗

Dieses Kapitel übersetzt den Satz über den Frobenius-Endomorphismus aus Kapitel 14 des Skripts Satz für Satz nach Lean. Es geht um den „Traum jedes Studienanfängers“: (a+b)^p = a^p + b^p.

10.1. Das Mathlib-Wörterbuch🔗

  • R hat Charakteristik p“ ist die Typklasse CharP R p. Das entscheidende Lemma ist CharP.cast_eq_zero: Das Bild von p in R ist Null.

  • Binomialkoeffizienten heißen Nat.choose; die binomische Formel ist add_pow, eine Summe über Finset.range. Endliche Summen und ihre Umformungen sind das Lean-Lernthema dieses Kapitels.

10.2. Der Frobenius-Endomorphismus🔗

Satz und Definition 14.2.2 des Skripts:

Satz und Definition 14.2.2 (Frobenius-Endomorphismus). Es sei p eine Primzahl und es sei R ein kommutativer Ring mit Eins der Charakteristik p. Dann ist die Abbildung F : R \to R, a \mapsto a^p ein Ringmorphismus.

Beweis. Die Verträglichkeit mit der Multiplikation ist klar, weil R kommutativ ist: (a \cdot b)^p = a^p \cdot b^p. Ebenso ist F(1) = 1. Interessant ist nur die Verträglichkeit mit der Addition. … Die binomische Formel gilt in jedem kommutativen Ring, also ist (a+b)^p = \sum_{k=0}^{p} \binom{p}{k} \cdot a^k \cdot b^{p-k}. Für alle Indizes 0 < k < p ist der Binomialkoeffizient \binom{p}{k} ein Vielfaches von p …. Weil R die Charakteristik p hat, ist p = 0 in R, und alle diese Summanden verschwinden. Übrig bleiben nur die Summanden für k = 0 und k = p.

theorem frobenius_mul {R : Type*} [CommRing R] (p : ) (a b : R) : (a * b) ^ p = a ^ p * b ^ p := mul_pow a b p theorem frobenius_add {R : Type*} [CommRing R] (p : ) [Fact p.Prime] [CharP R p] (a b : R) : (a + b) ^ p = a ^ p + b ^ p := R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:R(a + b) ^ p = a ^ p + b ^ p R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime p(a + b) ^ p = a ^ p + b ^ p -- „Die binomische Formel gilt in jedem kommutativen -- Ring, also ist -- (a+b)^p = ∑ₖ (p über k)·a^k·b^{p−k}.“ R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime p m Finset.range (p + 1), a ^ m * b ^ (p - m) * (p.choose m) = a ^ p + b ^ p -- „Für alle Indizes 0 < k < p ist der -- Binomialkoeffizient (p über k) ein Vielfaches von p -- …. Weil R die Charakteristik p hat, ist p = 0 in -- R, und alle diese Summanden verschwinden.“ R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime phmid: k Finset.Ioo 0 p, a ^ k * b ^ (p - k) * (p.choose k) = 0 m Finset.range (p + 1), a ^ m * b ^ (p - m) * (p.choose m) = a ^ p + b ^ p -- „Übrig bleiben nur die Summanden für k = 0 und k = p.“ R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime phmid: k Finset.Ioo 0 p, a ^ k * b ^ (p - k) * (p.choose k) = 0hsplit:Finset.range (p + 1) = {0, p} Finset.Ioo 0 p m Finset.range (p + 1), a ^ m * b ^ (p - m) * (p.choose m) = a ^ p + b ^ p R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime phmid: k Finset.Ioo 0 p, a ^ k * b ^ (p - k) * (p.choose k) = 0hsplit:Finset.range (p + 1) = {0, p} Finset.Ioo 0 phdisj:Disjoint {0, p} (Finset.Ioo 0 p) m Finset.range (p + 1), a ^ m * b ^ (p - m) * (p.choose m) = a ^ p + b ^ p R:Type u_1inst✝²:CommRing Rp:inst✝¹:Fact (Nat.Prime p)inst✝:CharP R pa:Rb:Rhp:Nat.Prime phmid: k Finset.Ioo 0 p, a ^ k * b ^ (p - k) * (p.choose k) = 0hsplit:Finset.range (p + 1) = {0, p} Finset.Ioo 0 phdisj:Disjoint {0, p} (Finset.Ioo 0 p)a ^ 0 * b ^ (p - 0) * (p.choose 0) + a ^ p * b ^ (p - p) * (p.choose p) = a ^ p + b ^ p -- „(a+b)^p = (p über 0)·a⁰·b^p + (p über p)·a^p·b⁰ -- = a^p + b^p.“ All goals completed! 🐙

10.3. Bemerkungen🔗

Mathlib bündelt die drei Verträglichkeiten zum Ringmorphismus frobenius R p : R →+* R; die Additivität heißt dort add_pow_char. Das Skript beobachtet, dass der Frobenius über einem Integritätsring injektiv und über einem endlichen Körper sogar bijektiv ist. Das führt zur Klassifikation endlicher Körper: Zu jeder Primzahlpotenz p^n gibt es genau einen Körper mit p^n Elementen. In Mathlib heißt er GaloisField p n.

10.4. Übungsaufgabe🔗

Der Frobenius des Körpers \mathbb{F}_p ist die Identität: Für jedes a \in \mathbb{F}_p ist a^p = a. Das ist ein alter Bekannter: der kleine Satz von Fermat aus unserem dritten Kapitel! In Mathlib heißt er ZMod.pow_card. Öffnen Sie AlgebraInLean/Frobenius.lean und ersetzen Sie das sorry durch einen Beweis.

theorem declaration uses `sorry`frobenius_zmod (p : ) [Fact p.Prime] (a : ZMod p) : a ^ p = a := p:inst✝:Fact (Nat.Prime p)a:ZMod pa ^ p = a All goals completed! 🐙