Algebra in Lean

6. Der Grad eines Elements🔗

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.

6.1. 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 heißt das 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. Damit treffen wir 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“ ist die Typklasse Algebra.IsAlgebraic K L; gemeint ist, dass jedes Element von L algebraisch über K ist. Das elementweise Ausbuchstabieren übernimmt Algebra.IsAlgebraic.isAlgebraic.

6.2. Satz 3.5.4🔗

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 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 zerfällt in die beiden Beweisschritte „Abgeschlossenheit unter Multiplikation“ und „Abgeschlossenheit unter Inversenbildung“. In Mathlib ist sie 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; den vollständigen Beweis holen wir wie dort am Ende des Kapitels nach.

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 := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree -- „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⟯: K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K apb:PowerBasis K ↥K⟮a⟯ := adjoin.powerBasis ha⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree -- „… damit ist dann [K(a):K] = dim_K V = m und der Satz -- ist bewiesen.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K apb:PowerBasis K ↥K⟮a⟯ := adjoin.powerBasis ha⊢ pb.dim = (minpoly K a).natDegree All goals completed! 🐙

Im transzendenten Fall gilt [a:K] = ∞ = [K(a):K]. Das Skript behandelt ihn 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.

6.3. Übungsaufgabe🔗

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 („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.

theorem declaration uses `sorry`einfach_algebraisch {K L : Type*} [Field K] [Field L] [Algebra K L] {a : L} (ha : IsIntegral K a) : Algebra.IsAlgebraic K K⟮a⟯ := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ Algebra.IsAlgebraic K ↥K⟮a⟯ All goals completed! 🐙

6.4. Der vollständige Beweis🔗

Oben haben wir die eigentliche Arbeit bei IntermediateField.adjoin.powerBasis eingekauft: dass die Potenzen eine Basis von K(a) bilden. Jetzt führen wir den Skript-Beweis Satz für Satz selbst aus. Er ist deutlich länger als der vollständige Beweis der Gradformel, denn das Skript zeigt hier wirklich etwas Substantielles: dass ein endlichdimensionaler Untervektorraum, der unter Multiplikation abgeschlossen ist, automatisch auch Inverse enthält.

Die Hauptfigur ist der Untervektorraum aus dem Skript:

Betrachte deshalb den m-dimensionalen Untervektorraum V := \langle 1, a, a^2, …, a^{m-1} \rangle_K ⊆ K(a).

open Polynomial variable {K L : Type*} [Field K] [Field L] [Algebra K L] -- Der Untervektorraum V = ⟨1, a, …, a^{m-1}⟩ des Skripts. noncomputable def potenzraum (K : Type*) {L : Type*} [Field K] [Field L] [Algebra K L] (a : L) : Submodule K L := Submodule.span K (Set.range fun i : Fin (minpoly K a).natDegree => a ^ (i : ℕ))

Ein Argument benutzt das Skript zweimal: einmal für a, später noch einmal für ein Element y ∈ V:

Falls nicht, dann gäbe es eine Zahl m ∈ ℕ und Elemente λ_0, …, λ_m ∈ K, die nicht alle gleich Null sind, sodass 0 = \sum_{i} λ_i \cdot a^i ist. Dann wäre a aber eine Nullstelle des Polynoms f(x) = \sum_i λ_i \cdot x^i ∈ K[x], welches nicht das Nullpolynom ist.

Wir formulieren es deshalb als eigenes Hilfslemma: Eine nichttriviale lineare Relation unter den Potenzen liefert ein Polynom.

theorem polynom_aus_relation {k : ℕ} (y : L) (μ : Fin k → K) (hrel : ∑ i, μ i • y ^ (i : ℕ) = 0) (i₀ : Fin k) (hμ : μ i₀ ≠ 0) : ∃ g : K[X], g ≠ 0 ∧ g.degree < (k : ℕ) ∧ aeval y g = 0 := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∃ g, g ≠ 0 ∧ g.degree < ↑k ∧ (aeval y) g = 0 -- Das Polynom g = ∑ μᵢ·xⁱ … K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ i, C (μ i) * X ^ ↑i ≠ 0K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ (∑ i, C (μ i) * X ^ ↑i).degree < ↑kK:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ (aeval y) (∑ i, C (μ i) * X ^ ↑i) = 0 -- „… welches nicht das Nullpolynom ist“: sein i₀-ter -- Koeffizient ist μᵢ₀ ≠ 0. K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ i, C (μ i) * X ^ ↑i ≠ 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0h0:∑ i, C (μ i) * X ^ ↑i = 0⊢ False K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0h0:∑ i, C (μ i) * X ^ ↑i = 0⊢ μ i₀ = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0h0:∑ i, C (μ i) * X ^ ↑i = 0hc:(∑ i, C (μ i) * X ^ ↑i).coeff ↑i₀ = coeff 0 ↑i₀⊢ μ i₀ = 0 All goals completed! 🐙 -- … hat Grad < k … K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ (∑ i, C (μ i) * X ^ ↑i).degree < ↑k K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ (Finset.univ.sup fun b => (C (μ b) * X ^ ↑b).degree) < ↑k K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∀ b ∈ Finset.univ, (C (μ b) * X ^ ↑b).degree < ↑k K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0i:Fin ka✝:i ∈ Finset.univ⊢ (C (μ i) * X ^ ↑i).degree < ↑k exact lt_of_le_of_lt (degree_C_mul_X_pow_le _ _) (K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0i:Fin ka✝:i ∈ Finset.univ⊢ ↑↑i < ↑k All goals completed! 🐙) -- … und „y wäre eine Nullstelle des Polynoms“. K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ (aeval y) (∑ i, C (μ i) * X ^ ↑i) = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (aeval y) (C (μ x) * X ^ ↑x) = 0 simp_rw K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (aeval y) (C (μ x) * X ^ ↑x) = 0K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (aeval y) (C (μ x)) * (aeval y) (X ^ ↑x) = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (algebraMap K L) (μ x) * (aeval y) (X ^ ↑x) = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (algebraMap K L) (μ x) * (aeval y) X ^ ↑x = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ x, (algebraMap K L) (μ x) * y ^ ↑x = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K Lk:ℕy:Lμ:Fin k → Khrel:∑ i, μ i • y ^ ↑i = 0i₀:Fin khμ:μ i₀ ≠ 0⊢ ∑ i, μ i • y ^ ↑i = 0] All goals completed! 🐙

Damit folgt die lineare Unabhängigkeit wie im Skript:

Die Menge \{1, a, a^2, …, a^{m-1}\} ⊆ K(a) ist linear unabhängig über K: Jede nicht-triviale Linearkombination der Null lieferte nämlich ein Polynom vom Grad kleiner m, welches nicht das Nullpolynom ist und a als Nullstelle hat — im Widerspruch zur Minimalität des Grades des Minimalpolynoms.

Die „Minimalität des Grades“ heißt in Mathlib minpoly.degree_le_of_ne_zero.

theorem potenzen_unabhaengig {a : L} (ha : IsIntegral K a) : LinearIndependent K (fun i : Fin (minpoly K a).natDegree => a ^ (i : ℕ)) := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ LinearIndependent K fun i => a ^ ↑i K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ ∀ (g : Fin (minpoly K a).natDegree → K), ∑ i, g i • a ^ ↑i = 0 → ∀ (i : Fin (minpoly K a).natDegree), g i = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aμ:Fin (minpoly K a).natDegree → Khrel:∑ i, μ i • a ^ ↑i = 0i₀:Fin (minpoly K a).natDegree⊢ μ i₀ = 0 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aμ:Fin (minpoly K a).natDegree → Khrel:∑ i, μ i • a ^ ↑i = 0i₀:Fin (minpoly K a).natDegreehμ:¬μ i₀ = 0⊢ False -- „Jede nicht-triviale Linearkombination der Null -- lieferte ein Polynom vom Grad kleiner m … mit a als -- Nullstelle“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aμ:Fin (minpoly K a).natDegree → Khrel:∑ i, μ i • a ^ ↑i = 0i₀:Fin (minpoly K a).natDegreehμ:¬μ i₀ = 0g:K[X]hg0:g ≠ 0hdeg:g.degree < ↑(minpoly K a).natDegreehroot:(aeval a) g = 0⊢ False -- „im Widerspruch zur Minimalität des Grades des -- Minimalpolynoms.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aμ:Fin (minpoly K a).natDegree → Khrel:∑ i, μ i • a ^ ↑i = 0i₀:Fin (minpoly K a).natDegreehμ:¬μ i₀ = 0g:K[X]hg0:g ≠ 0hdeg:g.degree < ↑(minpoly K a).natDegreehroot:(aeval a) g = 0hle:(minpoly K a).degree ≤ g.degree⊢ False K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aμ:Fin (minpoly K a).natDegree → Khrel:∑ i, μ i • a ^ ↑i = 0i₀:Fin (minpoly K a).natDegreehμ:¬μ i₀ = 0g:K[X]hg0:g ≠ 0hdeg:g.degree < ↑(minpoly K a).natDegreehroot:(aeval a) g = 0hle:↑(minpoly K a).natDegree ≤ g.degree⊢ False All goals completed! 🐙

Nun der erste Schritt des Skripts:

Schritt 1: Abgeschlossenheit unter Multiplikation. Weil a eine Nullstelle des Minimalpolynoms f ist, gilt die Gleichung a^m = -\sum_{i=0}^{m-1} λ_i \cdot a^i ∈ V. Durch wiederholte Anwendung dieser Gleichung folgt induktiv, dass a^n ∈ V ist, für alle Zahlen n ∈ ℕ. Jedes Produkt von Elementen aus V ist eine K-Linearkombination von Potenzen von a, also gilt für alle v_1, v_2 ∈ V, dass v_1 \cdot v_2 ∈ V ist.

-- „Weil a eine Nullstelle des Minimalpolynoms f ist, gilt -- die Gleichung a^m = -∑ λᵢ·aⁱ.“ theorem hoechste_potenz {a : L} (ha : IsIntegral K a) : a ^ (minpoly K a).natDegree = -∑ i ∈ Finset.range (minpoly K a).natDegree, (minpoly K a).coeff i • a ^ i := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ a ^ (minpoly K a).natDegree = -∑ i ∈ Finset.range (minpoly K a).natDegree, (minpoly K a).coeff i • a ^ i K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ah:(aeval a) (minpoly K a) = 0⊢ a ^ (minpoly K a).natDegree = -∑ i ∈ Finset.range (minpoly K a).natDegree, (minpoly K a).coeff i • a ^ i K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ah:∑ x ∈ Finset.range (minpoly K a).natDegree, (minpoly K a).coeff x • a ^ x + a ^ (minpoly K a).natDegree = 0⊢ a ^ (minpoly K a).natDegree = -∑ i ∈ Finset.range (minpoly K a).natDegree, (minpoly K a).coeff i • a ^ i All goals completed! 🐙 -- „Durch wiederholte Anwendung dieser Gleichung folgt -- induktiv, dass aⁿ ∈ V ist, für alle Zahlen n ∈ ℕ.“ theorem potenz_mem {a : L} (ha : IsIntegral K a) (n : ℕ) : a ^ n ∈ potenzraum K a := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕ⊢ a ^ n ∈ potenzraum K a induction n using Nat.strong_induction_on with K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K a⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:n < (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K aK:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:¬n < (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:n < (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:¬n < (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ n⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegree⊢ a ^ n ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegree⊢ -∑ i ∈ Finset.range (minpoly K a).natDegree, a ^ (n - (minpoly K a).natDegree) * (minpoly K a).coeff i • a ^ i ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegreei:ℕhi:i ∈ Finset.range (minpoly K a).natDegree⊢ a ^ (n - (minpoly K a).natDegree) * (minpoly K a).coeff i • a ^ i ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegreei:ℕhi:i ∈ Finset.range (minpoly K a).natDegree⊢ (minpoly K a).coeff i • a ^ (n - (minpoly K a).natDegree + i) ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegreei:ℕhi:i ∈ Finset.range (minpoly K a).natDegree⊢ n - (minpoly K a).natDegree + i < n K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K an:ℕIH:∀ m < n, a ^ m ∈ potenzraum K ahn:(minpoly K a).natDegree ≤ nhm0:0 < (minpoly K a).natDegreehsplit:a ^ n = a ^ (n - (minpoly K a).natDegree) * a ^ (minpoly K a).natDegreei:ℕhi:i ∈ Finset.range (minpoly K a).natDegreethis:i < (minpoly K a).natDegree⊢ n - (minpoly K a).natDegree + i < n All goals completed! 🐙 -- „Jedes Produkt von Elementen aus V ist eine -- K-Linearkombination von Potenzen von a, also gilt für -- alle v₁, v₂ ∈ V, dass v₁·v₂ ∈ V ist.“ theorem produkt_mem {a : L} (ha : IsIntegral K a) {x y : L} (hx : x ∈ potenzraum K a) (hy : y ∈ potenzraum K a) : x * y ∈ potenzraum K a := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lhx:x ∈ potenzraum K ahy:y ∈ potenzraum K a⊢ x * y ∈ potenzraum K a induction hx, hy using Submodule.span_induction₂ with K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lv:Lhu:u ∈ Set.range fun i => a ^ ↑ihv:v ∈ Set.range fun i => a ^ ↑i⊢ u * v ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lv:Lhv:v ∈ Set.range fun i => a ^ ↑ii:Fin (minpoly K a).natDegree⊢ (fun i => a ^ ↑i) i * v ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Li:Fin (minpoly K a).natDegreej:Fin (minpoly K a).natDegree⊢ (fun i => a ^ ↑i) i * (fun i => a ^ ↑i) j ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lv:Lhv:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)⊢ 0 * v ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lhu:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)⊢ u * 0 ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lv:Lw:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hw:w ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h1:u * w ∈ potenzraum K ah2:v * w ∈ potenzraum K a⊢ (u + v) * w ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lv:Lw:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hw:w ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h1:u * w ∈ potenzraum K ah2:v * w ∈ potenzraum K a⊢ u * w + v * w ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lv:Lw:Lhu:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hz✝:w ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h1:u * v ∈ potenzraum K ah2:u * w ∈ potenzraum K a⊢ u * (v + w) ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lu:Lv:Lw:Lhu:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hz✝:w ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h1:u * v ∈ potenzraum K ah2:u * w ∈ potenzraum K a⊢ u * v + u * w ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lr:Ku:Lv:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h:u * v ∈ potenzraum K a⊢ r • u * v ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lr:Ku:Lv:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h:u * v ∈ potenzraum K a⊢ r • (u * v) ∈ potenzraum K a All goals completed! 🐙 K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lr:Ku:Lv:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h:u * v ∈ potenzraum K a⊢ u * r • v ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ax:Ly:Lr:Ku:Lv:Lhx✝:u ∈ Submodule.span K (Set.range fun i => a ^ ↑i)hy✝:v ∈ Submodule.span K (Set.range fun i => a ^ ↑i)h:u * v ∈ potenzraum K a⊢ r • (u * v) ∈ potenzraum K a All goals completed! 🐙

Das „Jedes Produkt … ist eine K-Linearkombination“ erledigt Submodule.span_induction₂: Es genügt, die Behauptung für die erzeugenden Potenzen zu prüfen (der Fall mem_mem, dort ist a^i \cdot a^j = a^{i+j}); Summen und Vielfache vererben sich.

Der zweite Schritt ist das Herzstück:

Schritt 2: Abgeschlossenheit unter Inversenbildung. Es sei y ∈ V mit y ≠ 0 gegeben. Weil V abgeschlossen unter der Multiplikation ist, liegen alle Potenzen 1, y, y^2, …, y^m in V. Das sind m+1 Elemente in einem Vektorraum der Dimension m, also sind diese Elemente linear abhängig über K. Insbesondere ist y algebraisch über K. Es sei g(x) = c_0 + c_1 x + ⋯ + x^n das Minimalpolynom von y über K. Dann ist c_0 ≠ 0: Andernfalls könnte ich nämlich in g einmal x ausklammern, also g = x \cdot h schreiben. Weil K(a) ein Körper und y ≠ 0 ist, folgte aus 0 = g(y) = y \cdot h(y) schon h(y) = 0 — im Widerspruch zur Minimalität des Grades von g. Aus der Gleichung 0 = g(y) = y \cdot (y^{n-1} + c_{n-1} y^{n-2} + ⋯ + c_1) + c_0 folgt jetzt 1/y = (y^{n-1} + ⋯ + c_1)/(-c_0) ∈ V, denn der Zähler ist eine K-Linearkombination von Potenzen von y, liegt also in V, und der Nenner -c_0 liegt in K.

Das Zählargument „m+1 Elemente in Dimension m“ ist LinearIndependent.fintype_card_le_finrank; die Dimension von V kennen wir aus der linearen Unabhängigkeit (finrank_span_eq_card).

theorem invers_mem {a : L} (ha : IsIntegral K a) {y : L} (hy : y ∈ potenzraum K a) (hy0 : y ≠ 0) : y⁻¹ ∈ potenzraum K a := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0⊢ y⁻¹ ∈ potenzraum K a -- „Weil V abgeschlossen unter der Multiplikation ist, -- liegen alle Potenzen 1, y, y², … in V.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K a⊢ y⁻¹ ∈ potenzraum K a -- „Das sind m+1 Elemente in einem Vektorraum der -- Dimension m, also sind diese Elemente linear abhängig -- über K.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegree⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreehabh:¬LinearIndependent K fun i => ⟨y ^ ↑i, ⋯⟩⊢ y⁻¹ ∈ potenzraum K a -- „Insbesondere ist y algebraisch über K.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreehabh:∃ g, ∑ i, g i • ⟨y ^ ↑i, ⋯⟩ = 0 ∧ ∃ i, g i ≠ 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K y⊢ y⁻¹ ∈ potenzraum K a -- „Es sei g das Minimalpolynom von y über K. Dann ist -- c₀ ≠ 0: Andernfalls könnte ich nämlich in g einmal x -- ausklammern, also g = x·h schreiben. Weil K(a) ein -- Körper und y ≠ 0 ist, folgte aus 0 = g(y) = y·h(y) -- schon h(y) = 0 — im Widerspruch zur Minimalität des -- Grades von g.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0⊢ y⁻¹ ∈ potenzraum K a -- „Aus der Gleichung 0 = g(y) = y·(y^{n-1} + ⋯ + c₁) + c₀ -- folgt jetzt 1/y = (y^{n-1} + ⋯ + c₁)/(-c₀) ∈ V …“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:(aeval y) (minpoly K y) = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:∑ k ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (k + 1) • y ^ (k + 1) + (minpoly K y).coeff 0 • y ^ 0 = 0⊢ y⁻¹ ∈ potenzraum K a simp_rw K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:∑ k ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (k + 1) • y ^ (k + 1) + (minpoly K y).coeff 0 • y ^ 0 = 0⊢ y⁻¹ ∈ potenzraum K aK:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:∑ x ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (x + 1) • (y ^ x * y) + (minpoly K y).coeff 0 • y ^ 0 = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:∑ x ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (x + 1) • y ^ x * y + (minpoly K y).coeff 0 • y ^ 0 = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:∑ x ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (x + 1) • y ^ x * y + (minpoly K y).coeff 0 • 1 = 0⊢ y⁻¹ ∈ potenzraum K a] at expand K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y + (minpoly K y).coeff 0 • 1 = 0⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y + (minpoly K y).coeff 0 • 1 = 0hwy:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y = -((minpoly K y).coeff 0 • 1)⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y + (minpoly K y).coeff 0 • 1 = 0hwy:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y = -((minpoly K y).coeff 0 • 1)hone:y * (-(minpoly K y).coeff 0)⁻¹ • ∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i = 1⊢ y⁻¹ ∈ potenzraum K a K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K ay:Lhy:y ∈ potenzraum K ahy0:y ≠ 0hyn:∀ (j : ℕ), y ^ j ∈ potenzraum K ahfin:FiniteDimensional K ↥(potenzraum K a)hdim:Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegreeμ:Fin ((minpoly K a).natDegree + 1) → Khrel:∑ i, μ i • ⟨y ^ ↑i, ⋯⟩ = 0i₀:Fin ((minpoly K a).natDegree + 1)hμ0:μ i₀ ≠ 0hrelL:∑ i, μ i • y ^ ↑i = 0g:K[X]hg0:g ≠ 0left✝:g.degree < ↑((minpoly K a).natDegree + 1)hgroot:(aeval y) g = 0hyint:IsIntegral K yhc0:(minpoly K y).coeff 0 ≠ 0expand:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y + (minpoly K y).coeff 0 • 1 = 0hwy:(∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i) * y = -((minpoly K y).coeff 0 • 1)hone:y * (-(minpoly K y).coeff 0)⁻¹ • ∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i = 1⊢ (-(minpoly K y).coeff 0)⁻¹ • ∑ i ∈ Finset.range (minpoly K y).natDegree, (minpoly K y).coeff (i + 1) • y ^ i ∈ potenzraum K a -- „… denn der Zähler ist eine K-Linearkombination von -- Potenzen von y, liegt also in V, und der Nenner -c₀ -- liegt in K.“ All goals completed! 🐙

Bleibt der Zusammenbau:

Ich behaupte, dass V = K(a) ist; damit ist dann [K(a):K] = \dim_K V = m und der Satz ist bewiesen. Um die Behauptung zu zeigen, genügt es zu zeigen, dass V ein Unterkörper von K(a) ist. Denn V enthält K und das Element a, und K(a) ist per Definition der kleinste Unterkörper, der K und a enthält. Weil V ein Untervektorraum ist, ist V abgeschlossen unter der Addition.

Das „Bündeln“ von V mit den bewiesenen Abgeschlossenheiten zu einem Unterkörper ist in Lean das Ausfüllen der Strukturfelder von Subalgebra und IntermediateField; das „per Definition der kleinste Unterkörper“ ist adjoin_simple_le_iff.

theorem grad_element_vollstaendig {a : L} (ha : IsIntegral K a) : Module.finrank K K⟮a⟯ = (minpoly K a).natDegree := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K a⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree -- „… genügt es zu zeigen, dass V ein Unterkörper von K(a) -- ist.“ — wir bündeln V zu einem Zwischenkörper F: K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree -- „Denn V enthält K und das Element a, und K(a) ist per -- Definition der kleinste Unterkörper, der K und a -- enthält.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ F⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ F⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯hFK:F = K⟮a⟯⊢ Module.finrank K ↥K⟮a⟯ = (minpoly K a).natDegree -- „… damit ist dann [K(a):K] = dim_K V = m und der Satz -- ist bewiesen.“ K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯hFK:F = K⟮a⟯⊢ Module.finrank K ↥F = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯hFK:F = K⟮a⟯h1:Module.finrank K ↥F = Module.finrank K ↥(potenzraum K a)⊢ Module.finrank K ↥F = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯hFK:F = K⟮a⟯h1:Module.finrank K ↥F = Module.finrank K ↥(potenzraum K a)⊢ Module.finrank K ↥(potenzraum K a) = (minpoly K a).natDegree K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aA:Subalgebra K L := { carrier := ↑(potenzraum K a), mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, algebraMap_mem' := ⋯ }F:IntermediateField K L := { toSubalgebra := A, inv_mem' := ⋯ }haF:a ∈ Foben:K⟮a⟯ ≤ Funten:F ≤ K⟮a⟯hFK:F = K⟮a⟯h1:Module.finrank K ↥F = Module.finrank K ↥(potenzraum K a)⊢ Module.finrank K ↥(Submodule.span K (Set.range fun i => a ^ ↑i)) = (minpoly K a).natDegree All goals completed! 🐙