107 lines
3.5 KiB
Lean4
107 lines
3.5 KiB
Lean4
import VersoManual
|
||
import Manual.Meta
|
||
-- Minimal-Imports statt `import Mathlib`, ermittelt mit
|
||
-- `#min_imports`.
|
||
import Mathlib.NumberTheory.LegendreSymbol.Basic
|
||
import Mathlib.Tactic.NormNum.Prime
|
||
|
||
open Verso.Genre
|
||
open Verso.Genre.Manual.InlineLean
|
||
|
||
set_option pp.rawOnError true
|
||
set_option verso.docstring.allowMissing true
|
||
|
||
#doc (Manual) "Quadratische Reziprozität" =>
|
||
%%%
|
||
htmlSplit := .never
|
||
tag := "reziprozitaet"
|
||
file := "reziprozitaet"
|
||
%%%
|
||
|
||
Das letzte Kapitel übersetzt das Rechenbeispiel zum quadratischen
|
||
Reziprozitätsgesetz aus Kapitel 24 des Skripts nach Lean — und
|
||
schließt den Kreis zum Anfang des Kurses.
|
||
|
||
# Das Mathlib-Wörterbuch
|
||
|
||
* Das Legendre-Symbol $`\left(\tfrac{a}{p}\right)` heißt
|
||
`legendreSym p a : ℤ`; es setzt eine `Fact (Nat.Prime p)`-Instanz
|
||
voraus.
|
||
|
||
* „`a` ist ein quadratischer Rest modulo `p`“ ist einfach
|
||
`IsSquare (a : ZMod p)`.
|
||
|
||
* Das Lean-Lernthema dieses Kapitels ist die Taktik `decide`:
|
||
Aussagen über konkrete endliche Objekte — „ist 7 ein Quadrat in
|
||
`𝔽₁₇`?“ — sind _entscheidbar_, und Lean darf die Antwort einfach
|
||
ausrechnen. Das Ergebnis ist ein vollwertiger Beweis.
|
||
|
||
# Das Reziprozitätsgesetz
|
||
|
||
Satz 24.2.1 des Skripts:
|
||
|
||
> *Satz 24.2.1 (Quadratisches Reziprozitätsgesetz).* Es seien $`p`
|
||
und $`q` zwei unterschiedliche, ungerade Primzahlen. Dann gilt
|
||
die Gleichung
|
||
$`\left(\tfrac{p}{q}\right) \cdot \left(\tfrac{q}{p}\right) = (-1)^{\frac{p-1}{2} \cdot \frac{q-1}{2}}`.
|
||
|
||
In Mathlib: `legendreSym.quadratic_reciprocity` — dort mit den
|
||
Exponenten `p / 2` geschrieben, was für ungerade $`p` dasselbe ist
|
||
wie $`(p-1)/2`. Dazu die beiden Ergänzungssätze: Der erste —
|
||
$`\left(\tfrac{-1}{p}\right) = 1` genau für
|
||
$`p \equiv 1 \pmod{4}` — ist in der
|
||
Quadrat-Formulierung `ZMod.exists_sq_eq_neg_one_iff`:
|
||
|
||
```lean
|
||
example (p : ℕ) [Fact p.Prime] (hp : p % 4 ≠ 3) :
|
||
IsSquare (-1 : ZMod p) :=
|
||
ZMod.exists_sq_eq_neg_one_iff.mpr hp
|
||
```
|
||
|
||
# Das Rechenbeispiel
|
||
|
||
Aus dem Skript:
|
||
|
||
> Ist 7 ein quadratischer Rest modulo 17?
|
||
$$`\left(\tfrac{7}{17}\right) = \left(\tfrac{17}{7}\right) \cdot (-1)^{8 \cdot 3} = \left(\tfrac{3}{7}\right) = \left(\tfrac{7}{3}\right) \cdot (-1)^{3 \cdot 1} = -\left(\tfrac{1}{3}\right) = -1.`
|
||
Also ist die Antwort: „Nein!“
|
||
|
||
So rechnet man von Hand — und in der Klausur. In Lean können wir
|
||
dieselbe Frage der Taktik `decide` übergeben, die das Legendre-Symbol
|
||
direkt auswertet:
|
||
|
||
```lean
|
||
instance : Fact (Nat.Prime 17) := ⟨by norm_num⟩
|
||
|
||
example : legendreSym 17 7 = -1 := by decide
|
||
|
||
example : ¬ IsSquare (7 : ZMod 17) := by decide
|
||
```
|
||
|
||
Das ist kein Widerspruch zum Skript, sondern Arbeitsteilung: Das
|
||
Reziprozitätsgesetz macht die Rechnung für _Menschen_ effizient (und
|
||
funktioniert auch bei riesigen Primzahlen); `decide` probiert stumpf
|
||
alle Restklassen durch — für kleine `p` völlig in Ordnung.
|
||
|
||
# Rückblick
|
||
|
||
Damit endet der Kurs, wo er angefangen hat: Das Euler-Kriterium
|
||
hinter dem Legendre-Symbol beruht darauf, dass `𝔽_p^*` zyklisch von
|
||
Ordnung `p−1` ist — dieselbe Beobachtung, mit der wir im Kapitel über
|
||
den kleinen Satz von Fermat gerechnet haben.
|
||
|
||
# Übungsaufgabe
|
||
|
||
Ist 3 ein quadratischer Rest modulo 41? Rechnen Sie erst von Hand
|
||
nach dem Muster des Skript-Beispiels (mit Reziprozität und den
|
||
Ergänzungssätzen) — und lassen Sie dann Lean Ihre Antwort bestätigen.
|
||
Öffnen Sie `AlgebraInLean/Reciprocity.lean` und ersetzen Sie das
|
||
`sorry` durch einen Beweis.
|
||
|
||
```lean
|
||
instance : Fact (Nat.Prime 41) := ⟨by norm_num⟩
|
||
|
||
theorem legendre_41_3 : legendreSym 41 3 = -1 := by
|
||
sorry
|
||
```
|