Files
AlgebraInLean/Book/Frobenius.lean
T
2026-08-13 09:47:44 +02:00

133 lines
4.6 KiB
Lean4
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import VersoManual
import Manual.Meta
-- Minimal-Imports statt `import Mathlib`: ermittelt mit
-- `#min_imports`, ergänzt um die Taktik `ring`.
import Mathlib.Algebra.Field.ZMod
import Mathlib.Data.Nat.Choose.Dvd
import Mathlib.Data.Nat.Choose.Sum
import Mathlib.Tactic.Ring
open Verso.Genre
open Verso.Genre.Manual.InlineLean
set_option pp.rawOnError true
set_option verso.docstring.allowMissing true
#doc (Manual) "Endliche Körper und der Frobenius" =>
%%%
htmlSplit := .never
tag := "frobenius"
file := "frobenius"
%%%
Dieses Kapitel übersetzt den Satz über den Frobenius-Endomorphismus
aus Kapitel 14 des Skripts Satz für Satz nach Lean den Traum jedes
Studienanfängers: $`(a+b)^p = a^p + b^p`.
# 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.
# 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`.
```lean
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 := by
have hp : p.Prime := Fact.out
-- „Die binomische Formel gilt in jedem kommutativen
-- Ring, also ist
-- (a+b)^p = ∑ₖ (p über k)·a^k·b^{pk}.“
rw [add_pow]
-- „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.“
have hmid : k Finset.Ioo 0 p,
a ^ k * b ^ (p - k) * (p.choose k : R) = 0 := by
intro k hk
obtain hk0, hkp := Finset.mem_Ioo.mp hk
obtain c, hc :=
hp.dvd_choose_self (by omega) hkp
rw [hc]
push_cast
rw [CharP.cast_eq_zero R p]
ring
-- „Übrig bleiben nur die Summanden für k = 0 und k = p.“
have hsplit : Finset.range (p + 1)
= {0, p} Finset.Ioo 0 p := by
ext k
simp only [Finset.mem_range, Finset.mem_union,
Finset.mem_insert, Finset.mem_singleton,
Finset.mem_Ioo]
omega
have hdisj : Disjoint ({0, p} : Finset )
(Finset.Ioo 0 p) := by
rw [Finset.disjoint_left]
intro k hk hk'
simp only [Finset.mem_insert,
Finset.mem_singleton] at hk
simp only [Finset.mem_Ioo] at hk'
omega
rw [hsplit, Finset.sum_union hdisj,
Finset.sum_pair (Ne.symm hp.ne_zero),
Finset.sum_eq_zero hmid, add_zero]
-- „(a+b)^p = (p über 0)·a⁰·b^p + (p über p)·a^p·b⁰
-- = a^p + b^p.“
simp [Nat.choose_zero_right, Nat.choose_self, add_comm]
```
# Bemerkungen
Mathlib bündelt die drei Verträglichkeiten zum Ringmorphismus
`frobenius R p : R →+* R`; die Additivität heißt dort
`add_pow_char`. Die Beobachtung des Skripts über einem
Integritätsring ist der Frobenius injektiv, über einem endlichen
Körper sogar bijektiv 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`.
# Ü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.
```lean
theorem frobenius_zmod (p : ) [Fact p.Prime]
(a : ZMod p) : a ^ p = a := by
sorry
```