Der Lean-Begleiter zu Analysis I
(terrytao.wordpress.com)- Terence Tao hat ein Begleit-Repository gestartet, das Definitionen, Sätze und Übungsaufgaben aus dem Lehrbuch Analysis I in Lean-Code überträgt
- Aufgrund der Eigenschaften des Lehrbuchs, das die Konstruktion der natürlichen Zahlen, ganzen Zahlen, rationalen Zahlen und reellen Zahlen sowie Mengenlehre und Logik streng behandelt, eignet es sich strukturell gut zum Lernen mit einem Proof Assistant
- Der aktuelle Umfang reicht derzeit bis zu Teilen von Kapitel 2, der grundlegenden Mengenlehre in 3.1 und den ganzen Zahlen in 4.1; enthalten ist auch ein Isomorphismus zu den natürlichen Zahlen aus Mathlib
- Der Code kompiliert in Lean, enthält aber noch viele
sorry; statt offizieller Lösungen wird empfohlen, diese in einem Fork auszufüllen - Dieses Material ist einerseits ein alternativer Weg, Übungsaufgaben in Lean zu lösen, und kann andererseits als Einstiegsmaterial dienen, um mit fortschreitender Lektüre den Umgang mit Mathlib zu lernen
Ein Projekt zur Übertragung von Analysis I nach Lean
- Lean companion to “Analysis I” ist ein Projekt, das verschiedene Definitionen, Sätze und Übungsaufgaben aus Analysis I nach Lean „übersetzt“
- Die Übungsaufgaben des Buches können auch gelöst werden, indem die entsprechenden
sorryim Lean-Code ausgefüllt werden - Offizielle Lösungen zu den Übungsaufgaben sollen nicht im Begleiter gehostet werden; Versionen mit ausgefüllten
sorrykönnen als Fork des Repositories erstellt werden
Warum das Lehrbuch gut zu Lean passt
- Analysis I ist ein Lehrbuch, das zur Ergänzung bestehender Lehrbücher zur reellen Analysis einen stärkeren Fokus auf grundlegende Fragen legt
- Konstruktion der natürlichen Zahlen, ganzen Zahlen, rationalen Zahlen und reellen Zahlen
- Mengenlehre und Logik, die die Entwicklung hochgradig strenger Beweise ermöglichen
- Als das Buch geschrieben wurde, gab es bereits Proof Assistants wie Coq und Agda, doch formale Verifikation war damals kein Anliegen
- Später zeigte sich durch Erfahrungen mit formaler Verifikation, dass der Inhalt des Buches gut zu Proof Assistants passt
- Die naive Typentheorie, die im Buch implizit für die Konstruktion der Standard-Zahlensysteme verwendet wurde, passt gut zu Leans dependenter Typentheorie
- Auch Leans Unterstützung für Quotiententypen greift die Konstruktionsweise des Buches passend auf
Der bisher nach Lean übertragene Umfang
- Derzeit wurden die folgenden Abschnitte nach Lean übersetzt
Verhältnis zu Mathlib
- Die Formalisierung ist so angelegt, dass sie sich an einigen Stellen von der Standard-Mathematikbibliothek Mathlib für Lean löst und sich an anderen Stellen auf Mathlib stützt
- In Mathlib gibt es bereits ein Standardkonzept für natürliche Zahlen
- In der Lean-Formalisierung wird zunächst
Chapter2.Natentwickelt, das die natürlichen Zahlen „von Hand“ neu konstruiert- Arbeitet man im Namespace
Chapter2, kann es alsNatverwendet werden - Dabei werden grundlegende Resultate eingerichtet, die parallel zu den Hilfssätzen über natürliche Zahlen in Mathlib verlaufen
- Viele dieser Beweise bleiben als Leserübungen offen und sind derzeit durch
sorryersetzt
- Arbeitet man im Namespace
- Im Epilog-Abschnitt wird ein Isomorphismus zwischen diesen alternativen natürlichen Zahlen und den natürlichen Zahlen aus Mathlib aufgebaut
- Genauer gesagt ist auch dieser Isomorphismus selbst als Übungsaufgabe angelegt
- Danach wird die Konstruktion der natürlichen Zahlen aus Kapitel 2 nicht weiter verwendet; stattdessen kommen die natürlichen Zahlen aus Mathlib zum Einsatz
- Für spätere Kapitel des Buches ist geplant, sich zunehmend stärker auf Definitionen und Funktionen aus Mathlib zu stützen als auf die eigenen Konstruktionen der früheren Kapitel
Nutzung und Stand der Verifikation
- Der Code des Repositories kompiliert in Lean
- Allerdings ist noch nicht getestet, ob die vielen
sorryim Code tatsächlich alle ausgefüllt werden können - Es muss auch noch geprüft werden, ob die benötigten Hilfssätze oder die API der Lean-Dateien ausreichend sind
- Das Ziel ist zu überprüfen, ob sich die
sorrykonzeptionell natürlich ausfüllen lassen, ohne auf schwer verständliche Lean-Programmiertricks angewiesen zu sein
- Das Ziel ist zu überprüfen, ob sich die
- Gewünscht ist, dass Freiwillige den Begleiter playtesten, um zu prüfen, ob sich die Übungsaufgaben tatsächlich in Lean lösen lassen
- Auch weiteres Feedback ist willkommen
Charakter als Einstiegsmaterial für Lean und Mathlib
- Dieser Begleiter kann nicht nur für reelle Analysis, sondern auch als Einführung in Lean und Mathlib genutzt werden
- In dieser Hinsicht ähnelt er in gewissem Maß dem Natural number game
- Das Natural number game überschneidet sich thematisch stark mit Kapitel 2 von Analysis I
1 Kommentare
Meinungen auf Hacker News
Das Interessanteste daran, Mathematik mit Lean zu unterrichten, ist meiner Meinung nach das unmittelbare Feedback. Wenn der Beweis eines Studierenden falsch ist, kompiliert er einfach nicht.
Früher konnte man Feedback nur bekommen, wenn jemand wie ein Tutor, Dozent oder Experte darübergeschaut hat; jetzt kann der Lean-Compiler schnell Rückmeldung geben.
Für die Zukunft wäre es schön, wenn der Lean-Compiler – ähnlich wie der Rust-Compiler Vorschläge zur Codekorrektur macht – noch lehrreicheres Feedback liefern würde; vielleicht braucht es dafür ein spezialisiertes LLM.
Früher bestand das Mathematikstudium oft darin, lange über Aufgaben zu brüten, auf Papier allerlei Ansätze auszuprobieren; dieser Prozess führte manchmal dazu, dass man Konzepte verinnerlichte und auf neue Ideen kam.
Mit Lean könnte es auch zu einer Arbeitsweise werden, bei der man einfach vieles ausprobiert, zufällig überprüft und Dinge raushaut. Als ich ein paarmal mit Coq gearbeitet habe, ist mir ebenfalls vor allem in Erinnerung geblieben, dass ich herumprobiert und an verschiedenen Stellen herumgedreht habe.
reduce(r.num, r.denom) = reduce(a, b)cross_equals(a, b, r.num, r.denom)r.denom * a = r.num * bEs verwendet kein LLM; in der VS-Code-Erweiterung läuft ein kleines lokales Modell. Es wäre schön, wenn dieses kleine lokale Modell eines Tages so stark würde, dass es Menschen weit übertrifft. Mehr dazu steht unter https://acornprover.org/docs/tutorial/proving-a-theorem/.
Ich freue mich wirklich darauf. Es wäre schön, wenn es in ein eigenes Repository verschoben würde, damit man es leichter finden und an andere weitergeben kann.
Ich hatte mich ursprünglich für Mathematik interessiert, und Taos Analysis war das erste Lehrbuch, das mir zeigte, wie Mathematik auf die strenge Weise aufgebaut ist, die mein Programmiererkopf erwartet hatte.
Später habe ich auch ein wenig Lean ausprobiert und fand es ähnlich befriedigend, aber Mathlib war ziemlich komplex, wenn man es zum Lernen mathematischer Konzepte nutzen wollte. Deshalb freut es mich, dass eine Brücke zwischen Buch und Werkzeug entsteht.
Es ist schön zu sehen, dass Theorem Proving bei Mainstream-Themen der Mathematik wie der Analysis an Fahrt gewinnt.
In der Programmiersprachentheorie wurde bereits Mitte der 2010er Jahre, als die Werkzeuge ziemlich ausgereift wurden, ein Standardlehrbuch wie Winskels The Formal Semantics of Programming Languages in Isabelle formal verifiziert. Es ist keine vollständige 1:1-Übertragung, aber http://concrete-semantics.org ist ein Beispiel dafür.
Wenn man sich für Theorem Proving interessiert, halte ich persönlich diesen Bereich für einen deutlich leichteren Einstieg. Denn Sätze der Analysis sind für sich genommen schon ziemlich schwierig.
Man führt strukturelle Induktion durch, wendet die Induktionsannahme an, zeigt, dass Invarianten erhalten bleiben, und macht so weiter.
Ich habe weder sehr viele Theorem-Proving-Beweise gemacht noch mit Beweisassistenten „mathematische“ Beweise wie in der Analysis geführt, aber wenn mathematische Beweise einen deutlich anderen Ansatz verlangen, frage ich mich, wie viel Know-how sich zwischen beiden Bereichen übertragen lässt.
Erwähnen möchte ich auch Rocqs Software Foundations. Vielleicht gibt es einen Lean-Port, aber als ich die ersten Teile nachvollzogen habe, war das ziemlich angenehm.
Es wäre sehr interessant zu bewerten, wie sich der Mainstream-„Lehrbuch“-Ansatz vom Ansatz von Mathlib unterscheidet.
Im Allgemeinen formulieren formalisierte Mathematikbibliotheken Ergebnisse so allgemein wie möglich und machen es leichter, Beweisentwicklungen intuitiver und eleganter zu refaktorisieren.
Refactoring ist deshalb leicht, weil das System ständig nachverfolgt, was logisch woraus folgt. Bei der Arbeit mit Papier und Stift hat man das nicht, weshalb man Gelegenheiten zur Überarbeitung oft verpasst.
Eine naheliegende Frage ist auch, ob es sinnvoll ist, im Grundstudium reelle Analysis in der Mathlib-Version mit „maximaler Allgemeinheit“ zu unterrichten. Dasselbe gilt natürlich auch für andere Bereiche beweisbasierter Mathematik.
Soweit ich weiß, ähneln die Erfahrungen von Lehrenden, die das tatsächlich versucht haben, diesem Eindruck. Für fortgeschrittene Studierende kann es in Ordnung sein, aber bei durchschnittlichen Studierenden dürfte es wahrscheinlich Unterrichtszeit verschwenden.
Meine Voreingenommenheit kommt allerdings daher, dass ich mathematische Konzepte aus Papers gelernt habe.
Code stellt eine enorme zusätzliche Belastung dar und folgt meiner Erfahrung nach meist keinerlei Stilstandards. Als jemand, der auch mathematische Papers lesen musste, die als unverständlich gelten, würde ich sagen: Für Code gibt es praktisch fast keine Standards der Verständlichkeit, daher ist er zehnmal schlimmer.
Auf Terence Taos eigenem YouTube-Kanal gibt es ebenfalls einige Videos, in denen er Lean verwendet: https://www.youtube.com/@TerenceTao27
Ich kenne die Details nicht, aber es war cool zu sehen, wie er mit oder ohne LLM arbeitet.
Für ein grundlegendes Thema wie Analysis halte ich das für ein sehr gutes Projekt und einen guten Ansatz.
Zwei Sorgen kommen mir sofort in den Sinn. Erstens verwenden die zentralen Analysis-Ergebnisse in Mathlib den Begriff der Filter, um Grenzwerte allgemein und einheitlich zu behandeln. Einige Ergebnisse sind dennoch auf die Epsilon-Delta-Form spezialisiert. Ich vermute, Taos Analysis wird den traditionelleren Epsilon-Delta-Ansatz verwenden.
Zweitens entwickelt sich Mathlib schnell und bricht häufig Dinge. Namen ändern sich, Refactorings passieren ständig, sodass nachgelagerte Repositories kontinuierliche Wartung brauchen.
https://link.springer.com/chapter/10.1007/978-981-19-7261-4_6
Ein ziemlich radikaler Gedanke, aber ich finde, der Mathematikunterricht sollte sich darauf konzentrieren, Computeralgebrasysteme wie Mathematica und Theorem Prover wie Lean zu entwickeln. Visualisierung und praktische Anwendungen sollten ebenfalls stark einbezogen werden.
Im Extremfall könnte das bedeuten, dass man gar keine Papiermathematik mehr macht und trotzdem alles, was man gelernt hat, in Lean beweisen kann.
Das heutige System konzentriert sich auf endlose Rechnungen von Hand; das wirkt auf mich ziemlich nutzlos und langweilig und führt dazu, dass Menschen Mathematik nicht mögen.
Ein Lean-Lehrbuch, schön. Aber warum gibt es kein HoTT?
„Should Type Theory (HoTT) Replace (ZFC) Set Theory as the Foundation of Math?“
https://news.ycombinator.com/item?id=43196452
Weitere Lean-Ressourcen, die diese Woche auf HN erschienen sind:
„100 theorems in Lean“
https://news.ycombinator.com/item?id=44075061
„Google-DeepMind/formal-conjectures: collection of formalized conjectures in lean“ https://news.ycombinator.com/item?id=44119725
Die genaue Motivation liegt außerhalb meines Fachgebiets, daher weiß ich es nicht, aber Agda scheint besser geeignet zu sein als Lean, um diese Ideen zu formalisieren.
Später in diesem Jahr soll außerdem ein neues Lehrbuch erscheinen, das eine modernere Aktualisierung des bestehenden HoTT-Buchs darstellt, inklusive Agda-Formalisierung.
https://www.cambridge.org/core/books/introduction-to-homotopy-type-theory/0DD31EC06C80797A50ACE807251E80B6
https://github.com/HoTT-Intro/Agda
HoTT ist keineswegs kurz davor, als vernünftiger Standard akzeptiert zu werden, und für die meisten Menschen ist es ein Thema, bei dem sie schon am Anfang stecken bleiben.
Das ist ein bisschen so, als würde man einen JavaScript-Framework-Entwickler fragen, warum er kein Framework für Elm oder Haskell gebaut hat.
Es wurde deutlich weniger Arbeit investiert, um HoTT-Theorem-Prover benutzerfreundlich zu machen, und die Dokumentation ist deutlich schwächer.
Auch der Nutzen von HoTT ist unklar. Es scheint nur dann Arbeit zu sparen, wenn man mit sehr obskuren Konstruktionen aus der Kategorientheorie zu tun hat.
Terrence Tao hat mehrere Lehrbücher zur Analysis, und dies ist das Lean-Begleitmaterial zu seinem ersten Buch. Er hat kein Lehrbuch zur Typentheorie, also gibt es auch keine höhere Typentheorie. Das, worum es ursprünglich geht, ist etwas völlig anderes.
Sehr cool. Analysis I war für mich als Ingenieur und nicht als Mathematiker das erste „echte“ Mathematiklehrbuch, bei dem ich nach mehreren Anläufen mit anderen Büchern wie Rudin das Gefühl hatte, es vollständig nachvollziehen und durcharbeiten zu können.
Ich hoffe, dass das Lean-Begleitmaterial es für Menschen, die mit Mathematik und Programmierung vertraut sind und rigoros lernen wollen, zugänglicher macht.
In den letzten Jahren gab es immer wieder Versuche, Taos Buch Analysis I in Lean zu formalisieren, und es gab Leute, die genau das tun wollten, was Tao jetzt macht. Leider kamen die meisten nicht über die ersten paar Kapitel hinaus; Tao hofft, weiter zu kommen
Ich hatte auch überlegt, es selbst zu versuchen. Denn wenn ich in meinem Begleitblog zu Analysis I https://taoanalysis.wordpress.com/ formalisierte Beweise zu jeder Übungsaufgabe ergänzen würde, wäre das wohl nützlich für diejenigen, die das Buch durcharbeiten
Ich habe es auch auf dem privaten Discord-Server zum Buch gepostet, teile die einschlägigen Materialien aber auch hier, da sie hilfreich sein könnten
https://github.com/cruhland/lean4-analysis — stammt aus https://github.com/cruhland/lean4-axiomatic
https://github.com/Shaunticlair/tao-analysis-lean-practice
https://github.com/vltanh/lean4-analysis-tao
https://github.com/gabriel128/analysis_in_lean
https://github.com/mk12/analysis-i
https://github.com/melembroucarlitos/Tao_Analysis-LEAN
https://github.com/leanprover-community/NNG4/ — folgt zwar nicht Taos Buch, ist aber die Lean4-Version des Natural Number Game und inhaltlich Kapitel 2 sehr ähnlich
https://github.com/djvelleman/STG4/ — ein Mengenlehre-Spiel für Lean4, könnte also Kapitel 3 ähneln. Allerdings sieht man in https://github.com/djvelleman/STG4/blob/main/Game/Metadata.lean
import Mathlib.Data.Set.Basic, daher scheint es die Mengen von Lean zu importieren, statt Mengen neu zu definieren und Axiome aufzustellen. Dieser Ansatz könnte Lean „zu viel“ über Mengenlehre wissen lassen und für den Zweck ungünstig seinhttps://gist.github.com/kbuzzard/35bf66993e99cbcd8c9edc4914c9e7fc — zur Konstruktion der ganzen Zahlen
https://github.com/ImperialCollegeLondon/IUM/blob/main/IUM/2023/IntegerGame.lean — könnte dieselbe Datei wie oben sein
https://github.com/ImperialCollegeLondon/IUM/blob/main/IUM/2023/RationalGameAlgebra.lean — zur Konstruktion der rationalen Zahlen
https://lean-lang.org/theorem_proving_in_lean4/axioms_and_computation.html#function-extensionality — zeigt eine Möglichkeit, einen benutzerdefinierten
Set-Typ zu definieren