Skip to content

benchmark leanprover/lean4#13895 adaptation branch#232

Merged
datokrat merged 80 commits into
nightly-testingfrom
lean-pr-testing-13895
Jul 7, 2026
Merged

benchmark leanprover/lean4#13895 adaptation branch#232
datokrat merged 80 commits into
nightly-testingfrom
lean-pr-testing-13895

Conversation

@datokrat

@datokrat datokrat commented Jun 2, 2026

Copy link
Copy Markdown

No description provided.

@datokrat

datokrat commented Jun 2, 2026

Copy link
Copy Markdown
Author

!bench

@leanprover-radar

leanprover-radar commented Jun 2, 2026

Copy link
Copy Markdown

Benchmark results for 19fb046 against 8a9ccb2 are in. There are significant results. @datokrat

  • 🟥 build//instructions: +24.1G (+0.01%)

Large changes (2✅, 1🟥)

  • build/module/Batteries.Data.BinaryHeap.Basic//instructions: -7.4G (-88.79%)
  • build/module/Mathlib.Geometry.Manifold.WhitneyEmbedding//instructions: -14.9G (-41.04%)
  • 🟥 build/module/Mathlib.NumberTheory.NumberField.InfiniteAdeleRing//instructions: +6.1G (+34.81%)

Medium changes (7✅, 5🟥)

  • build/module/Mathlib.Algebra.Category.ModuleCat.Ext.Basic//instructions: -6.5G (-22.55%)
  • build/module/Mathlib.Algebra.Category.ModuleCat.Ext.Finite//instructions: -1.1G (-8.56%)
  • build/module/Mathlib.Analysis.Distribution.SchwartzSpace.Fourier//instructions: -3.5G (-4.61%)
  • build/module/Mathlib.Analysis.InnerProductSpace.l2Space//instructions: -4.8G (-8.66%)
  • build/module/Mathlib.Analysis.Normed.Lp.lpSpace//instructions: -17.1G (-12.23%)
  • build/module/Mathlib.CategoryTheory.Comma.StructuredArrow.Functor//instructions: -4.4G (-13.75%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Mathlib.CategoryTheory.Products.Associator//instructions: +7.7G (+31.11%)
  • 🟥 build/module/Mathlib.LinearAlgebra.RootSystem.GeckConstruction.Relations//instructions: +2.9G (+3.83%)
  • build/module/Mathlib.NumberTheory.NumberField.CMField//instructions: -6.9G (-9.66%)
  • 🟥 build/module/Mathlib.RingTheory.Adjoin.Polynomial.Bivariate//instructions: +2.7G (+15.73%)
  • 🟥 build/module/Mathlib.RingTheory.QuasiFinite.Polynomial//instructions: +5.0G (+16.37%)
  • 🟥 build/module/Mathlib.RingTheory.ZariskisMainTheorem//instructions: +15.9G (+8.27%)

Small changes (31✅, 33🟥)

Too many entries to display here. View the full report on radar instead.

@datokrat

Copy link
Copy Markdown
Author

!radar

@leanprover-radar

leanprover-radar commented Jun 25, 2026

Copy link
Copy Markdown

Benchmark results for e18d7e2 against 1cdfd83 are in. No significant results found. @datokrat

Warning

These warnings may indicate that the benchmark results are not directly comparable, for example due to changes in the runner configuration or hardware.

  • Runner for run main has different system configurations between commits.

No significant changes detected.

@datokrat

Copy link
Copy Markdown
Author

!radar

@leanprover-radar

leanprover-radar commented Jun 25, 2026

Copy link
Copy Markdown

Benchmark results for 666fc21 against 1cdfd83 are in. No significant results found. @datokrat

Warning

These warnings may indicate that the benchmark results are not directly comparable, for example due to changes in the runner configuration or hardware.

  • Runner for run main has different system configurations between commits.

No significant changes detected.

chrisflav and others added 7 commits June 25, 2026 11:32
…nity#41008)

... over a noetherian ring.

Also, over an arbitrary ring, a submodule codisjoint from a fg module is cofg.

This is a prerequisite for Fredholm operators.
…ver-community#38317)

In this PR, I add some lemma about choose of prime pow. 
1) For primes `p` and positive integer `n`, assume that for all `i ∈ Icc 1 (n - 1)`, `choose n i` congruent to `0` module `p`, then `n = p ^ multiplicity p n`.
2) For a prime power `n`, the greatest common divisor of `choose n 1, ⋯, choose n (n - 1)` is actually the minimal prime factor of `n`.
3) For a natural number `n` greater than `1`, assume that `n` is not a prime power, then the greatest common divisor of  `choose n 1, ⋯, choose n (n - 1)` is `1`.

Co-authored-by: WenrongZou <wenrongzou@outlook.com>
… under isomorphisms (leanprover-community#41036)

This is only the translation of this statement in terms of some `ObjectProperty` in functor categories.
@datokrat datokrat force-pushed the lean-pr-testing-13895 branch from 83622cf to 7017dc0 Compare June 25, 2026 13:19
Raph-DG and others added 4 commits June 25, 2026 13:30
…y#37901)

In this PR we define the notion of algebraic cycles on a scheme, and define the pushforward of an algebraic cycle by a quasicompact morhphism. This was originally defined in leanprover-community#26304, but after some refactoring it was decided that it would be best to split this definition into a separate PR.

Co-authored-by: Raph-DG <raphaeldouglasgiles@gmail.com>
…r-community#40976)

Generalize both interval-version Lebesgue differentiation theorems `LocallyIntegrable.ae_hasDerivAt_integral` and
`IntervalIntegrable.ae_hasDerivAt_integral` from real-valued functions `f : ℝ → ℝ` to functions `f : ℝ → E` valued in a Banach space `E`. The existing proof already goes through the vector-valued averaging theorem `VitaliFamily.ae_tendsto_average`, so the only change is replacing scalar multiplication `*` by `•` in the slope computation.


This is a prerequisite for leanprover-community#40973.

AI usage disclosure: I used Claude Opus 4.8 to implement this and manually tested it with the other PR and my other separate project.
…ommunity#40986)

Remove a duplicate lemma and generalize some lemmas to support two different codomains.
@datokrat datokrat force-pushed the lean-pr-testing-13895 branch from 7017dc0 to 385ae40 Compare June 25, 2026 14:39
eric-wieser and others added 9 commits June 25, 2026 14:57
…#40919)

This can in future replace a similar lemma for `RingQuot`.

The old copyright is because this was derived from `Mathlib/Algebra/Star/RingQuot.lean`.
Implement tactic for proving equality of polynomials. 

This tactic is part of a larger suite (see leanprover-community#30374).

Also generalize the preprocessing step for `algebra` so that it always replaces `algebraMap R A r` with `r • 1` instead of only when `R` is `Nat` or `Int`. This was an oversight in `algebra` that broke `polynomial`.

- [x] depends on: leanprover-community#31508
…anprover-community#38667)

- `OrderHom`s are equivalent to `RelHom`s of `LE` (unlike `OrderEmbedding`/`OrderIso` they aren't defined using it)
- Congruence equivs for `OrderEmbedding`/`OrderIso` when the two sides are order-isomorphic. This already exists for `OrderHom`.
…eanprover-community#41041)

These probably became non-`noncomputable` with the new compiler.
smorel394 and others added 28 commits June 26, 2026 12:17
…a quotient preadditive category (leanprover-community#41067)

Prove that, if `F : C ⥤ D` is an additive essentially surjective functor between preadditive categories and `C` has finite products, then `D` also has finite products. Use this to shorten the proof that the localization of an abelian category by a Serre class has finite products (in `CategoryTheory/Abelian/SerreClass/Localization`).

Co-authored-by: morel <sophie.morel@ens-lyon.fr>
…eanprover-community#39625)

Generalize `coeff_trunc_mul_trunc_eq_coeff_mul` (and its analogs for `truncFinset` and `trunc'`) to allow for different truncation levels for the two arguments. This matches the API for univariate power series, where we already have `PowerSeries.coeff_mul_eq_coeff_trunc_mul_trunc₂`.

This is useful for defining partial derivatives of multivariate power series, see PR leanprover-community#39626.

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
…er-community#40170)

A few factorization lemmas, including:
- `∀ n : ℕ`, `n ∣ radical n ^ n`
- `∀ n k : ℕ`, `n ∣ k ^ n ↔ n.primeFactors ⊆ k.primeFactors`
- `∀ n k : ℕ`, `radical n ∣ k ↔ n.primeFactors ⊆ k.primeFactors`
- In any `UniqueFactorizationMonoid M`, `∀ a : M`, `∃ n, a ∣ radical a ^ n`

[#Is there code for X? > A number divides a power of its square-free component](https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/A.20number.20divides.20a.20power.20of.20its.20square-free.20component/with/599339469)
Bumps `actions/checkout` to v7.0.0 across all workflows.

v7 refuses to check out fork-PR code under `pull_request_target`/`workflow_run` unless `allow-unsafe-pr-checkout: true` is set. 

Three steps intentionally check out fork-PR code, and we already defend against the malicious case (no persisted credentials; only trusted, base-built tooling runs against the checkout), so they get the opt-in: 
```  

  ┌────────────────────────────────────────────┬──────────────────────────────────┬─────────────────────────────────────────────────────────┐
  │                    File                    │               Step               │                     Checked-out ref                     │
  ├────────────────────────────────────────────┼──────────────────────────────────┼─────────────────────────────────────────────────────────┤
  │ .github/workflows/add_label_from_diff.yaml │ "Checkout branch to label" (L50) │ ${{ github.event.pull_request.head.sha || github.sha }} │
  ├────────────────────────────────────────────┼──────────────────────────────────┼─────────────────────────────────────────────────────────┤
  │ .github/workflows/PR_summary.yml           │ "Checkout code" (L29)            │ ${{ github.event.pull_request.head.sha }}               │
  ├────────────────────────────────────────────┼──────────────────────────────────┼─────────────────────────────────────────────────────────┤
  │ .github/workflows/decls-diff.yml           │ "Checkout new commit" (L67)      │ ${{ steps.meta.outputs.new-sha }}                       │
  └────────────────────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────────────────────┘
```
…unity#40808)

This is essentially an adapted copy of the API we already have for the Bochner integral
Bumps `actions/checkout` to v7.0.0 across all workflows.

v7 refuses to check out fork-PR code under `pull_request_target` / `workflow_run` unless `allow-unsafe-pr-checkout: true` is set. Five steps intentionally check out fork-PR code in those contexts. Each is already hardened, the fork code is either built inside the landrun sandbox or run with only `contents: read`, while trust-rooted tooling is loaded from the base-repo checkout.

| File | Step | Checked-out ref | Trigger |
|---|---|---|---|
| `.github/actions/setup-build-env/action.yml` | Checkout PR branch | `inputs.pr_branch_ref` | build_fork (`pull_request_target`) |
| `.github/workflows/build_template.yml` | `post_steps` checkout | `inputs.pr_branch_ref` | build_fork (`pull_request_target`) |
| `.github/workflows/PR_summary.yml` | Checkout code | `github.event.pull_request.head.sha` | `pull_request_target` |
| `.github/workflows/add_label_from_diff.yaml` | Checkout branch to label | `github.event.pull_request.head.sha \|\| github.sha` | `pull_request_target` |
| `.github/workflows/decls-diff.yml` | Checkout new commit | `steps.meta.outputs.new-sha` | `workflow_run` |


Reapplies leanprover-community#41055 (reverted in leanprover-community#41078)

leanprover-community#41055 opted in the three workflow-file steps but missed the two on the fork-build path `setup-build-env`'s `Checkout PR branch` (used by the `build` and `test_lint` jobs) and `build_template.yml`'s `post_steps` checkout.
…ced by bilinear forms (leanprover-community#40489)

Given a bilinear form `B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜`, the weak topology on `E` is the coarsest topology
such that for all `y : F` every map `(B · y)` is continuous; equivalently, it is the topology
on `E` induced by the map `(B · · : E → (F → 𝕜))`.

This file defines a `Prop`-valued typeclass `LinearMap.IsWeak` expressing that an existing topology
on `E` is the weak topology. Although this could be passed around explicitly as a hypothesis
`Topology.IsInducing (B · ·)`, given the ubiquity of weak topologies in functional analysis, the
numerous properties that can be deduced because the inducing map `B` is bilinear, the fact that
several theorems (e.g., one version of the bipolar theorem) require this hypothesis, and we can
instantiate this class for several extant types in Mathlib, we choose to make this a typeclass
instead.

Note that establishing `LinearMap.IsWeak` before proving theorems about a particular type can help
prevent abuse of definitional equalities. This because spaces equipped with a weak topology are
frequently type synonyms of some other type `E'`. For example, suppose `E'` is a type (potentially
with some extant topology other than the weak topology) and `B' : E' →ₗ[𝕜] F →ₗ[𝕜] 𝕜` is a
bilinear form. To consider the weak topology on `E'` induced by `B'`, in practice we must create a
type synonym `E` with an instance `TopologicalSpace E := .induced (B' · ·) Pi.topologicalSpace`.
It would then be tempting to create theorems such as:

```lean
example (y : F) : Continuous (fun x : E ↦ B' x y) := sorry
```

However, this statement contains an abuse of the the definitional equality `E := E'` since `x : E`,
but `B'` has domain `E'`. Morever, one might be tempted to say that `B'.IsWeak`, but this is
impossible because the domain of `B'` is `E'`, which is equipped with the incorrect topology.
Instead, what one should do is to first define a new bilinear form `B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜` by
composing `B'` with the linear equivalence between `E` and `E'`, and then establish `B.IsWeak`.
If then one proves theorems about `E` using only the `LinearMap.IsWeak` API, then one can have more
confidence that the statements are type correct.
…er-community#39230)

I wanted to understand why these two proofs in leanprover-community#38807 were long (and also play around more with the API in this corner of the library) so I walked through them with Claude Opus.

prepared with Claude code
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
…ver-community#41058)

Add `RingHom.IsIntegral.kerLift` which proves that the `kerLift` of an integral ring homomorphism is integral.
…prover-community#40212)

Endow the direct sum `ι →₀ X` of `ι`-many copies of a metric space `X` with the L^p metric for any `1 ≤ p < ∞`.

`p = ∞` is theoretically possible too but currently annoying due to defects in our tactics/`WithTop` API. I am leaving it as future work.

[Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/What.20topology.20on.20Finsupp.3F/with/600119738)
…schemes (leanprover-community#39122)

This is a first step (of hopefully many) towards some basic birational geometry. This PR adds `Birational/Birational.lean`, which defines predicates `Birational`, `BirationalOver` and `IsRationalOver` for arbitrary schemes and provides basic API (e.g. that they are equivalence relations, and that affine space is rational).

Some notes on the choice of definitions: There are multiple ways to define what it means for
two schemes to be birational to each other. A common one is: "There exists a
rational map with a rational inverse". However, this would require defining composition of
rational maps, which is not always defined (In order to compose `f : X ⤏ Y` with `g : Y ⤏ Z`, you
need at least `X` preirreducible, `Y` nonempty and `f` dominant). On the other hand, I can define
"There exist dense subsets `U : Opens X` and `V : Opens Y` such that `U ≅ V` as schemes" for
any two schemes `X` and `Y`, with no conditions. Hence I chose that as a definition. I'm also
working on defining composition of rational maps (leanprover-community#39445), and once that's done, there should be a theorem
connecting the two definitions.

- [x] depends on: leanprover-community#39316

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
…#41089)

- actions/attest-build-provenance: v4.1.0 -> v4.1.1
- actions/setup-python: v6.2.0 -> v6.3.0
- softprops/action-gh-release: v3.0.0 -> v3.0.1
- actions/cache: v5.0.5 -> v6.1.0 (ESM migration + read-only cache handling)
- zulip/github-actions-zulip/send-message: v2.0.1 -> v2.0.2
- leanprover-community/privilege-escalation-bridge: v1.2.0 -> v1.3.0
- leanprover-community/gh-problem-matcher-wrap: pin to the node24 build (clears the Node 20 deprecation warning)
- kim-em/github-actions-ensure-sha-pinned-actions: pin to v5.0.0 instead of a feature branch
- dcarbone/install-jq-action: v3.2.0 -> v4.0.1 (default jq -> 1.8.2)

actions/checkout was already bumped to v7.0.0 on master (leanprover-community#41084).
leanprover-community#40933)

This is more concise (and perhaps even more efficient) than converting an existing expression to Syntax and re-elaborating that. No need for this.
Adapt for the removal of batteries' `defLemma` linter (batteries#1863),
which followed lean4#13803 moving the linter into core and renaming it
`defProp`. Mathlib's `@[nolint defLemma]` attributes are now dangling
("linter 'defLemma' not found"), breaking the build on nightly-2026-06-27.

Drop the now-invalid `@[nolint defLemma]` from the 5 affected files.
Manifest keeps nightly-testing's batteries rev (cf0b862c), which already
includes leanprover-community#1863.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@datokrat datokrat merged commit e788db2 into nightly-testing Jul 7, 2026
9 checks passed
@mathlib-bors mathlib-bors Bot deleted the lean-pr-testing-13895 branch July 7, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.