210 lines
8.4 KiB
Lean4
210 lines
8.4 KiB
Lean4
import VersoManual
|
|
import Manual.Meta
|
|
-- Minimal-Imports statt `import Mathlib`, ermittelt mit
|
|
-- `#min_imports`.
|
|
import Mathlib.FieldTheory.IntermediateField.Adjoin.Basic
|
|
import Mathlib.RingTheory.Henselian
|
|
import Mathlib.RingTheory.RegularLocalRing.Defs
|
|
import Mathlib.RingTheory.SimpleRing.Principal
|
|
|
|
open Verso.Genre
|
|
open Verso.Genre.Manual.InlineLean
|
|
|
|
set_option pp.rawOnError true
|
|
set_option verso.docstring.allowMissing true
|
|
|
|
#doc (Manual) "Algebraische Elemente und Transitivität" =>
|
|
%%%
|
|
htmlSplit := .never
|
|
tag := "elemente"
|
|
file := "elemente"
|
|
%%%
|
|
|
|
Dieses Kapitel übersetzt zwei weitere Resultate aus Kapitel 3 des
|
|
Skripts nach Lean: den Satz über den Grad einer einfachen
|
|
algebraischen Erweiterung, $`[a:K] = [K(a):K]`, und die
|
|
Transitivität der Algebraizität. Beide bauen auf der Gradformel
|
|
aus dem letzten Kapitel auf.
|
|
|
|
# Das Mathlib-Wörterbuch
|
|
|
|
* „$`a` ist algebraisch über $`K`“ heißt `IsAlgebraic K a`. Über
|
|
Körpern ist das gleichbedeutend damit, dass $`a` Nullstelle
|
|
eines _normierten_ Polynoms ist — in Mathlib `IsIntegral K a`
|
|
(„$`a` ist ganz über $`K`“). Die Umrechnungen heißen
|
|
`IsAlgebraic.isIntegral` und `IsIntegral.isAlgebraic`; die
|
|
meisten Mathlib-Lemmata sind für `IsIntegral` formuliert.
|
|
|
|
* Das Minimalpolynom heißt `minpoly K a`; der Grad $`[a:K]` des
|
|
Skripts ist sein Grad `(minpoly K a).natDegree`. Für
|
|
transzendentes $`a` setzt Mathlib `minpoly K a = 0`, und das
|
|
Nullpolynom hat `natDegree` 0 — wir treffen also wieder die
|
|
0-Konvention für $`\infty` aus dem letzten Kapitel.
|
|
|
|
* Der Zwischenkörper $`K(a)` heißt `K⟮a⟯`, kurz für
|
|
`IntermediateField.adjoin K {a}`. Die Klammer-Notation wird
|
|
durch `open IntermediateField` verfügbar; Vorsicht, `⟮…⟯` sind
|
|
eigene Unicode-Zeichen, keine gewöhnlichen Klammern.
|
|
|
|
* „Die Erweiterung $`L/K` ist algebraisch“ — jedes Element von
|
|
$`L` ist algebraisch über $`K` — ist die Typklasse
|
|
`Algebra.IsAlgebraic K L`. Das elementweise Ausbuchstabieren
|
|
übernimmt `Algebra.IsAlgebraic.isAlgebraic`.
|
|
|
|
# Der Grad eines Elements
|
|
|
|
Satz 3.5.4 des Skripts verbindet den Grad eines Elements mit dem
|
|
Grad der von ihm erzeugten Körpererweiterung:
|
|
|
|
> *Satz 3.5.4 (Grad von Körpererweiterungen und Grad von
|
|
Elementen).* Es sei $`L/K` eine Körpererweiterung und es sei
|
|
$`a ∈ L`. Dann gilt die Gleichheit $`[a:K] = [K(a):K]`.
|
|
|
|
Der Beweis im algebraischen Fall:
|
|
|
|
> _Beweis von Satz 3.5.4, falls $`a` algebraisch ist._ Setze
|
|
$`m := [a:K]` und schreibe das Minimalpolynom von $`a` über
|
|
$`K` als $`f(x) = λ_0 + λ_1 x + ⋯ + λ_{m-1} x^{m-1} + x^m`.
|
|
Die Menge $`\{1, a, a^2, …, a^{m-1}\} ⊆ K(a)` ist linear
|
|
unabhängig über $`K` … Betrachte deshalb den
|
|
$`m`-dimensionalen Untervektorraum
|
|
$`V := \langle 1, a, a^2, …, a^{m-1} \rangle_K ⊆ K(a)`.
|
|
Ich behaupte, dass $`V = K(a)` ist; damit ist dann
|
|
$`[K(a):K] = \dim_K V = m` und der Satz ist bewiesen. …
|
|
|
|
Die Behauptung — mit den beiden Beweisschritten
|
|
„Abgeschlossenheit unter Multiplikation“ und „Abgeschlossenheit
|
|
unter Inversenbildung“ — ist in Mathlib die Konstruktion
|
|
`IntermediateField.adjoin.powerBasis`: Für ganzes $`a` baut sie
|
|
aus den Potenzen $`1, a, …, a^{m-1}` eine Basis von `K⟮a⟯`, eine
|
|
sogenannte _Potenzbasis_. Wie bei der Gradformel bleibt für uns
|
|
das Abzählen der Basis.
|
|
|
|
```lean
|
|
open IntermediateField
|
|
|
|
theorem grad_element {K L : Type*} [Field K] [Field L]
|
|
[Algebra K L] {a : L} (ha : IsIntegral K a) :
|
|
Module.finrank K K⟮a⟯ = (minpoly K a).natDegree := by
|
|
-- „Betrachte deshalb den m-dimensionalen Untervektorraum
|
|
-- V := ⟨1, a, a², …, a^{m-1}⟩ ⊆ K(a). Ich behaupte,
|
|
-- dass V = K(a) ist …“ — die Potenzbasis von K⟮a⟯:
|
|
let pb := IntermediateField.adjoin.powerBasis ha
|
|
-- „… damit ist dann [K(a):K] = dim_K V = m und der Satz
|
|
-- ist bewiesen.“
|
|
rw [Module.finrank_eq_card_basis pb.basis,
|
|
Fintype.card_fin]
|
|
rfl
|
|
```
|
|
|
|
Den transzendenten Fall — $`[a:K] = ∞ = [K(a):K]` — behandelt
|
|
das Skript mit den unendlichen Potenzen $`1, a, a^2, …`; in
|
|
Mathlibs 0-Konvention steht auf beiden Seiten schlicht 0. Als
|
|
fertiges Zitat heißt unser Satz übrigens
|
|
`IntermediateField.adjoin.finrank`.
|
|
|
|
# Die Transitivität der Algebraizität
|
|
|
|
Das Hauptresultat von Kapitel 3 des Skripts:
|
|
|
|
> *Korollar 3.7.1 (Transitivität der Algebraizität).* Es seien
|
|
$`L/K` und $`M/L` zwei algebraische Körpererweiterungen. Dann
|
|
ist auch $`M/K` algebraisch.
|
|
|
|
> _Beweis._ Es sei ein Element $`m ∈ M` gegeben. Wir wissen,
|
|
dass $`m` algebraisch über $`L` ist; es sei
|
|
$`f(x) = λ_0 + λ_1 x + ⋯ + λ_{n-1} x^{n-1} + x^n` das
|
|
Minimalpolynom von $`m` über $`L`. Die Koeffizienten $`λ_i`
|
|
liegen in $`L`. Betrachte jetzt den Körper
|
|
$`Z := K(λ_0, …, λ_{n-1})` und die Kette von
|
|
Körpererweiterungen $`K ⊆ Z ⊆ Z(m) ∋ m`. Die Erweiterung
|
|
$`L/K` ist algebraisch, also sind die endlich vielen Elemente
|
|
$`λ_0, …, λ_{n-1}` allesamt algebraisch über $`K`; deshalb ist
|
|
$`[Z:K] < ∞`. Weiter liegt das Polynom $`f` in $`Z[x]` und
|
|
hat $`m` als Nullstelle. Also ist $`m` auch algebraisch über
|
|
$`Z`, und Satz 3.5.4 liefert $`[Z(m):Z] < ∞`. Mit der
|
|
Gradformel folgt $`[Z(m):K] = [Z(m):Z]·[Z:K] < ∞`. Also ist
|
|
die Erweiterung $`Z(m)/K` algebraisch; insbesondere ist das
|
|
Element $`m ∈ Z(m)` algebraisch über $`K`.
|
|
|
|
Genau dieses Argument — adjungiere die endlich vielen
|
|
Koeffizienten des Minimalpolynoms, schließe auf Endlichkeit und
|
|
klettere mit der Gradformel den Turm hinauf — steckt in Mathlib
|
|
im Lemma `isIntegral_trans`. Unser Beweis übersetzt die
|
|
Rahmensätze des Skripts und zitiert für den Kern dieses Lemma:
|
|
|
|
```lean
|
|
theorem transitivitaet (K L M : Type*) [Field K] [Field L]
|
|
[Field M] [Algebra K L] [Algebra L M] [Algebra K M]
|
|
[IsScalarTower K L M]
|
|
[Algebra.IsAlgebraic K L] [Algebra.IsAlgebraic L M] :
|
|
Algebra.IsAlgebraic K M := by
|
|
constructor
|
|
-- „Es sei ein Element m ∈ M gegeben.“
|
|
intro m
|
|
-- „Wir wissen, dass m algebraisch über L ist“ — über
|
|
-- Körpern gleichbedeutend: m ist ganz über L.
|
|
have hm : IsIntegral L m :=
|
|
(Algebra.IsAlgebraic.isAlgebraic m).isIntegral
|
|
-- Ebenso ist die algebraische Erweiterung L/K ganz.
|
|
have : Algebra.IsIntegral K L :=
|
|
Algebra.IsAlgebraic.isIntegral
|
|
-- „Betrachte jetzt den Körper Z := K(λ₀, …, λ_{n-1}) und
|
|
-- die Kette K ⊆ Z ⊆ Z(m) ∋ m …“ — der gesamte Rest
|
|
-- des Skript-Beweises ist das Lemma isIntegral_trans.
|
|
exact (isIntegral_trans m hm).isAlgebraic
|
|
```
|
|
|
|
Das Skript warnt an dieser Stelle:
|
|
|
|
> *Warnung (Prüfungsfalle).* Der Satz über die Transitivität der
|
|
Algebraizität wird in Prüfungen sehr gern gefragt. Beachten
|
|
Sie, dass der Beweis ziemlich indirekt ist. In Prüfungen
|
|
sehen wir oft, dass Kandidatinnen und Kandidaten für ein
|
|
gegebenes $`a ∈ M` direkt ein Minimalpolynom konstruieren
|
|
wollen. Das hat in der Geschichte der Mathematik noch in
|
|
keiner Prüfung funktioniert. Lassen Sie das!
|
|
|
|
Die Warnung gilt wortgleich in Lean: Auch Mathlib konstruiert
|
|
nirgendwo ein Minimalpolynom von $`m` über $`K` — der Beweis von
|
|
`isIntegral_trans` läuft über die Endlichkeit von Moduln, nicht
|
|
über explizite Polynome.
|
|
|
|
# Bemerkungen
|
|
|
|
1. Wer in den Beweis von `isIntegral_trans` hineinschaut, findet
|
|
die Schritte des Skripts wieder: Dort wird die von den
|
|
Koeffizienten des Minimalpolynoms erzeugte Unteralgebra
|
|
gebildet (das $`Z` des Skripts), ihre Endlichkeit als Modul
|
|
gezeigt, und am Ende die Endlichkeit längs des Turms
|
|
komponiert — `Module.Finite.trans`, die Gradformel in der
|
|
Gestalt „endlich über endlich ist endlich“.
|
|
|
|
2. Als fertiges Zitat ist die Transitivität in Mathlib die
|
|
Instanz `Algebra.IsAlgebraic.trans K L M` — eine Zeile.
|
|
|
|
# Übungsaufgabe
|
|
|
|
Das Skript zieht aus der Transitivität eine schöne Folgerung:
|
|
|
|
> *Satz und Definition (Algebraischer Abschluss in einem
|
|
Oberkörper).* Es sei $`L/K` eine Körpererweiterung. Dann
|
|
bildet die Menge
|
|
$`\overline{K} := \{ a ∈ L : a \text{ ist algebraisch über } K \}`
|
|
einen Unterkörper von $`L`, genannt der _algebraische
|
|
Abschluss von $`K` im Oberkörper $`L`_.
|
|
|
|
Die einzelnen Abgeschlossenheiten kennt Mathlib als
|
|
`IsIntegral.add`, `IsIntegral.neg`, `IsIntegral.mul`,
|
|
`IsIntegral.pow` und `IsIntegral.inv`. Die Übung: Kombinieren
|
|
Sie sie. Öffnen Sie `AlgebraInLean/Elements.lean` und ersetzen
|
|
Sie das `sorry` durch einen Beweis.
|
|
|
|
```lean
|
|
theorem algebraisch_quadrat {K L : Type*} [Field K]
|
|
[Field L] [Algebra K L] {a : L}
|
|
(ha : IsIntegral K a) :
|
|
IsIntegral K (a ^ 2 + a) := by
|
|
sorry
|
|
```
|