Gradformel
This commit is contained in:
@@ -5,6 +5,7 @@ import AlgebraInLean.Ideals
|
||||
import AlgebraInLean.Polynomials
|
||||
import AlgebraInLean.Degrees
|
||||
import AlgebraInLean.Elements
|
||||
import AlgebraInLean.Transitivity
|
||||
import AlgebraInLean.LittleFermat
|
||||
import AlgebraInLean.Cauchy
|
||||
import AlgebraInLean.Frobenius
|
||||
|
||||
+12
-45
@@ -4,8 +4,7 @@ Algebra in Lean — Kapitel 3 des Skripts
|
||||
|
||||
Diese Datei begleitet das Skript „Algebra und Zahlentheorie“
|
||||
(Stefan Kebekus, CC-BY 4.0). Sie übersetzt den Satz über den
|
||||
Grad eines Elements (satz:3-5-4) und die Transitivität der
|
||||
Algebraizität (kor:TdA) nach Lean.
|
||||
Grad eines Elements (satz:3-5-4) nach Lean.
|
||||
-/
|
||||
import Mathlib
|
||||
|
||||
@@ -14,7 +13,7 @@ namespace AlgebraInLean
|
||||
open IntermediateField
|
||||
|
||||
/-!
|
||||
# Algebraische Elemente und Transitivität
|
||||
# Der Grad eines Elements
|
||||
|
||||
## Das Mathlib-Wörterbuch
|
||||
|
||||
@@ -58,55 +57,23 @@ theorem grad_element {K L : Type*} [Field K] [Field L]
|
||||
Fintype.card_fin]
|
||||
rfl
|
||||
|
||||
/-!
|
||||
## Die Transitivität der Algebraizität
|
||||
|
||||
Korollar 3.7.1 des Skripts: „Es seien L/K und M/L zwei
|
||||
algebraische Körpererweiterungen. Dann ist auch M/K
|
||||
algebraisch.“
|
||||
|
||||
Der Kern des Skript-Beweises — adjungiere die endlich vielen
|
||||
Koeffizienten des Minimalpolynoms, schließe auf Endlichkeit und
|
||||
klettere mit der Gradformel den Turm hinauf — ist in Mathlib
|
||||
das Lemma `isIntegral_trans`.
|
||||
-/
|
||||
|
||||
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
|
||||
|
||||
/-!
|
||||
## Übungsaufgabe
|
||||
|
||||
Aus dem Skript: „Die Menge der über K algebraischen Elemente
|
||||
von L bildet 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 und ersetzen
|
||||
Sie das `sorry` durch einen Beweis.
|
||||
Das erste Korollar des Skripts zu Satz 3.5.4: „Es sei L/K eine
|
||||
Körpererweiterung und es sei a ∈ L. Falls [a:K] < ∞ ist, dann
|
||||
ist K(a) algebraisch über K.“ Die beiden Zutaten kennt Mathlib
|
||||
als `IntermediateField.adjoin.finiteDimensional` und
|
||||
`Algebra.IsAlgebraic.of_finite`; die Endlichkeit muss mit
|
||||
`have := …` in den Kontext geholt werden, damit die
|
||||
Instanzsuche sie sieht. Ersetzen Sie das `sorry` durch einen
|
||||
Beweis.
|
||||
-/
|
||||
|
||||
theorem algebraisch_quadrat {K L : Type*} [Field K]
|
||||
theorem einfach_algebraisch {K L : Type*} [Field K]
|
||||
[Field L] [Algebra K L] {a : L}
|
||||
(ha : IsIntegral K a) :
|
||||
IsIntegral K (a ^ 2 + a) := by
|
||||
Algebra.IsAlgebraic K K⟮a⟯ := by
|
||||
sorry
|
||||
|
||||
end AlgebraInLean
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/-
|
||||
Algebra in Lean — Kapitel 3 des Skripts
|
||||
=======================================
|
||||
|
||||
Diese Datei begleitet das Skript „Algebra und Zahlentheorie“
|
||||
(Stefan Kebekus, CC-BY 4.0). Sie übersetzt die Transitivität
|
||||
der Algebraizität (kor:TdA) nach Lean.
|
||||
-/
|
||||
import Mathlib
|
||||
|
||||
namespace AlgebraInLean
|
||||
|
||||
open IntermediateField
|
||||
|
||||
/-!
|
||||
# Die Transitivität der Algebraizität
|
||||
|
||||
Korollar 3.7.1 des Skripts: „Es seien L/K und M/L zwei
|
||||
algebraische Körpererweiterungen. Dann ist auch M/K
|
||||
algebraisch.“
|
||||
|
||||
Der Kern des Skript-Beweises — adjungiere die endlich vielen
|
||||
Koeffizienten des Minimalpolynoms, schließe auf Endlichkeit und
|
||||
klettere mit der Gradformel den Turm hinauf — ist in Mathlib
|
||||
das Lemma `isIntegral_trans`. Das Mathlib-Wörterbuch aus
|
||||
`AlgebraInLean/Elements.lean` gilt unverändert weiter.
|
||||
-/
|
||||
|
||||
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
|
||||
|
||||
/-!
|
||||
## Übungsaufgabe
|
||||
|
||||
Aus dem Skript: „Die Menge der über K algebraischen Elemente
|
||||
von L bildet 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 und ersetzen
|
||||
Sie das `sorry` durch einen Beweis.
|
||||
-/
|
||||
|
||||
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
|
||||
|
||||
end AlgebraInLean
|
||||
@@ -8,6 +8,7 @@ import Book.Ideals
|
||||
import Book.Polynomials
|
||||
import Book.Degrees
|
||||
import Book.Elements
|
||||
import Book.Transitivity
|
||||
import Book.LittleFermat
|
||||
import Book.Cauchy
|
||||
import Book.Frobenius
|
||||
@@ -75,6 +76,8 @@ oder der ausführlichen Anleitung am Anfang der
|
||||
|
||||
{include 0 Book.Elements}
|
||||
|
||||
{include 0 Book.Transitivity}
|
||||
|
||||
{include 0 Book.LittleFermat}
|
||||
|
||||
{include 0 Book.Cauchy}
|
||||
|
||||
+25
-218
@@ -13,18 +13,19 @@ open Verso.Genre.Manual.InlineLean
|
||||
set_option pp.rawOnError true
|
||||
set_option verso.docstring.allowMissing true
|
||||
|
||||
#doc (Manual) "Algebraische Elemente und Transitivität" =>
|
||||
#doc (Manual) "Der Grad eines Elements" =>
|
||||
%%%
|
||||
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.
|
||||
Dieses Kapitel übersetzt Satz 3.5.4 des Skripts nach Lean: Für
|
||||
ein algebraisches Element $`a` stimmt der Grad $`[a:K]` des
|
||||
Minimalpolynoms mit dem Grad $`[K(a):K]` der erzeugten
|
||||
Körpererweiterung überein. Zusammen mit der Gradformel aus dem
|
||||
letzten Kapitel ist das das Arbeitspferd für das nächste
|
||||
Kapitel, die Transitivität der Algebraizität.
|
||||
|
||||
# Das Mathlib-Wörterbuch
|
||||
|
||||
@@ -51,10 +52,10 @@ aus dem letzten Kapitel auf.
|
||||
`Algebra.IsAlgebraic K L`. Das elementweise Ausbuchstabieren
|
||||
übernimmt `Algebra.IsAlgebraic.isAlgebraic`.
|
||||
|
||||
# Der Grad eines Elements
|
||||
# Satz 3.5.4
|
||||
|
||||
Satz 3.5.4 des Skripts verbindet den Grad eines Elements mit dem
|
||||
Grad der von ihm erzeugten Körpererweiterung:
|
||||
Der Satz 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
|
||||
@@ -104,114 +105,32 @@ 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;
|
||||
der letzte Abschnitt des Kapitels führt auch diesen Beweis
|
||||
Satz für Satz aus:
|
||||
|
||||
```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:
|
||||
Das erste Korollar des Skripts zu Satz 3.5.4:
|
||||
|
||||
> *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`_.
|
||||
> Es sei $`L/K` eine Körpererweiterung und es sei $`a ∈ L`.
|
||||
Falls $`[a:K] < ∞` ist, dann ist $`K(a)` algebraisch
|
||||
über $`K`.
|
||||
|
||||
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.
|
||||
Die beiden Zutaten kennt Mathlib als
|
||||
`IntermediateField.adjoin.finiteDimensional` („der Grad ist
|
||||
endlich“) und `Algebra.IsAlgebraic.of_finite` („endliche
|
||||
Erweiterungen sind algebraisch“). Beachten Sie, dass die
|
||||
Endlichkeit mit `have := …` in den Kontext geholt werden muss,
|
||||
damit die Instanzsuche sie sieht. Öffnen Sie
|
||||
`AlgebraInLean/Elements.lean` und ersetzen Sie das `sorry`
|
||||
durch einen Beweis.
|
||||
|
||||
```lean
|
||||
theorem algebraisch_quadrat {K L : Type*} [Field K]
|
||||
theorem einfach_algebraisch {K L : Type*} [Field K]
|
||||
[Field L] [Algebra K L] {a : L}
|
||||
(ha : IsIntegral K a) :
|
||||
IsIntegral K (a ^ 2 + a) := by
|
||||
Algebra.IsAlgebraic K K⟮a⟯ := by
|
||||
sorry
|
||||
```
|
||||
|
||||
# Der vollständige Beweis von Satz 3.5.4
|
||||
# Der vollständige Beweis
|
||||
|
||||
Oben haben wir die eigentliche Arbeit — die Potenzen bilden eine
|
||||
Basis von $`K(a)` — bei `IntermediateField.adjoin.powerBasis`
|
||||
@@ -578,115 +497,3 @@ theorem grad_element_vollstaendig {a : L}
|
||||
rw [finrank_span_eq_card (potenzen_unabhaengig ha),
|
||||
Fintype.card_fin]
|
||||
```
|
||||
|
||||
# Der vollständige Beweis der Transitivität
|
||||
|
||||
Zum Schluss der Skript-Beweis der Transitivität, ohne das Zitat
|
||||
von `isIntegral_trans` — die Kette $`K ⊆ Z ⊆ Z(m) ∋ m` wird
|
||||
wörtlich nachgebaut. Das komplette Skript-Zitat steht oben;
|
||||
im Beweis stehen die Sätze wie immer als Kommentare. Drei
|
||||
Übersetzungsentscheidungen vorweg:
|
||||
|
||||
* Die Koeffizienten $`λ_i` des Minimalpolynoms liegen in $`L`;
|
||||
das Skript liest sie stillschweigend als Elemente von $`M`.
|
||||
In Lean geschieht das explizit über die Einbettung
|
||||
`algebraMap L M`. Die endliche Menge der Koeffizienten eines
|
||||
Polynoms heißt `Polynomial.coeffs`.
|
||||
|
||||
* „$`f` liegt in $`Z[x]`“ ist in Lean ein echter
|
||||
Übersetzungsschritt: `Polynomial.toSubring` fasst ein Polynom,
|
||||
dessen Koeffizienten in einem Teilring liegen, als Polynom
|
||||
über diesem Teilring auf.
|
||||
|
||||
* Das Skript zitiert zweimal Satz 3.6.5 (endlich erzeugt von
|
||||
algebraischen Elementen ⟺ endlich ⟹ algebraisch); in Mathlib
|
||||
sind das `IntermediateField.finiteDimensional_adjoin` und
|
||||
`Algebra.IsAlgebraic.of_finite`. Die Gradformel steckt in
|
||||
`FiniteDimensional.trans`.
|
||||
|
||||
```lean
|
||||
theorem transitivitaet_vollstaendig (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 x
|
||||
-- „Wir wissen, dass m algebraisch über L ist; es sei f
|
||||
-- das Minimalpolynom von m über L.“
|
||||
have hxL : IsIntegral L x :=
|
||||
(Algebra.IsAlgebraic.isAlgebraic x).isIntegral
|
||||
-- „Die Koeffizienten λᵢ liegen in L.“ — wir fassen sie
|
||||
-- über die Einbettung L → M als Elemente von M auf.
|
||||
set S : Set M :=
|
||||
algebraMap L M '' ↑(minpoly L x).coeffs
|
||||
-- „Betrachte jetzt den Körper Z := K(λ₀, …, λ_{n-1})“
|
||||
set Z : IntermediateField K M :=
|
||||
IntermediateField.adjoin K S
|
||||
-- „Die Erweiterung L/K ist algebraisch, also sind die
|
||||
-- endlich vielen Elemente λ₀, …, λ_{n-1} allesamt
|
||||
-- algebraisch über K.“
|
||||
have hS : ∀ s ∈ S, IsIntegral K s := by
|
||||
rintro _ ⟨c, _, rfl⟩
|
||||
exact ((Algebra.IsAlgebraic.isAlgebraic
|
||||
(R := K) c).isIntegral).map
|
||||
(IsScalarTower.toAlgHom K L M)
|
||||
have hSfin : S.Finite :=
|
||||
Set.Finite.image _ (minpoly L x).coeffs.finite_toSet
|
||||
have : Finite ↥S := hSfin.to_subtype
|
||||
-- „Satz 3.6.5 sagt deshalb, dass [Z:K] < ∞ ist.“
|
||||
have hZfin : FiniteDimensional K Z :=
|
||||
IntermediateField.finiteDimensional_adjoin hS
|
||||
-- „Weiter liegt das Polynom f in Z[x] und hat m als
|
||||
-- Nullstelle. Also ist m auch algebraisch über Z.“
|
||||
have hxZ : IsIntegral Z x := by
|
||||
have hco : (↑((minpoly L x).map (algebraMap L M)).coeffs
|
||||
: Set M) ⊆ ↑Z.toSubalgebra.toSubring := by
|
||||
intro c hc
|
||||
obtain ⟨n, hn, rfl⟩ := mem_coeffs_iff.mp hc
|
||||
rw [coeff_map]
|
||||
have hne : (minpoly L x).coeff n ≠ 0 := by
|
||||
intro h0
|
||||
rw [mem_support_iff, coeff_map, h0, map_zero] at hn
|
||||
exact hn rfl
|
||||
exact subset_adjoin K S
|
||||
⟨(minpoly L x).coeff n, coeff_mem_coeffs hne, rfl⟩
|
||||
refine ⟨((minpoly L x).map (algebraMap L M)).toSubring
|
||||
Z.toSubalgebra.toSubring hco, ?_, ?_⟩
|
||||
· exact (monic_toSubring _ _ _).mpr
|
||||
((minpoly.monic hxL).map _)
|
||||
· rw [show algebraMap Z M
|
||||
= (Z.toSubalgebra.toSubring).subtype from rfl,
|
||||
eval₂_eq_eval_map, map_toSubring, eval_map,
|
||||
← aeval_def, minpoly.aeval]
|
||||
-- „… und Satz 3.5.4 liefert [Z(m):Z] < ∞.“
|
||||
have hE : FiniteDimensional Z Z⟮x⟯ :=
|
||||
IntermediateField.adjoin.finiteDimensional hxZ
|
||||
-- „Mit der Gradformel folgt
|
||||
-- [Z(m):K] = [Z(m):Z]·[Z:K] < ∞.“
|
||||
have hZM : FiniteDimensional K (Z⟮x⟯.restrictScalars K) :=
|
||||
FiniteDimensional.trans K Z Z⟮x⟯
|
||||
-- „Wieder nach Satz 3.6.5 ist die Erweiterung Z(m)/K dann
|
||||
-- algebraisch.“
|
||||
have halg :
|
||||
Algebra.IsAlgebraic K (Z⟮x⟯.restrictScalars K) :=
|
||||
Algebra.IsAlgebraic.of_finite K _
|
||||
-- „Insbesondere ist das Element m ∈ Z(m) algebraisch
|
||||
-- über K.“
|
||||
have hmem : x ∈ Z⟮x⟯.restrictScalars K :=
|
||||
mem_adjoin_simple_self Z x
|
||||
exact IntermediateField.isAlgebraic_iff.mp
|
||||
(Algebra.IsAlgebraic.isAlgebraic
|
||||
(⟨x, hmem⟩ : Z⟮x⟯.restrictScalars K))
|
||||
```
|
||||
|
||||
Zwei Details verdienen einen zweiten Blick. Erstens: `Z⟮x⟯`
|
||||
ist eine Erweiterung von $`Z`, aber die Aussage „$`Z(m)/K` ist
|
||||
algebraisch“ braucht $`Z(m)` als Erweiterung von $`K` — diesen
|
||||
stillschweigenden Wechsel des Grundkörpers, den das Skript gar
|
||||
nicht erwähnt, macht `restrictScalars K` explizit. Zweitens
|
||||
steckt im Schritt „$`f ∈ Z[x]` hat $`m` als Nullstelle, also ist
|
||||
$`m` algebraisch über $`Z`“ die kleine Rechnung, dass Auswerten
|
||||
über $`Z` und Auswerten über $`M` dasselbe ergeben
|
||||
(`eval₂_eq_eval_map` und `map_toSubring`).
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
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) "Die Transitivität der Algebraizität" =>
|
||||
%%%
|
||||
htmlSplit := .never
|
||||
tag := "transitivitaet"
|
||||
file := "transitivitaet"
|
||||
%%%
|
||||
|
||||
Dieses Kapitel übersetzt das Hauptresultat von Kapitel 3 des
|
||||
Skripts nach Lean: die Transitivität der Algebraizität. Der
|
||||
Beweis kombiniert die Gradformel mit dem Satz über den Grad
|
||||
eines Elements; das Mathlib-Wörterbuch des letzten Kapitels
|
||||
gilt unverändert weiter.
|
||||
|
||||
# Korollar 3.7.1
|
||||
|
||||
> *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;
|
||||
der letzte Abschnitt des Kapitels führt auch diesen Beweis
|
||||
Satz für Satz aus:
|
||||
|
||||
```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/Transitivity.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
|
||||
```
|
||||
|
||||
# Der vollständige Beweis
|
||||
|
||||
Zum Schluss der Skript-Beweis der Transitivität, ohne das Zitat
|
||||
von `isIntegral_trans` — die Kette $`K ⊆ Z ⊆ Z(m) ∋ m` wird
|
||||
wörtlich nachgebaut. Das komplette Skript-Zitat steht oben;
|
||||
im Beweis stehen die Sätze wie immer als Kommentare. Drei
|
||||
Übersetzungsentscheidungen vorweg:
|
||||
|
||||
* Die Koeffizienten $`λ_i` des Minimalpolynoms liegen in $`L`;
|
||||
das Skript liest sie stillschweigend als Elemente von $`M`.
|
||||
In Lean geschieht das explizit über die Einbettung
|
||||
`algebraMap L M`. Die endliche Menge der Koeffizienten eines
|
||||
Polynoms heißt `Polynomial.coeffs`.
|
||||
|
||||
* „$`f` liegt in $`Z[x]`“ ist in Lean ein echter
|
||||
Übersetzungsschritt: `Polynomial.toSubring` fasst ein Polynom,
|
||||
dessen Koeffizienten in einem Teilring liegen, als Polynom
|
||||
über diesem Teilring auf.
|
||||
|
||||
* Das Skript zitiert zweimal Satz 3.6.5 (endlich erzeugt von
|
||||
algebraischen Elementen ⟺ endlich ⟹ algebraisch); in Mathlib
|
||||
sind das `IntermediateField.finiteDimensional_adjoin` und
|
||||
`Algebra.IsAlgebraic.of_finite`. Die Gradformel steckt in
|
||||
`FiniteDimensional.trans`.
|
||||
|
||||
```lean
|
||||
open Polynomial IntermediateField
|
||||
|
||||
theorem transitivitaet_vollstaendig (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 x
|
||||
-- „Wir wissen, dass m algebraisch über L ist; es sei f
|
||||
-- das Minimalpolynom von m über L.“
|
||||
have hxL : IsIntegral L x :=
|
||||
(Algebra.IsAlgebraic.isAlgebraic x).isIntegral
|
||||
-- „Die Koeffizienten λᵢ liegen in L.“ — wir fassen sie
|
||||
-- über die Einbettung L → M als Elemente von M auf.
|
||||
set S : Set M :=
|
||||
algebraMap L M '' ↑(minpoly L x).coeffs
|
||||
-- „Betrachte jetzt den Körper Z := K(λ₀, …, λ_{n-1})“
|
||||
set Z : IntermediateField K M :=
|
||||
IntermediateField.adjoin K S
|
||||
-- „Die Erweiterung L/K ist algebraisch, also sind die
|
||||
-- endlich vielen Elemente λ₀, …, λ_{n-1} allesamt
|
||||
-- algebraisch über K.“
|
||||
have hS : ∀ s ∈ S, IsIntegral K s := by
|
||||
rintro _ ⟨c, _, rfl⟩
|
||||
exact ((Algebra.IsAlgebraic.isAlgebraic
|
||||
(R := K) c).isIntegral).map
|
||||
(IsScalarTower.toAlgHom K L M)
|
||||
have hSfin : S.Finite :=
|
||||
Set.Finite.image _ (minpoly L x).coeffs.finite_toSet
|
||||
have : Finite ↥S := hSfin.to_subtype
|
||||
-- „Satz 3.6.5 sagt deshalb, dass [Z:K] < ∞ ist.“
|
||||
have hZfin : FiniteDimensional K Z :=
|
||||
IntermediateField.finiteDimensional_adjoin hS
|
||||
-- „Weiter liegt das Polynom f in Z[x] und hat m als
|
||||
-- Nullstelle. Also ist m auch algebraisch über Z.“
|
||||
have hxZ : IsIntegral Z x := by
|
||||
have hco : (↑((minpoly L x).map (algebraMap L M)).coeffs
|
||||
: Set M) ⊆ ↑Z.toSubalgebra.toSubring := by
|
||||
intro c hc
|
||||
obtain ⟨n, hn, rfl⟩ := mem_coeffs_iff.mp hc
|
||||
rw [coeff_map]
|
||||
have hne : (minpoly L x).coeff n ≠ 0 := by
|
||||
intro h0
|
||||
rw [mem_support_iff, coeff_map, h0, map_zero] at hn
|
||||
exact hn rfl
|
||||
exact subset_adjoin K S
|
||||
⟨(minpoly L x).coeff n, coeff_mem_coeffs hne, rfl⟩
|
||||
refine ⟨((minpoly L x).map (algebraMap L M)).toSubring
|
||||
Z.toSubalgebra.toSubring hco, ?_, ?_⟩
|
||||
· exact (monic_toSubring _ _ _).mpr
|
||||
((minpoly.monic hxL).map _)
|
||||
· rw [show algebraMap Z M
|
||||
= (Z.toSubalgebra.toSubring).subtype from rfl,
|
||||
eval₂_eq_eval_map, map_toSubring, eval_map,
|
||||
← aeval_def, minpoly.aeval]
|
||||
-- „… und Satz 3.5.4 liefert [Z(m):Z] < ∞.“
|
||||
have hE : FiniteDimensional Z Z⟮x⟯ :=
|
||||
IntermediateField.adjoin.finiteDimensional hxZ
|
||||
-- „Mit der Gradformel folgt
|
||||
-- [Z(m):K] = [Z(m):Z]·[Z:K] < ∞.“
|
||||
have hZM : FiniteDimensional K (Z⟮x⟯.restrictScalars K) :=
|
||||
FiniteDimensional.trans K Z Z⟮x⟯
|
||||
-- „Wieder nach Satz 3.6.5 ist die Erweiterung Z(m)/K dann
|
||||
-- algebraisch.“
|
||||
have halg :
|
||||
Algebra.IsAlgebraic K (Z⟮x⟯.restrictScalars K) :=
|
||||
Algebra.IsAlgebraic.of_finite K _
|
||||
-- „Insbesondere ist das Element m ∈ Z(m) algebraisch
|
||||
-- über K.“
|
||||
have hmem : x ∈ Z⟮x⟯.restrictScalars K :=
|
||||
mem_adjoin_simple_self Z x
|
||||
exact IntermediateField.isAlgebraic_iff.mp
|
||||
(Algebra.IsAlgebraic.isAlgebraic
|
||||
(⟨x, hmem⟩ : Z⟮x⟯.restrictScalars K))
|
||||
```
|
||||
|
||||
Zwei Details verdienen einen zweiten Blick. Erstens: `Z⟮x⟯`
|
||||
ist eine Erweiterung von $`Z`, aber die Aussage „$`Z(m)/K` ist
|
||||
algebraisch“ braucht $`Z(m)` als Erweiterung von $`K` — diesen
|
||||
stillschweigenden Wechsel des Grundkörpers, den das Skript gar
|
||||
nicht erwähnt, macht `restrictScalars K` explizit. Zweitens
|
||||
steckt im Schritt „$`f ∈ Z[x]` hat $`m` als Nullstelle, also ist
|
||||
$`m` algebraisch über $`Z`“ die kleine Rechnung, dass Auswerten
|
||||
über $`Z` und Auswerten über $`M` dasselbe ergeben
|
||||
(`eval₂_eq_eval_map` und `map_toSubring`).
|
||||
Reference in New Issue
Block a user