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 Ka = (minpoly K a).natDegree := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aModule.finrank K Ka = (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 Ka := adjoin.powerBasis haModule.finrank K Ka = (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 Ka := adjoin.powerBasis hapb.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 Ka := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aAlgebra.IsAlgebraic K Ka 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) ( : μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ i₀ 0h0: i, C (μ i) * X ^ i = 0False 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ i₀ 0i:Fin ka✝:i Finset.univi < 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 k:μ 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 aLinearIndependent 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).natDegree:¬μ i₀ = 0False -- „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).natDegree:¬μ i₀ = 0g:K[X]hg0:g 0hdeg:g.degree < (minpoly K a).natDegreehroot:(aeval a) g = 0False -- „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).natDegree:¬μ i₀ = 0g:K[X]hg0:g 0hdeg:g.degree < (minpoly K a).natDegreehroot:(aeval a) g = 0hle:(minpoly K a).degree g.degreeFalse 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₀ = 0g:K[X]hg0:g 0hdeg:g.degree < (minpoly K a).natDegreehroot:(aeval a) g = 0hle:(minpoly K a).natDegree g.degreeFalse 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 aa ^ (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) = 0a ^ (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 = 0a ^ (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 aa ^ 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).natDegreea ^ 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).natDegreea ^ 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).natDegreea ^ 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).natDegreea ^ 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 na ^ 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).natDegreea ^ 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).natDegreea ^ 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).natDegreea ^ (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).natDegreen - (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).natDegreen - (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 ax * 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 ^ iu * 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 au * 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 au * (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 au * 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 ar 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 ar (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 au * 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 ar (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 0y⁻¹ 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 ay⁻¹ 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).natDegreey⁻¹ 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 0y⁻¹ 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₀ 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 yy⁻¹ 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 0y⁻¹ 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) = 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 = 0y⁻¹ 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 = 1y⁻¹ 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 Ka = (minpoly K a).natDegree := K:Type u_1L:Type u_2inst✝²:Field Kinst✝¹:Field Linst✝:Algebra K La:Lha:IsIntegral K aModule.finrank K Ka = (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 Ka = (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 Ka = (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 FModule.finrank K Ka = (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:Ka FModule.finrank K Ka = (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:Ka Funten:F KaModule.finrank K Ka = (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:Ka Funten:F KahFK:F = KaModule.finrank K Ka = (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:Ka Funten:F KahFK:F = KaModule.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:Ka Funten:F KahFK:F = Kah1: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:Ka Funten:F KahFK:F = Kah1: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:Ka Funten:F KahFK:F = Kah1: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! 🐙