Lean community bloghttps://leanprover-community.github.io/blog/This is the blog of the Lean prover community.enContents © 2023 <a href="mailto:">The Lean prover community</a> Mon, 09 Jan 2023 09:13:43 GMTNikola (getnikola.com)http://blogs.law.harvard.edu/tech/rss- Modular formshttps://leanprover-community.github.io/blog/posts/modular-forms/Chris Birkbeck<div><p>In <a href="https://github.com/leanprover-community/mathlib/pull/13250">PR# 13250</a> we define modular forms and cusp forms, and prove that they form complex vector spaces. These are analytic functions of number theoretic interest with strong links to geometry, representation theory and analysis. Most famously they are a key ingredient in the proof of Fermat's Last Theorem. In this post we discuss the formalization process, motivate some design choices and map out some future work.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/modular-forms/">Read more…</a> (7 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/modular-forms/Wed, 21 Dec 2022 11:41:21 GMT
- This month in mathlib (Oct and Nov 2022)https://leanprover-community.github.io/blog/posts/this-month-in-mathlib-oct-and-nov-2022/The Lean prover community<div><p>In October and November 2022 there were 512 and 453 PRs merged into mathlib. We list some of the highlights below.</p>
<ul>
<li>
<p>Measure theory.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16830">PR #16830</a> improves Vitali families and Lebesgue density theorem.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16762">PR #16762</a> adds a version of Lebesgue's density theorem.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16906">PR #16906</a> proves Lebesgue differentiation theorem.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16836">PR #16836</a> relates integrals over <code>add_circle</code> with integrals upstairs in <code>ℝ</code>.</li>
</ul>
</li>
<li>
<p>Algebra.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/14672">PR #14672</a> defines mixed/equal characteristic zero.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17018">PR #17018</a>, <a href="https://github.com/leanprover-community/mathlib/pull/16849">PR #16849</a> and <a href="https://github.com/leanprover-community/mathlib/pull/17011">PR #17011</a> show the Kähler differential module is functorial and that $S/R$ is formally unramified if and only if $\Omega^1_{S/R} = 0$. They also give the standard presentation of the Kähler differential module.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16000">PR #16000</a> proves Artin-Rees lemma and Krull's intersection theorems.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16317">PR #16317</a> adds the multinomial theorem.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17295">PR #17295</a> proves the Jordan-Hölder theorem for modules.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17311">PR #17311</a> proves that a group with finitely many commutators has finite commutator subgroup.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17243">PR #17243</a> proves the Third Isomorphism theorem for rings.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/13749">PR #13749</a> introduces non-unital subsemirings.</li>
</ul>
</li>
<li>
<p>Analysis</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16723">PR #16723</a> shows that two analytic functions that coincide locally coincide globally.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16683">PR #16683</a> and <a href="https://github.com/leanprover-community/mathlib/pull/16680">PR #16680</a> introduce functions of bounded variation and prove that they are almost everywhere differentiable. As a corollary, <a href="https://github.com/leanprover-community/mathlib/pull/16549">PR #16549</a> shows that a monotone function is differentiable almost everywhere.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17119">PR #17119</a> defines and gives basic properties of the complex unit disc.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16780">PR #16780</a> proves the open mapping theorem for holomorphic functions.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16487">PR #16487</a> constructs the volume form.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16796">PR #16796</a> generalizes the Hahn-Banach separation theorem to (locally convex) topological vector spaces.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16835">PR #16835</a> proves functoriality of the character space.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16638">PR #16638</a> introduces the Dirac delta distribution.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17110">PR #17110</a> proves smoothness of series of functions.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16201">PR #16201</a> and <a href="https://github.com/leanprover-community/mathlib/pull/17598">PR #17598</a> define the additive circle and develop Fourier analysis on it.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17543">PR #17543</a> computes $\Gamma(1/2)$.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16053">PR #16053</a> introduces the strong operator topology.</li>
</ul>
</li>
<li>
<p>Number theory.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/15405">PR #15405</a> introduces the Selmer group of a Dedekind domain.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17677">PR #17677</a> defines slash-invariant forms, a step towards the definition of modular forms.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17203">PR #17203</a> defines the absolute ideal norm.</li>
</ul>
</li>
<li>
<p>Representation theory.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17005">PR #17005</a> is about exactness properties of resolutions.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16043">PR #16043</a> proves the orthogonality of characters.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/13794">PR #13794</a> proves Schur's lemma.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17443">PR #17443</a> adds the construction of a projective resolution of a representation.</li>
</ul>
</li>
<li>
<p>Topology.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16677">PR #16677</a> constructs the Galois correspondence between closed ideals in $C(X, 𝕜)$ and open sets in $X$.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16719">PR #16719</a> shows that maximal ideals of $C(X, 𝕜)$ correspond to (complements of) singletons.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16087">PR #16087</a> defines covering spaces.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16797">PR #16797</a> proves that the stalk functor preserves monomorphism.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17015">PR #17015</a> proves that Noetherian spaces have finite irreducible components.</li>
</ul>
</li>
<li>
<p>Probability theory.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16882">PR #16882</a> proves the second Borel-Cantelli lemma.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16648">PR #16648</a> shows Kolmogorov's 0-1 law.</li>
</ul>
</li>
<li>
<p>Algebraic and differential geometry.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16124">PR #16124</a>, <a href="https://github.com/leanprover-community/mathlib/pull/17117">PR #17117</a>, <a href="https://github.com/leanprover-community/mathlib/pull/17080">PR #17080</a> and <a href="https://github.com/leanprover-community/mathlib/pull/17184">PR #17184</a> develop various properties for morphisms of schemes.</li>
</ul>
</li>
<li>
<p>Linear algebra.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/11468">PR #11468</a> shows that the clifford algebra is isomorphic as a module to the exterior algebra.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16150">PR #16150</a> proves that the inverse of a block triangular matrix is block triangular.</li>
</ul>
</li>
<li>
<p>Category theory.</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16969">PR #16969</a> adds basic results about localization of categories.</li>
</ul>
</li>
<li>
<p>Combinatorics</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16195">PR #16195</a> adds the definition and some basic results about semistandard Young tableaux.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17445">PR #17445</a> adds an equivalence between Young diagrams and weakly decreasing lists of positive natural numbers.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/17306">PR #17306</a> and <a href="https://github.com/leanprover-community/mathlib/pull/17213">PR #17213</a> define bridge edges, acyclic graphs, and trees for simple graphs, and provide some characterizations. </li>
</ul>
</li>
<li>
<p>Tactics</p>
<ul>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16313">PR #16313</a> introduces the <code>qify</code> tactic, to move from $\mathbb{Z}$ to $\mathbb{Q}$.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/13483">PR #13483</a> adds a tactic for moving around summands.</li>
<li><a href="https://github.com/leanprover-community/mathlib/pull/16911">PR #16911</a> adds a tactic to find declarations that use <code>sorry</code>. This tactic is intended for projects that depend on mathlib.</li>
</ul>
</li>
</ul>
<p>During these two months, we got two new versions of Lean. We also started to systematically port mathlib to Lean4, see the <a href="https://github.com/leanprover-community/mathlib4/wiki">wiki</a>.</p></div>https://leanprover-community.github.io/blog/posts/this-month-in-mathlib-oct-and-nov-2022/Thu, 01 Dec 2022 13:56:21 GMT
- Definitions in the liquid tensor experimenthttps://leanprover-community.github.io/blog/posts/lte-examples/Adam Topaz<div><p>A few weeks ago, we announced the <a href="https://leanprover-community.github.io/blog/posts/lte-final/">completion of the liquid tensor experiment</a> (<strong>LTE</strong> for short).
What this means is that we stated and (completely) proved the following result in Lean:</p>
<pre class="code literal-block"><span class="kd">variables</span> <span class="o">(</span><span class="n">p'</span> <span class="n">p</span> <span class="o">:</span> <span class="n">ℝ</span><span class="bp">≥</span><span class="mi">0</span><span class="o">)</span> <span class="o">[</span><span class="n">fact</span> <span class="o">(</span><span class="mi">0</span> <span class="bp"><</span> <span class="n">p'</span><span class="o">)]</span> <span class="o">[</span><span class="n">fact</span> <span class="o">(</span><span class="n">p'</span> <span class="bp"><</span> <span class="n">p</span><span class="o">)]</span> <span class="o">[</span><span class="n">fact</span> <span class="o">(</span><span class="n">p</span> <span class="bp">≤</span> <span class="mi">1</span><span class="o">)]</span>
<span class="kd">theorem</span> <span class="n">liquid_tensor_experiment</span>
<span class="o">(</span><span class="n">S</span> <span class="o">:</span> <span class="n">Profinite</span><span class="o">)</span> <span class="o">(</span><span class="n">V</span> <span class="o">:</span> <span class="n">pBanach</span> <span class="n">p</span><span class="o">)</span> <span class="o">:</span>
<span class="bp">∀</span> <span class="n">i</span> <span class="bp">></span> <span class="mi">0</span><span class="o">,</span> <span class="n">Ext</span> <span class="n">i</span> <span class="o">(</span><span class="n">ℳ_</span><span class="o">{</span><span class="n">p'</span><span class="o">}</span> <span class="n">S</span><span class="o">)</span> <span class="n">V</span> <span class="bp">≅</span> <span class="mi">0</span> <span class="o">:=</span>
<span class="c1">-- the proof ...</span>
</pre>
<p>The code block above, which is taken directly from the file <a href="https://github.com/leanprover-community/lean-liquid/blob/92f188bd17f34dbfefc92a83069577f708851aec/src/challenge.lean"><code>challenge.lean</code></a> in the main <a href="https://github.com/leanprover-community/lean-liquid">LTE repository</a>, uses some custom notation to make the statement appear as close as possible to the main theorem mentioned in
<a href="https://xenaproject.wordpress.com/2020/12/05/liquid-tensor-experiment/">Scholze's original challenge</a>.
Fortunately, it's relatively straightforward to unravel the notation to see the underlying definitions themselves.
But there is a bigger issue: How can we convince ourselves (and others) that the <em>definitions</em> we introduced in LTE are actually <em>correct</em>? </p>
<p>For instance, we could have <em>defined</em> <code>Ext</code> to be $0$ (spoiler: we didn't).
Or, we could have made some subtle innocent mistake in setting up the definitions that somehow <em>implies</em> that <code>Ext</code> is always $0$, or that all condensed abelian groups are trivial, or one of several other pitfalls that renders the statement above meaningless.</p>
<p>To answer this question, we built a new <a href="https://github.com/leanprover-community/lean-liquid/tree/92f188bd17f34dbfefc92a83069577f708851aec/src/examples"><code>examples</code> folder</a> in the repository which contains several files corresponding to the main players in the statement above.
These examples can be considered as centralized "sanity checks" that the definitions we wrote using Lean actually behave as expected.</p>
<p>We tried to write the files in this folder in a way which should be (approximately) readable by mathematicians who have minimal experience with Lean.
The goal is to make it easy for non-experts to look through the examples folder, then look through the concise final statement in <code>challenge.lean</code>, and be reasonably confident that the challenge was accomplished.</p>
<p>This blog post gives a detailed overview of this folder and its contents, and how it relates to the definitions used in the main statement of the <a href="https://github.com/leanprover-community/lean-liquid">liquid tensor experiment</a>.
It is meant to be read <em>alongside</em> the actual files from the <a href="https://github.com/leanprover-community/lean-liquid/tree/92f188bd17f34dbfefc92a83069577f708851aec/src/examples">examples folder</a>.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/lte-examples/">Read more…</a> (29 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/lte-examples/Fri, 14 Oct 2022 17:00:00 GMT
- This month in mathlib (Sep 2022)https://leanprover-community.github.io/blog/posts/month-in-mathlib-sep-2022/Mathlib community<div><p>In September 2022 there were 361 PRs merged into mathlib. We list some of the highlights below.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/month-in-mathlib-sep-2022/">Read more…</a> (1 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/month-in-mathlib-sep-2022/Sat, 08 Oct 2022 04:01:27 GMT
- This month in mathlib (Aug 2022)https://leanprover-community.github.io/blog/posts/month-in-mathlib-aug-2022/Mathlib community<div><p>In August 2022 there were 506 PRs merged into mathlib. We list some of the highlights below.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/month-in-mathlib-aug-2022/">Read more…</a> (1 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/month-in-mathlib-aug-2022/Thu, 01 Sep 2022 04:05:28 GMT
- This month in mathlib (Jul 2022)https://leanprover-community.github.io/blog/posts/month-in-mathlib-jul-2022/Mathlib community<div><p>In July 2022 there were 611 PRs merged into mathlib. We list some of the highlights below.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/month-in-mathlib-jul-2022/">Read more…</a> (2 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/month-in-mathlib-jul-2022/Thu, 11 Aug 2022 05:42:53 GMT
- This month in mathlib (Jun 2022)https://leanprover-community.github.io/blog/posts/month-in-mathlib-jun-2022/Mathlib community<div><p>We apologize for the delay in posting this overview.
In June 2022 there were 460 PRs merged into mathlib. We list some of the highlights below.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/month-in-mathlib-jun-2022/">Read more…</a> (1 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/month-in-mathlib-jun-2022/Thu, 11 Aug 2022 05:42:45 GMT
- Classification of one-dimensional isocrystalshttps://leanprover-community.github.io/blog/posts/classification-of-one-dimensional-isocrystals/Robert Y. Lewis, Heather Macbeth<div><p>Last year, there was a <a href="https://leanprover-community.github.io/blog/posts/semilinear-maps">big mathlib refactor</a> to replace linear maps throughout the library with <em>semilinear maps</em>,
a more abstract concept which, importantly, unifies linear and conjugate-linear maps.</p>
<p>But this is not the full extent of the generalization! Our number theorist friends here in mathlib told us that we should
make sure we chose this full generality of <em>semilinear</em> maps, maps $f:M \to N$ such that $f(ax)=\sigma(a)f(x)$ for some ring homomorphism $\sigma$ between the scalar rings of the modules $M$ and $N$. So we and our coauthor Frédéric Dupuis implemented this full generality, and then asked them for an example to illustrate their need for this more abstract definition. This blog post tells the story of our little adventure in number theory.</p>
<p>It turns out that the standard use of semilinear maps in number theory is for <em>Frobenius-semilinearity</em>, semilinearity with
respect to the ring homomorphism of the fraction field of the $p$-typical Witt vectors over a perfect characteristic-$p$ integral domain which is induced by the Frobenius
automorphism of that domain. Let's backtrack to catch everyone up...</p>
<p><a href="https://leanprover-community.github.io/blog/posts/classification-of-one-dimensional-isocrystals/">Read more…</a> (13 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/classification-of-one-dimensional-isocrystals/Sat, 06 Aug 2022 04:30:08 GMT
- Introducing Mathlib Changeloghttps://leanprover-community.github.io/blog/posts/mathlib-changelog/David Chanin<div><p><img alt="mathlib-changelog sample page" src="https://leanprover-community.github.io/blog/images/changelog_lemma.png"></p>
<p>Tldr; check out <a href="https://mathlib-changelog.org">mathlib-changelog.org</a> to explore the historical changes to mathlib, and find out what happened to that lemma you were using.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/mathlib-changelog/">Read more…</a> (3 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/mathlib-changelog/Thu, 28 Jul 2022 07:35:23 GMT
- Completion of the Liquid Tensor Experimenthttps://leanprover-community.github.io/blog/posts/lte-final/Mathlib community<div><p>We are proud to announce that as of 15:46:13 (EST) on Thursday, July 14 2022 the Liquid Tensor Experiment has been
<a href="https://github.com/leanprover-community/lean-liquid/commits/completed">completed</a>.
A year and a half after the
<a href="https://xenaproject.wordpress.com/2020/12/05/liquid-tensor-experiment/">challenge</a>
was posed by Peter Scholze we have finally formally verified the main theorem of liquid vector spaces using the Lean proof assistant.
The blueprint for the project can be found <a href="https://leanprover-community.github.io/liquid/">here</a> and the formalization itself is available on <a href="https://github.com/leanprover-community/lean-liquid">GitHub</a>.</p>
<p>The first major milestone was
<a href="https://xenaproject.wordpress.com/2021/06/05/half-a-year-of-the-liquid-tensor-experiment-amazing-developments/">announced</a>
in June last year. The achievement was described in
<a href="https://www.nature.com/articles/d41586-021-01627-2">Nature</a>
and
<a href="https://www.quantamagazine.org/lean-computer-program-confirms-peter-scholze-proof-20210728/">Quanta</a>.</p>
<p>For more information about Lean and formalization of mathematics, see the
<a href="https://leanprover-community.github.io/">Lean community website</a>.</p>
<p><a href="https://leanprover-community.github.io/blog/posts/lte-final/">Read more…</a> (2 min remaining to read)</p></div>https://leanprover-community.github.io/blog/posts/lte-final/Fri, 15 Jul 2022 13:00:00 GMT