Update Degrees.lean
This commit is contained in:
+154
-1
@@ -70,7 +70,9 @@ $`\ell` von $`L/K` und einer Basis $`m` von $`M/L` baut sie die
|
||||
Basis $`(\ell_i \cdot m_j)` von $`M/K` (das Lemma
|
||||
`Basis.smulTower_apply` bestätigt,
|
||||
dass die Basiselemente wirklich die Produkte sind). Der Rest ist
|
||||
Abzählen der Indexmenge.
|
||||
Abzählen der Indexmenge. Wer der Mathlib nicht trauen will, findet
|
||||
im letzten Abschnitt dieses Kapitels den vollständigen Beweis, Satz
|
||||
für Satz aus dem Skript übersetzt.
|
||||
|
||||
```lean
|
||||
theorem gradformel (K L M : Type*) [Field K] [Field L]
|
||||
@@ -122,3 +124,154 @@ theorem grad_teilt (K L M : Type*) [Field K] [Field L]
|
||||
Module.finrank K L ∣ Module.finrank K M := by
|
||||
sorry
|
||||
```
|
||||
|
||||
# Der vollständige Beweis
|
||||
|
||||
Der Beweis oben ist ehrlich, aber kurz: Die eigentliche Arbeit —
|
||||
die Behauptung über die Produkte — haben wir bei `Basis.smulTower`
|
||||
eingekauft. Zum Abschluss führen wir den Skript-Beweis selbst aus,
|
||||
Satz für Satz. Die unendlichen Fälle entfallen wie zuvor, weil wir
|
||||
Endlichkeit voraussetzen.
|
||||
|
||||
Wir formulieren die beiden Beweisschritte als eigenständige Lemmata.
|
||||
Statt der nummerierten Basen $`\ell_1, \dots, \ell_a` und
|
||||
$`m_1, \dots, m_b` des Skripts sprechen wir von Basen `ℓ` und `m`,
|
||||
die über die Indexmengen `Fin a` und `Fin b` laufen; die Familie der
|
||||
Produkte $`(\ell_i \cdot m_j)` ist dann über Paare
|
||||
`p : Fin a × Fin b` indiziert.
|
||||
|
||||
Der erste Schritt des Skripts:
|
||||
|
||||
> _Schritt 1: Die Produkte bilden ein Erzeugendensystem._ Es sei ein
|
||||
Element $`m ∈ M` gegeben. Schreibe $`m` als $`L`-Linearkombination
|
||||
der Basis $`m_1, …, m_b`, nämlich $`m = \sum_j λ_j \cdot m_j` mit
|
||||
$`λ_j ∈ L`, und schreibe danach jeden der Koeffizienten $`λ_j` als
|
||||
$`K`-Linearkombination der Basis $`\ell_1, …, \ell_a`, nämlich
|
||||
$`λ_j = \sum_i μ_{ij} \cdot \ell_i` mit $`μ_{ij} ∈ K`. Einsetzen
|
||||
liefert $`m = \sum_{i,j} μ_{ij} \cdot (\ell_i \cdot m_j)`.
|
||||
|
||||
In Lean heißen die Koeffizienten $`λ_j` und $`μ_{ij}` gerade
|
||||
`m.repr x j` und `ℓ.repr (m.repr x j) i` — das „Schreibe … als
|
||||
Linearkombination“ des Skripts ist das Lemma `Basis.sum_repr`. Das
|
||||
„Einsetzen“ ist eine kleine Rechnung mit dem Distributivgesetz
|
||||
`Finset.sum_smul` und der Turmbedingung `smul_assoc`,
|
||||
$`(μ \cdot \ell) \cdot m = μ \cdot (\ell \cdot m)`.
|
||||
|
||||
```lean
|
||||
theorem produkte_erzeugen {K L M : Type*} [Field K] [Field L]
|
||||
[Field M] [Algebra K L] [Algebra L M] [Algebra K M]
|
||||
[IsScalarTower K L M] {a b : ℕ}
|
||||
(ℓ : Module.Basis (Fin a) K L)
|
||||
(m : Module.Basis (Fin b) L M) :
|
||||
⊤ ≤ Submodule.span K
|
||||
(Set.range fun p : Fin a × Fin b => ℓ p.1 • m p.2) := by
|
||||
-- „Es sei ein Element m ∈ M gegeben.“
|
||||
intro x _
|
||||
-- „Schreibe m als L-Linearkombination der Basis m₁, …, m_b,
|
||||
-- und schreibe danach jeden der Koeffizienten λⱼ als
|
||||
-- K-Linearkombination der Basis ℓ₁, …, ℓ_a. Einsetzen
|
||||
-- liefert m = ∑ μᵢⱼ·(ℓᵢ·mⱼ).“
|
||||
have einsetzen : x = ∑ j, ∑ i,
|
||||
ℓ.repr (m.repr x j) i • (ℓ i • m j) := by
|
||||
conv_lhs => rw [← m.sum_repr x]
|
||||
refine Finset.sum_congr rfl fun j _ => ?_
|
||||
conv_lhs => rw [← ℓ.sum_repr (m.repr x j)]
|
||||
rw [Finset.sum_smul]
|
||||
exact Finset.sum_congr rfl fun i _ => smul_assoc ..
|
||||
-- Eine K-Linearkombination der Produkte liegt im Erzeugnis.
|
||||
rw [einsetzen]
|
||||
exact Submodule.sum_mem _ fun j _ =>
|
||||
Submodule.sum_mem _ fun i _ =>
|
||||
Submodule.smul_mem _ _
|
||||
(Submodule.subset_span ⟨(i, j), rfl⟩)
|
||||
```
|
||||
|
||||
Der zweite Schritt:
|
||||
|
||||
> _Schritt 2: Die Produkte sind linear unabhängig._ Es sei eine
|
||||
$`K`-lineare Relation gegeben, das heißt
|
||||
$`0 = \sum_{i,j} μ_{ij} \cdot (\ell_i \cdot m_j)` mit
|
||||
$`μ_{ij} ∈ K`. Umsortieren liefert
|
||||
$`0 = \sum_j \bigl(\sum_i μ_{ij} \cdot \ell_i\bigr) \cdot m_j`.
|
||||
Dies ist eine $`L`-lineare Relation unter den Basiselementen
|
||||
$`m_j`, also verschwinden alle Koeffizienten: Für jeden Index
|
||||
$`j` ist $`\sum_i μ_{ij} \cdot \ell_i = 0`. Das wiederum ist
|
||||
jeweils eine $`K`-lineare Relation unter den Basiselementen
|
||||
$`\ell_i`, also ist $`μ_{ij} = 0` für alle Indizes $`i` und $`j`.
|
||||
|
||||
Das Lemma `Fintype.linearIndependent_iff` übersetzt „linear
|
||||
unabhängig“ in genau die Sprechweise des Skripts: Jede Relation hat
|
||||
verschwindende Koeffizienten. Wir benutzen es dreimal — einmal in
|
||||
jede Richtung für die Basen `m` und `ℓ`, und einmal für die zu
|
||||
beweisende Aussage selbst.
|
||||
|
||||
```lean
|
||||
theorem produkte_unabhaengig {K L M : Type*} [Field K] [Field L]
|
||||
[Field M] [Algebra K L] [Algebra L M] [Algebra K M]
|
||||
[IsScalarTower K L M] {a b : ℕ}
|
||||
(ℓ : Module.Basis (Fin a) K L)
|
||||
(m : Module.Basis (Fin b) L M) :
|
||||
LinearIndependent K
|
||||
fun p : Fin a × Fin b => ℓ p.1 • m p.2 := by
|
||||
-- „Es sei eine K-lineare Relation gegeben, das heißt
|
||||
-- 0 = ∑ μᵢⱼ·(ℓᵢ·mⱼ), wobei μᵢⱼ ∈ K.“
|
||||
rw [Fintype.linearIndependent_iff]
|
||||
intro μ relation p
|
||||
-- Schreibe die Summe über alle Paare als Doppelsumme.
|
||||
have relation' :
|
||||
∑ i, ∑ j, μ (i, j) • (ℓ i • m j) = 0 := by
|
||||
simpa [Fintype.sum_prod_type] using relation
|
||||
-- „Umsortieren liefert 0 = ∑ⱼ (∑ᵢ μᵢⱼ·ℓᵢ)·mⱼ.“
|
||||
have umsortiert :
|
||||
∑ j, (∑ i, μ (i, j) • ℓ i) • m j = 0 := by
|
||||
calc ∑ j, (∑ i, μ (i, j) • ℓ i) • m j
|
||||
= ∑ j, ∑ i, μ (i, j) • (ℓ i • m j) := by
|
||||
simp_rw [Finset.sum_smul, smul_assoc]
|
||||
_ = ∑ i, ∑ j, μ (i, j) • (ℓ i • m j) :=
|
||||
Finset.sum_comm
|
||||
_ = 0 := relation'
|
||||
-- „Dies ist eine L-lineare Relation unter den Basis-
|
||||
-- elementen mⱼ, also verschwinden alle Koeffizienten:
|
||||
-- Für jeden Index j ist ∑ᵢ μᵢⱼ·ℓᵢ = 0.“
|
||||
have koeff : ∀ j, ∑ i, μ (i, j) • ℓ i = 0 :=
|
||||
Fintype.linearIndependent_iff.mp m.linearIndependent _
|
||||
umsortiert
|
||||
-- „Das wiederum ist jeweils eine K-lineare Relation
|
||||
-- unter den Basiselementen ℓᵢ, also ist μᵢⱼ = 0 für
|
||||
-- alle Indizes.“
|
||||
exact Fintype.linearIndependent_iff.mp
|
||||
ℓ.linearIndependent _ (koeff p.2) p.1
|
||||
```
|
||||
|
||||
Zum Schluss der Zusammenbau, wie im Skript angekündigt:
|
||||
|
||||
> Ich behaupte, dass die $`a \cdot b` Produkte
|
||||
$`(\ell_i \cdot m_j)_{1 ≤ i ≤ a,\ 1 ≤ j ≤ b}` eine Basis von $`M`
|
||||
als $`K`-Vektorraum bilden; damit ist dann sofort
|
||||
$`[M:K] = a \cdot b` gezeigt.
|
||||
|
||||
Die Konstruktion `Module.Basis.mk` baut aus unseren beiden Lemmata —
|
||||
linear unabhängig und erzeugend — eine Basis; das „sofort gezeigt“
|
||||
ist wieder das Abzählen der Indexmenge `Fin a × Fin b`.
|
||||
|
||||
```lean
|
||||
theorem gradformel_vollstaendig
|
||||
(K L M : Type*) [Field K] [Field L] [Field M]
|
||||
[Algebra K L] [Algebra L M] [Algebra K M]
|
||||
[IsScalarTower K L M]
|
||||
[FiniteDimensional K L] [FiniteDimensional L M] :
|
||||
Module.finrank K M
|
||||
= Module.finrank L M * Module.finrank K L := by
|
||||
-- „Wähle Basen ℓ₁, …, ℓ_a von L als K-Vektorraum und
|
||||
-- m₁, …, m_b von M als L-Vektorraum.“
|
||||
let ℓ := Module.finBasis K L
|
||||
let m := Module.finBasis L M
|
||||
-- „Ich behaupte, dass die a·b Produkte (ℓᵢ·mⱼ) eine Basis
|
||||
-- von M als K-Vektorraum bilden …“
|
||||
let basis : Module.Basis (Fin _ × Fin _) K M :=
|
||||
Module.Basis.mk (produkte_unabhaengig ℓ m)
|
||||
(produkte_erzeugen ℓ m)
|
||||
-- „… damit ist dann sofort [M:K] = a·b gezeigt.“
|
||||
rw [Module.finrank_eq_card_basis basis, Fintype.card_prod,
|
||||
Fintype.card_fin, Fintype.card_fin, mul_comm]
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user