Files
AlgebraInLean/Book/Reciprocity.lean
T
2026-08-11 13:59:48 +02:00

107 lines
3.5 KiB
Lean4
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 `p1` 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
```