Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1303 commits
Select commit Hold shift + click to select a range
06b6563
feat: add assume tactic (#39026)
fpvandoorn Jul 28, 2026
1908d50
feat(Algebra/Spectrum): add the second resolvent identity (#39269)
godofecht Jul 28, 2026
fb2c2f5
feat: tag lemmas with compactness and closedness (#39371)
fpvandoorn Jul 28, 2026
5b20aff
feat(Algebra/Lie): use `IsApply` for `Weight` (#42129)
mcdoll Jul 28, 2026
b595917
chore(LinearAlgebra/Pi): use `Codisjoint`, `IsCompl` (#42173)
YaelDillies Jul 28, 2026
4660688
feat: Transferring Lie Algebra structures along Equivalences (#39818)
Ljon4ik4 Jul 28, 2026
cdc4a09
perf: golf Ideal.powQuotSuccInclusion_injective (#41701)
kbuzzard Jul 28, 2026
9e47bf7
fix(cache): carry decompression pipeline state across download rounds…
marcelolynch Jul 28, 2026
b56bbad
feat(Tactic/Translate): warn when adding a docstring to an existing d…
gasparattila Jul 28, 2026
c7202db
feat: define Fredholm operators between TVSs (#41189)
ADedecker Jul 28, 2026
01cceef
chore: make `ModelProd` and `ModelPi` implicit_reducible (#42038)
grunweg Jul 28, 2026
0ce898f
feat(RingTheory): bialgebra homs `R[G] → R[H]` are in bijection with …
YaelDillies Jul 28, 2026
5eec30b
perf(LinearAlgebra/Pi): golf `Matrix.ker_diagonal_toLin'` (#42199)
chenson2018 Jul 28, 2026
12ab8e8
feat(Topology/Order/Basic): add `isOpen_Ioo'` (#42114)
NoahW314 Jul 29, 2026
21da9fc
feat: notation for adele rings (#40535)
smmercuri Jul 29, 2026
be4fe8f
fix(LinearAlgebra/Matrix): make accidental private instance public (#…
wwylele Jul 29, 2026
6953887
feat(SetTheory/Cardinal): strong induction on Nat.card for finite typ…
rosborn Jul 29, 2026
e91869b
feat: lemmas about the `smallInductiveDimension` (#40879)
vihdzp Jul 29, 2026
6d8afdb
chore: remove some (triple) underscore soup (#42208)
felixpernegger Jul 29, 2026
7630dcd
chore(AlgebraicTopology/SimplexCategory): delete synthesizable instan…
YaelDillies Jul 29, 2026
53a560f
chore: rename `QuotientAddGroup.mk_out_eq_mul` to `mk_out_eq_add` (#4…
adomani Jul 29, 2026
d160677
chore(Archive): convert to the module system (#42010)
grunweg Jul 29, 2026
e631b64
chore(Combinatorics/SimpleGraph/StronglyRegular): fix statement of `c…
tb65536 Jul 29, 2026
edc39bf
chore(NumberTheory/RamificationInertia/Basic): deprecate file (#41248)
tb65536 Jul 29, 2026
3edb3c0
feat(Algebra/GroupWithZero/WithZero): `toAdd_unzero_eq_log` and simpl…
fbarroero Jul 29, 2026
077102e
feat(LinearAlgebra/Dimension/Free): isomorphic to base ring iff rank …
artie2000 Jul 29, 2026
af3493f
feat(MeasureTheory): prove regular measures have conull support (#41473)
CoolRmal Jul 29, 2026
3069656
feat: `haveI`/`letI` tactic linter (#41657)
JovanGerb Jul 29, 2026
8f845ad
chore: update Mathlib dependencies 2026-07-29 (#42259)
mathlib-update-dependencies[bot] Jul 29, 2026
80a3b5d
chore: address comments from #42114 (#42257)
NoahW314 Jul 29, 2026
ad7bd8f
chore(Analysis/Convex/Continuous): fix proof wanted (#42234)
tb65536 Jul 29, 2026
481daa6
feat(RingTheory/Algebraic): tower law for Module.finrank over domains…
xroblot Jul 30, 2026
dc4762c
Merge master and drop to_dual dependency
CoolRmal Jul 30, 2026
ccedd50
chore(CategoryTheory/Monoidal/Cartesian/Over): remove most backward o…
JovanGerb Jul 30, 2026
60af718
fix: increase priority of show elaboration (#42264)
chenson2018 Jul 30, 2026
2b4f1fd
feat: generalize `range_lt_top_of_det_eq_zero` (#42055)
yuanyi-350 Jul 30, 2026
e4c9178
chore: use `=ᵐ[μ]` notation more (#42263)
felixpernegger Jul 30, 2026
ccb5ed4
chore: change docstrings when they should be docComments (#42269)
felixpernegger Jul 30, 2026
62f3add
chore: golf using fun_prop (#40019)
grunweg Jul 30, 2026
3b3cdbb
feat(LinearAlgebra/Matrix): add definitions and theory for the echelo…
raoxiaojia Jul 30, 2026
190aaa2
doc(Algebra/Category/Grp): fix after renaming of categories (#42287)
alreadydone Jul 30, 2026
2705f82
chore(Util/CountHeartbeats): deprecate the global `#count_heartbeats`…
JovanGerb Jul 30, 2026
f60ac0e
feat: add lemmas about products over Finset.Iio (#39078)
fpvandoorn Jul 31, 2026
0f0a217
chore(CategoryTheory): remove `backward` options using `implicit_redu…
JovanGerb Jul 31, 2026
ca6d69c
feat(Algebra/QuadraticAlgebra): add the trace (#42207)
xroblot Jul 31, 2026
d1906c8
chore(Translate/ToDual): remove redundant entry from `abbreviationDic…
JovanGerb Jul 31, 2026
b2933a1
chore(Analysis/Seminorm): generalize typeclasses slightly (#42300)
mcdoll Jul 31, 2026
6ecc792
chore(GroupTheory): fix non-terminal simp (#42302)
yuanyi-350 Jul 31, 2026
232b5fd
fix(Translate): support structures where a universe level doesn't app…
JovanGerb Jul 31, 2026
45e3065
perf(AlgebraicGeometry/Group/Affine): specify the universe explicitly…
JovanGerb Jul 31, 2026
6a58949
feat(RepresentationTheory): add a surjectivity lemma for irreducible …
JX-Mo Jul 31, 2026
a366f87
perf(MeasureTheory/Integral/IntervalIntegral/Periodic): explicit proo…
FawadHa1der Jul 31, 2026
ff4f94a
feat (Linter/Header): add config for custom copyright (#41876)
oliver-butterley Jul 31, 2026
d222514
chore(FGModuleCat/EssentiallySmall): generalize to `Ring` (#42006)
ybenmeur Jul 31, 2026
ce88332
feat(LinearAlgebra): use `IsApply` for `QuadraticMap` (#42134)
mcdoll Jul 31, 2026
f4570dc
chore(RingTheory/*): remove domain assumptions by generalizing from t…
tb65536 Jul 31, 2026
1f8806b
fix: adaptations for batteries #1927 (#42229)
wrenna-robson Jul 31, 2026
d890856
chore: extract `Finset.monotone_sup` and `BddAbove.range_finsetSup`
CoolRmal Aug 1, 2026
cf556b8
address comments
CoolRmal Aug 1, 2026
7768e06
complete API
CoolRmal Aug 1, 2026
a0eb2b1
minor
CoolRmal Aug 1, 2026
932a58b
chore: update Mathlib dependencies 2026-08-01 (#42268)
mathlib-update-dependencies[bot] Aug 1, 2026
40cb31b
feat(LinearAlgebra/Dimension/Free): division version of tower law (#4…
artie2000 Aug 1, 2026
62244e5
feat(Algebra/Homology): homotopy equivalences satisfy the two out of …
joelriou Aug 1, 2026
32beea3
feat(Algebra/DirectSum): equivalence between direct sum indexed by ι₁…
TentativeConvert Aug 1, 2026
2943554
chore({Archive,Counterexamples}): add missing `noncomputable` (#42170)
YaelDillies Aug 1, 2026
f4f85c2
chore: fix various typos (#42232)
felixpernegger Aug 1, 2026
d5c40f0
feat(MeasureTheory): pushforward of Hausdorff measure under a homothe…
FrankieNC Aug 1, 2026
cb48454
chore(RingTheory/Valuation/Basic): remove all `set_option`s in this f…
Whysoserioushah Aug 1, 2026
0419afc
chore(Combinatorics/SimpleGraph/Operations): golf `edge` lemmas (#41873)
SnirBroshi Aug 1, 2026
54df8a3
chore: update Mathlib dependencies 2026-08-01 (#42347)
mathlib-update-dependencies[bot] Aug 1, 2026
18f56be
feat(Analysis/CStarAlgebra/Basic): `star (ball x r) = ball (star x) r…
themathqueen Aug 2, 2026
ae0d973
feat(CategoryTheory): initial object implies corepresentable (#41994)
emilyriehl Aug 2, 2026
e75dd84
chore(CategoryTheory/Limits/HasLimit): use `to_dual` (#41017)
JovanGerb Aug 2, 2026
375d54d
feat(MeasureTheory): generalize rpow·exp and scalar-multiplication in…
dennj Aug 2, 2026
68302e4
feat(Combinatorics/SimpleGraph/Acyclic): a nontrivial finite tree has…
SnirBroshi Aug 2, 2026
9c0c555
feat(NumberTheory): use `IsApply` for `ModularForm` etc (#41561)
mcdoll Aug 3, 2026
c10d9bc
chore: rename `FiniteMultiplicity.not_unit` to `FiniteMultiplicity.no…
NoahW314 Aug 3, 2026
64e0afd
doc(Topology): fix typo in weak space docstring (#42379)
felixpernegger Aug 3, 2026
c003275
chore: rename `Prime.not_unit` to `Prime.not_isUnit` (#42385)
NoahW314 Aug 3, 2026
5333127
chore: rename a lemma containing `not_unit` (#42387)
NoahW314 Aug 3, 2026
d586c71
chore: rename `IsPrimePow.not_unit` to `IsPrimePow.not_isUnit` (#42389)
NoahW314 Aug 3, 2026
49c3708
chore: remove unused `have`/`let` (#42395)
JovanGerb Aug 3, 2026
e76b996
feat(Counterexamples): a finite free group scheme of order four not k…
j2d9w5xtjn-png Aug 3, 2026
8d2ab69
refactor(RingTheory/DedekindDomain): make `IsDedekindDomainInv` priva…
plp127 Aug 3, 2026
9359494
feat(Topology/Semicontinuity/Hemicontinuity): sequential characteriza…
khwilson Aug 3, 2026
51e6992
chore: bump toolchain to v4.33.0-rc2 (#42401)
Garmelon Aug 3, 2026
8cbb95e
chore: update Mathlib dependencies 2026-08-03 (#42403)
mathlib-update-dependencies[bot] Aug 3, 2026
a89f323
feat(Topology/InfiniteSum): non-negativity of tprod (#42184)
wwylele Aug 3, 2026
17d24e4
refactor(Algebra/Module/Equiv): update name and refactor API ofLinear…
TJHeeringa Aug 3, 2026
0232cac
feat(Topology/Connected): local (path-)connectedness of products and …
korbonits Aug 3, 2026
899f7e5
feat(Topology/Algebra/Module/Spaces/ContinuousLinearMap): convert `to…
mpacholski Aug 3, 2026
9fb1099
feat(Topology/Order): the bornology of an unbounded order is non-triv…
YaelDillies Aug 3, 2026
1c3257b
chore(Topology): state Heine–Borel theorem for metric spaces (#42241)
yuanyi-350 Aug 4, 2026
a4b0064
feat(Analysis): open half planes are open (#42325)
felixpernegger Aug 4, 2026
ce53346
chore(RingTheory/IsGaloisGroup/Basic): automated extraction from #424…
mathlib-splicebot[bot] Aug 4, 2026
98d2c1d
feat(SimpleGraph/Walk/Operations): more operations API (#41460)
SnirBroshi Aug 4, 2026
881e56c
chore: golf some proofs with `grw` (#42440)
JovanGerb Aug 4, 2026
9fbe925
feat: multiplication by a regular function in D^n_{K} as CLM (bilinea…
luigi-massacci Aug 4, 2026
a6180e1
chore(Counterexamples/DirectSumIsInternal): automated extraction from…
mathlib-splicebot[bot] Aug 4, 2026
4d6f989
feat(Topology/Algebra): add ContinuousLinearMap.fromCompletion (#40151)
TJHeeringa Aug 4, 2026
9506892
chore(Data/List/ModifyLast): remove `import all` (#42458)
thorimur Aug 4, 2026
b2418b0
chore(Data/List/Sort): remove `import all` (#42459)
thorimur Aug 4, 2026
2eecc3c
chore(Algebra/Module/Equiv/Basic): fix lemma name (#42441)
themathqueen Aug 5, 2026
060b244
feat(RingTheory/Algebraic): add natDenominator API (#39872)
mkaratarakis Aug 5, 2026
8a92a13
feat: characterize mermorphic functions with finite set of poles in t…
kebekus Aug 5, 2026
503b1a2
feat: companion lemmas to `MeromorphicOn.exists_ecanonicalDecomp`, AP…
kebekus Aug 5, 2026
20a3b03
feat(GroupTheory/Generators): define a group generators as a structur…
homeowmorphism Aug 5, 2026
60a586d
feat: add `orbitRel.Quotient.quotient_smul_eq` and `Homeomorph.smul_s…
pepamontero Aug 5, 2026
be0a82e
feat(Algebra/Field): `MulEquiv.isField_congr` (#42334)
plp127 Aug 5, 2026
89e65db
chore: deduplicate theorem `Polynomial.not_isField` (#42337)
plp127 Aug 5, 2026
550612a
refactor(Geometry/Manifold/Instances/Sphere): use mvfderiv when appro…
grunweg Aug 5, 2026
3dd956a
feat: translation invariance of meromorphicity (#40533)
kebekus Aug 5, 2026
c22d636
feat(Analysis/InnerProductSpace/Adjoint): characterize least-squares …
bocowgill Aug 5, 2026
a7a52d7
chore(Data/List/Lookmap): remove `import all` (#42454)
thorimur Aug 5, 2026
6a36f7f
feat(Topology/Sets): local connectedness of `(Nonempty)Compacts` (#34…
gasparattila Aug 5, 2026
6dba182
feat(Algebra/Polynomial/Degree): add variation of `degree_sub_lt` (#4…
artie2000 Aug 5, 2026
b2e1dc0
feat: restriction lemmas for `OpenPartialHomeomorph.EqOnSource` (#42436)
pepamontero Aug 5, 2026
4a8fe96
feat: multiplying by an almost-everywhere invertible scalar function …
mathlib-splicebot[bot] Aug 5, 2026
68b2582
chore(MeasureTheory/Group): remove an erw (#40405)
felixpernegger Aug 5, 2026
e0c964f
feat(Data/Nat/Choose/Multinomial): add positivity support (#40468)
BoltonBailey Aug 5, 2026
9722f1e
chore(Dynamics): fix defs with underscore (#42074)
felixpernegger Aug 5, 2026
ab2f81c
feat(Data/Real/ConjExponents): add toReal_of_ne_top (#42260)
lakesare Aug 5, 2026
e8d3e7a
chore(Imo/Imo1986Q6): small golf (#42361)
vihdzp Aug 5, 2026
8be9d51
chore: generalize `NoZeroDivisors` to `IsReduced` when possible (#42417)
NoahW314 Aug 5, 2026
99458cf
chore(RingTheory/Ideal/Operations): deprecate duplicate theorem (#42420)
NoahW314 Aug 5, 2026
77dbaac
feat: tag circle integrability as fun_prop (#41225)
kebekus Aug 6, 2026
7492625
chore(Analysis/Seminorm): generalize various lemmas (#42280)
mcdoll Aug 6, 2026
73b7332
feat(Algebra/Order/Floor/Ring): `positivity` for `Int.fract` (#41877)
BoltonBailey Aug 6, 2026
8b3ded7
chore(FieldTheory): fix defs with underscores (#42073)
felixpernegger Aug 6, 2026
e900b02
chore: deprecate apply_eq_iff_eq_symm_apply (#42094)
TJHeeringa Aug 6, 2026
f6dc05e
chore(Topology/UniformSpace): rename `complete_univ` to `isComplete_u…
plp127 Aug 6, 2026
6064d46
feat(Data/Nat/ModEq): add a new congruence to divisibility lemma (#42…
mortarsanjaya Aug 6, 2026
df0e56f
chore(Analysis/Seminorm): generalize `smul_le_smul` to arbitrary scal…
mcdoll Aug 6, 2026
7bd8067
chore(Order/Bounds/Basic): use `to_dual` more (#42362)
vihdzp Aug 6, 2026
0e98674
chore: golf `exists_wellFoundedGT` (#42368)
vihdzp Aug 6, 2026
bf6473c
chore: rename some lemmas containing `not_unit` (#42386)
NoahW314 Aug 6, 2026
944508a
chore: golf `IsSupClosedCompact.wellFoundedGT` (#42422)
vihdzp Aug 6, 2026
640b054
chore(Algebra/Group/Action/Opposite): fix copy-paste error in +ᵥ> doc…
kbuzzard Aug 6, 2026
f4a20a0
feat: `Nat.add_div_le_div_add_div_add_one` (#42481)
plp127 Aug 6, 2026
7a1f843
chore: update Mathlib dependencies 2026-08-06 (#42484)
mathlib-update-dependencies[bot] Aug 6, 2026
ce1cc64
chore(CI): keep the previous Lean declarations diff visible while a n…
adomani Aug 6, 2026
b7ca352
chore: add missing `to_additive` docstrings (Normed, TransferInstance…
adomani Aug 6, 2026
046187e
feat(Analysis): the inverse fourier transform from L1 to BCF (#42427)
mcdoll Aug 6, 2026
92f8669
feat: API for logarithmic derivatives of meromorphic functions (#41684)
kebekus Aug 6, 2026
e506e46
perf(SimpleGraph/Walk/Operations): avoid costly `grind` in `drop_drop…
SnirBroshi Aug 6, 2026
5c48396
feat: composition lemmas about `mvfderiv` and `mvfderivWithin` (#42478)
scholzhannah Aug 6, 2026
1aa85df
doc: update docstring in Cartan.lean (#42486)
kebekus Aug 6, 2026
3c2d12d
chore(NumberTheory/Ostrowski): simplify and golf proofs (#42183)
fbarroero Aug 6, 2026
5edf93c
chore(RingTheory): fix left/right convention on `Ideal.mul_le_{left,r…
NoahW314 Aug 6, 2026
1f0fbd1
chore: use uniqueDiffOn_uIcc at existing call sites (#41576)
kim-em Aug 6, 2026
639a424
feat(Topology/Connected): connected and path components of products a…
korbonits Aug 7, 2026
62f22e6
feat: add Mathlib.NumberTheory.NumberField.DirichletDensity (#41765)
riccardobrasca Aug 7, 2026
39122a6
feat(Complex): generalize harmonic mean value properties to Banach-va…
yuanyi-350 Aug 7, 2026
fcdfe22
chore: add missing `to_additive` docstrings in MeasureTheory.Group (#…
adomani Aug 7, 2026
daa38bd
chore: add missing `to_additive` docstrings in Combinatorics and Dyna…
adomani Aug 7, 2026
4dfbeb6
feat: add_group tactic (#37067)
kbuzzard Aug 7, 2026
38c06cd
chore: make arguments explicit in `nonempty_of_nonempty_constants` (#…
plp127 Aug 7, 2026
50a1a36
feat(LinearAlgebra/Matrix): add echelon form decomposition certificat…
raoxiaojia Aug 7, 2026
ac10dc7
feat(Tactic/Linter/UnusedTactic): also lint inside `conv =>` (#42416)
JovanGerb Aug 7, 2026
87adeae
chore: namespace `CategoryTheory.isoMk` to `CategoryTheory.WideSubcat…
robin-carlier Aug 7, 2026
641fbd3
feat(Logic/Function/Defs): add `Function.diag` (#41082)
wrenna-robson Aug 8, 2026
e13dd60
chore: reduce `import all` (#41389)
felixpernegger Aug 8, 2026
6399233
feat(Mathlib/RingTheory/Ideal/Cotangent): dimension of cotangent spac…
sun123zxy Aug 9, 2026
6d605ae
doc(CategoryTheory): fix three typos (#42409)
alreadydone Aug 9, 2026
239cf0d
feat(Analysis): the generalized hypergeometric function (#41980)
mcdoll Aug 10, 2026
985d970
chore(Order/Filter/IsBounded): use `to_dual` (#37751)
JovanGerb Aug 10, 2026
1f5dc56
feat(AlgebraicTopology/SimplicialSet): more API for `SSet.op` (#38664)
joelriou Aug 10, 2026
d390e9b
chore(Order/Bounds/Basic): add missing `to_dual` tags (#40040)
JovanGerb Aug 10, 2026
06db9b2
chore(CategoryTheory/Functor/EpiMono): use `to_dual` (#41015)
JovanGerb Aug 10, 2026
f51bdaa
doc: add wikidata attributes (#41139)
Deicyde Aug 10, 2026
2b34bbd
chore(order/ConditionallyCompleteLattice): use `to_dual` more (#41558)
JovanGerb Aug 10, 2026
f744229
chore(Data/List/MinMax): use `to_dual` (#41559)
JovanGerb Aug 10, 2026
035c18d
feat(Order/Fin): conditions for `Fin.insertNth` to be monotone or str…
joelriou Aug 10, 2026
5ff6049
chore(Order/SymmDiff): use `to_dual` (#41775)
JovanGerb Aug 10, 2026
b8d43c4
chore(Order/CompleteBooleanAlgebra): use `to_dual` (#41792)
JovanGerb Aug 10, 2026
6cf2673
feat(FieldTheory): typeclass for field extension with finite transcen…
plp127 Aug 10, 2026
7089d52
feat: principal ideal is maximal iff generator is irreducible (#42332)
plp127 Aug 10, 2026
3cf9c0a
chore(GroupTheory/Complement): deduplicate IsComplement.card_mul (#42…
attilavjda Aug 10, 2026
3ef2c2e
chore(WhatsNew): rename `whatsnew` to `#whats_new` (#42537)
JovanGerb Aug 10, 2026
db584cd
chore: bump toolchain to v4.33.0 (#42604)
Garmelon Aug 10, 2026
5d2a6a3
chore: remove `IsDedekindDomainDvr` (#42367)
plp127 Aug 10, 2026
5b210d5
chore(deps): bump the actions-version-updates group across 1 director…
dependabot[bot] Aug 10, 2026
5e5cca6
chore: update Mathlib dependencies 2026-08-10 (#42609)
mathlib-update-dependencies[bot] Aug 10, 2026
d1e20d7
fix(CategoryTheory/Limits/VanKampen): backport fix for lean#8883 (#41…
JovanGerb Aug 10, 2026
f46a87e
chore(Algebra/Order): bound on `|n / m|ₘ` and `|n - m|` (#37232)
mathlib-splicebot[bot] Aug 10, 2026
b0f8796
feat(Data/ENNReal): add `sum_div` (#40855)
NoahW314 Aug 10, 2026
bcbf492
chore(Algebra/Group/WithOne): remove stale TODO (#40904)
jiangf13 Aug 10, 2026
cfcc135
doc: add theorem 8 (straightedge-and-compass construction) to 100.yam…
wwylele Aug 10, 2026
c8f7cbf
refactor: making trans usage explicit with kerLift (#42266)
menon-codes Aug 10, 2026
1c6e941
chore(CategoryTheory): `implicit_reducible` for compositions of natur…
joelriou Aug 10, 2026
f7699dd
chore(CategoryTheory): composition implicit reducible in `Type` (#42529)
joelriou Aug 10, 2026
06c2798
feat(Probability): expectation of a binomial random variable (#40613)
LLaurance Aug 10, 2026
d19d9a5
feat(RingTheory/HopfAlgebra): antipode is the unique convolution inve…
karlesmarin Aug 10, 2026
425ea60
feat(Order/ConditionallyCompleteLattice/Finset): add `sup_eq_ciSup` (…
lakesare Aug 10, 2026
06b00bf
feat(Analysis/Normed/Affine): mapping dist with homothety (#41910)
wwylele Aug 10, 2026
e662f41
chore(Geometry/Manifold): avoid some underscore soup (#42205)
grunweg Aug 10, 2026
4171fb4
chore: tweak API for modelWithCornersEuclideanHalfSpace (#42281)
grunweg Aug 10, 2026
8a6925d
feat(Kernel/Deterministic): any deterministic kernel is s-finite (#42…
gaetanserre Aug 10, 2026
3f69b1b
chore(Data/Finset/Prod): state `singleton_product`/`product_singleton…
FrankieNC Aug 10, 2026
4f8e21b
feat(LocalRing): trivial generalization of RingEquiv.isLocalRing to n…
vlad902 Aug 10, 2026
f51789c
chore(Geometry/Manifold/Notation): avoid more superfluous work in cus…
grunweg Aug 10, 2026
4a3cbc9
chore(Algebra/BigOperators): generate sum_Ico_reflect/sum_range_refle…
attilavjda Aug 10, 2026
64f19e7
feat(GRewrite): support strict rewriting in `>`/`≥` (#41503)
JovanGerb Aug 10, 2026
6bb0d81
ci: retire legacy zulip emoji workflows, enable emojis on mathlib4-ni…
bryangingechen Aug 10, 2026
5c9bdae
refactor(simps): centralize notation_class and initialize_simps_proje…
fpvandoorn Aug 10, 2026
c92631b
feat(Matrix/Order): `OrderClosedTopology` instance for square `RCLike…
gaetanserre Aug 10, 2026
bf0fb2b
chore: add missing `to_additive` docstrings in GroupTheory (#41641)
adomani Aug 10, 2026
42e9cfa
feat(AlgebraicTopology): order relation between simplices of the nerv…
joelriou Aug 10, 2026
fc1ac65
feat: a base for the root system of a Lie algebra can be promoted to …
ocfnash Aug 10, 2026
d0048cc
chore(Tactic/Module): remove backward.isDefEq.respectTransparency (#4…
paulcadman Aug 10, 2026
55b2677
chore(AlgebraicTopology/MooreComplex): tidy docs (#42595)
harahu Aug 10, 2026
b9c7872
feat(Algebra/Module/Submodule/Pointwise): `u • N = N` if `u` is a uni…
mbkybky Aug 10, 2026
c3a9a08
doc(Algebra/Module/ZLattice/Basic): fix `ZLattice.comap` docstring (#…
tb65536 Aug 10, 2026
6f1ef4e
feat: generalize transfer instance type class assumptions (#42291)
JovanGerb Aug 10, 2026
de5ce8a
chore: bump toolchain to v4.34.0-rc1 (#42619)
Garmelon Aug 11, 2026
2918a25
chore: add `shake: keep` to imports that `shake --fix` wrongly drops …
bryangingechen Aug 11, 2026
70756d9
chore: remove more backward options that are blocking `scripts/rm_set…
JovanGerb Aug 11, 2026
4302786
feat(CategoryTheory/Bicategory): a retract of an equivalence is an eq…
joelriou Aug 11, 2026
e76467f
feat: add new `Wanted` directory for proof_wanted. (#42284)
kbuzzard Aug 11, 2026
03e4536
feat(Algebra/Homology): homotopy equivalences in degreewise split sho…
joelriou Aug 11, 2026
4c940b7
feat(Analysis/Complex/IsIntegral): `I` is integral over any `CommRing…
SnirBroshi Aug 11, 2026
f31bcf0
feat(Order/JordanHolder): `IsWeakLowerModularLattice` is sufficient f…
SnirBroshi Aug 11, 2026
8ed593e
feat(RingTheory/Nilpotents): basic MulOpposite lemmas for `IsNilpoten…
vlad902 Aug 11, 2026
6fe456b
fix: typo in simps error messages (#41984)
fpvandoorn Aug 11, 2026
20a890a
feat(Probability/Kernel/Composition): kernel Radon-Nikodym derivative…
stevenliuyi Aug 11, 2026
d0eb262
chore: fix all instances of `linter.defProp` (#42463)
vihdzp Aug 11, 2026
c7d0029
feat(CategoryTheory): more API for `IsoCat` (#42526)
joelriou Aug 11, 2026
52ee81c
chore: delete deprecated declarations/modules from January 2026 (#42075)
Parcly-Taxel Aug 11, 2026
bbf307a
feat: define `PositiveContinuousLinearMap` (#42202)
j-loreaux Aug 11, 2026
4a9d59a
feat(Geometry/Convex/Cone/Pointed): face lattice of pointed cones (#3…
ooovi Aug 11, 2026
53144a6
feat: the variation of a Stieltjes vector measure (#41154)
sgouezel Aug 11, 2026
9aa5504
chore(CategoryTheory/Adjunction/AdjointFunctorTheorems): generalize u…
joelriou Aug 11, 2026
5d488cb
refactor: reorganize Topology/EMetricSpace/Defs to generalise basic r…
felixpernegger Aug 11, 2026
c8155c7
feat(AlgebraicTopology/SimplicialSet/Homology): extension of scalars …
joelriou Aug 11, 2026
2c9f4d7
feat(CategoryTheory): (co)kernels in functor categories/homological c…
joelriou Aug 11, 2026
5e3076d
feat(Geometry/Convex): a topology on StdSimplex (#42131)
joelriou Aug 11, 2026
4e9f33f
chore: improve `Set` / `Finset` congruence API (#42640)
ocfnash Aug 11, 2026
abea25c
chore: update Mathlib dependencies 2026-08-11 (#42651)
mathlib-update-dependencies[bot] Aug 11, 2026
ac47869
chore(Algebra/Homology): make `HomologicalComplex.eval` `implicit_red…
joelriou Aug 11, 2026
f5809ef
chore(Algebra/Order/GroupWithZero/Canonical): remove unnecessary type…
NoahW314 Aug 11, 2026
f01aa34
chore: remove unused open declarations (#42235)
marcelolynch Aug 11, 2026
f4fd7f7
feat: composition of Fredholm operators (#41601)
ADedecker Aug 11, 2026
54c99e1
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
884781f
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
ae17a3a
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
50cb440
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
21f9b23
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
78b6c01
Update Mathlib/Topology/Order/MonotoneConvergence.lean
CoolRmal Aug 11, 2026
661c14d
Merge branch 'master' into codex/tendsto-finset-sup-isup
CoolRmal Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
8 changes: 8 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# 2024-05-20 replace `refine'` with one underscore by `refine` (#13059)
7493b5f81b4c031b87877c5c124bea1ddc4e567d
# 2024-05-24 replace many `refine'` with `refine` (#13166)
fc48848e4374f13c796a7399bfccd2e228f776df
# 2025-11-19 move Mathlib to the module system (#31786)
6a54a80825b060ab20dc31751ebdce78b3a3b518
# 2025-12-01 fix spelling in doc-strings (#32286)
b728e1450a53133aa4171eeadc0bc8d3ee58415c
202 changes: 202 additions & 0 deletions .github/actions/cache-trust-dispatch/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
# Single source of truth mapping (repo, ref) → (upload container,
# read fallback chain) for Mathlib's multi-container cache.
#
# Called by build, upload_cache, and post_steps in build_template.yml so
# trust classification is decided in exactly one place. Lean-side cache
# logic stays branch-agnostic; this composite is the seam where CI-only
# trust policy lives.

name: Cache trust dispatch
description: Compute the cache container target and read fallback for this job.

inputs:
repo:
description: GitHub repo full name (`owner/name`).
required: true
branch:
description: |
Branch name (`github.head_ref || github.ref_name`); on tag-triggered
runs this is the tag name, distinguished via `github.ref_type` inside
the dispatch step.
required: true
head-sha:
description: |
Head commit SHA for the ref being built. Used as the per-commit cache
namespace (`MATHLIB_CACHE_REPO_SCOPE`) for fork-trust uploads, so a
closed/hidden PR's poisoned artifacts cannot be served to a later
honest PR from the same fork.
required: true

# Outputs are mirrored to $GITHUB_ENV inside the step, which is what
# downstream `cache get` / `cache put-staged` calls actually read. We
# also expose them as action outputs for callers that need them in
# `with:` blocks (e.g. constructing further `if:` conditions).
outputs:
primary:
description: Container name for uploads (master, forks, nightly-testing, pr-toolchain-tests).
value: ${{ steps.dispatch.outputs.primary }}
read-chain:
description: |
Comma-separated read fallback chain for `MATHLIB_CACHE_FROM`. Empty
when the job should use the cache tool's repo-level default.
value: ${{ steps.dispatch.outputs.read-chain }}
repo-scope:
description: |
Per-commit namespace suffix for `MATHLIB_CACHE_REPO_SCOPE`. Set to
the head SHA when uploading to fork-trust containers; empty for
master / nightly / pr-toolchain-tests uploads where scoping isn't
applied.
value: ${{ steps.dispatch.outputs.repo-scope }}

runs:
using: composite
steps:
- name: Compute trust dispatch
id: dispatch
shell: bash
run: |
REPO="${{ inputs.repo }}"
BRANCH="${{ inputs.branch }}"
HEAD_SHA="${{ inputs.head-sha }}"
# Whether `branch` names a branch or a tag. Read from the run context
# rather than an input: unlike `repo`/`branch`, the value does not
# depend on which event shape (PR vs push) the caller handles.
REF_TYPE="${{ github.ref_type }}"
PRIMARY=""
READ_CHAIN=""
REPO_SCOPE=""

# Security note: this dispatch is NOT the trust boundary for writes.
# The real enforcement is the OIDC bearer token minted in upload_cache:
# the token is scoped to a specific container, so a malicious actor
# rewriting this case to `--container=master` from a fork build would
# be 403'd by Azure regardless. The dispatch exists so the workflow
# does the right thing in the honest case; defence in depth is RBAC.

# Privileged containers (master, nightly-testing, pr-toolchain-tests) are
# writable only by a repo's own native CI, whose OIDC token is RBAC-scoped
# to match. A cross-repo pull request is built by build_fork.yml with
# fork-trust credentials whatever repo the PR head lives on (e.g. a `bump/*`
# branch on the mathlib4-nightly-testing fork), so it can only write
# `forks`. `GITHUB_REPOSITORY` is the repo the workflow runs as (the base
# repo for `pull_request_target`), i.e. the one whose credentials this job
# holds; when it differs from `$REPO`, the build is a fork and targets
# `forks` regardless of the head repo's own trust class.
if [ "$REPO" != "$GITHUB_REPOSITORY" ]; then
PRIMARY="forks"
else
case "$REPO" in
"leanprover-community/mathlib4")
if [ "$REF_TYPE" = "tag" ]; then
case "$BRANCH" in
v4.*)
# `v4.*` release tags: release_cache.yml rebuilds off-master
# release commits (patch releases, patched release
# candidates) and publishes them into `master`, the container
# canonical checkouts read. Tag creation is restricted to
# release managers by a tag ruleset, and the
# `cache-upload-master` environment admits `v4.*` tag refs,
# so these builds carry master trust. Reads are `master`-only
# for the same fill-in reason as the master/staging arm
# below.
PRIMARY="master"
READ_CHAIN="master"
;;
*)
# Other tags have no trust class of their own:
# fork-equivalent, like the dev-branch arm below.
PRIMARY="forks"
READ_CHAIN="master,forks,legacy"
;;
esac
else
case "$BRANCH" in
"master"|"staging")
# Master, staging, and `v4.*` release tags (above) are the
# only writers that feed `master` (`staging` is bors's merge
# candidate, which fast-forwards to `master`). Read `master`
# only, not the default [master, legacy]: files the read
# chain serves are skipped at stage time, so keeping `legacy`
# would leave legacy-only files out of `master` for good.
# Reading `master` alone turns them into misses that get
# rebuilt and uploaded, so `master` fills itself into a
# standalone cache. (Only PRIMARY=master does this; other
# runs write to `forks` and keep the wider chain.)
PRIMARY="master"
READ_CHAIN="master"
;;
*)
# `bors trying`, `ci-dev/*`, maintainer dev branches on the
# canonical repo: trust level is fork-equivalent (the OIDC
# token's RBAC scopes them to `forks`). Reads must widen
# past the default [master, legacy] so the post-build
# verification finds the just-uploaded fork-trust artifacts.
PRIMARY="forks"
READ_CHAIN="master,forks,legacy"
;;
esac
fi
;;
"leanprover-community/mathlib4-nightly-testing")
case "$BRANCH" in
"nightly-testing"|"nightly-testing-green"|"staging"|bump/*)
# Trusted nightly refs use the default [nightly-testing, legacy].
# It excludes `pr-toolchain-tests` so an upload from a
# `lean-pr-testing-*` branch never reaches a trusted-nightly
# consumer.
PRIMARY="nightly-testing"
;;
*)
# `lean-pr-testing-*`, `batteries-pr-testing-*`, etc.:
# least-trusted (can build with arbitrary toolchains). Widen
# reads to recover this branch's own previously-uploaded
# artifacts; trusted-nightly stays preferred where hash
# spaces happen to align.
PRIMARY="pr-toolchain-tests"
READ_CHAIN="pr-toolchain-tests,nightly-testing,legacy"
;;
esac
;;
*)
# Foreign fork. The cache tool's default chain for a fork repo
# is [master, forks, legacy] (master-first): master supplies the
# bulk of unchanged upstream deps, forks supplies PR-specific
# files. No widening needed, so MATHLIB_CACHE_FROM stays unset.
PRIMARY="forks"
;;
esac
fi

# Per-commit cache namespace, only for fork-trust uploads. Closes the
# within-fork temporal replay attack: each commit's CI run gets its
# own /f/{repo}/{sha}/... namespace, so artifacts from a closed/
# hidden PR cannot be served to a later honest build on the same
# fork. Master / nightly / pr-toolchain-tests uploads stay un-scoped:
# master has a single writer (no replay risk), and the per-toolchain
# hash partitioning isolates nightly and toolchain-test classes via
# their root-hash inputs.
if [ "$PRIMARY" = "forks" ]; then
REPO_SCOPE="$HEAD_SHA"
fi

echo "primary=$PRIMARY" >> "$GITHUB_OUTPUT"
echo "read-chain=$READ_CHAIN" >> "$GITHUB_OUTPUT"
echo "repo-scope=$REPO_SCOPE" >> "$GITHUB_OUTPUT"
echo "MATHLIB_CACHE_PRIMARY=$PRIMARY" >> "$GITHUB_ENV"
if [ -n "$READ_CHAIN" ]; then
echo "MATHLIB_CACHE_FROM=$READ_CHAIN" >> "$GITHUB_ENV"
fi
if [ -n "$REPO_SCOPE" ]; then
echo "MATHLIB_CACHE_REPO_SCOPE=$REPO_SCOPE" >> "$GITHUB_ENV"
fi
# Visible in CI logs so a glance at any cache-touching step shows
# what trust class the job is operating under.
SCOPE_NOTE=""
if [ -n "$REPO_SCOPE" ]; then
SCOPE_NOTE=", MATHLIB_CACHE_REPO_SCOPE=$REPO_SCOPE"
fi
if [ -n "$READ_CHAIN" ]; then
echo "cache-trust-dispatch: REPO=$REPO BRANCH=$BRANCH → container=$PRIMARY, MATHLIB_CACHE_FROM=$READ_CHAIN$SCOPE_NOTE"
else
echo "cache-trust-dispatch: REPO=$REPO BRANCH=$BRANCH → container=$PRIMARY, MATHLIB_CACHE_FROM=<default>$SCOPE_NOTE"
fi
115 changes: 115 additions & 0 deletions .github/actions/get-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Get this commit's oleans, in two phases:
# 1. Warm the cache from the `cache-snapshot` GitHub artifact (canonical repo only).
# 2. Fetch this commit's oleans from the remote cache with the trusted master-built binary.
# The fetch is HEAD-scoped (reads only this commit's own cache scope). The warm is fail-safe
# (any failure → just the remote fetch) and its source is hardcoded, so nothing can redirect
# the download off the trusted master pipeline.
name: Get cache
description: Get this commit's oleans into the local cache.
inputs:
working_directory:
description: The lake project to fetch the cache for (e.g. the checked-out PR branch).
required: true
cache_bin:
description: Path to the trusted `cache` binary, relative to `working_directory`.
required: true
runs:
using: composite
steps:
# 1. Warm cache from the GitHub artifact. Resolve which snapshot to use: the one built
# at this commit's merge-base with master (its unchanged files hash identically
# there), else the newest still-retained one at-or-before it, else the latest (a
# merge-base older than retention, or any failure, lands here). Canonical repo only.
- name: Resolve cache snapshot
id: resolve
if: ${{ github.repository == 'leanprover-community/mathlib4' }}
shell: bash
env:
GH_TOKEN: ${{ github.token }}
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
set -uo pipefail
runs="repos/leanprover-community/mathlib4/actions/workflows/build.yml/runs?branch=master&event=push&status=success"

# Each helper prints a matching successful master-push run-id, or empty.
run_at() { gh api "${runs}&head_sha=$1" --jq '.workflow_runs[0].id // empty' 2>/dev/null || true; }
latest_run() { gh api "${runs}&per_page=1" --jq '.workflow_runs[0].id // empty' 2>/dev/null || true; }
# newest run created at-or-before date $1, but not older than cutoff $2
newest_before() {
gh api "${runs}&per_page=100" 2>/dev/null | jq -r --arg d "$1" --arg c "$2" \
'[.workflow_runs[] | select(.created_at <= $d and ($c == "" or .created_at >= $c))][0].id // empty' \
2>/dev/null || true
}
# True if run-id $1 actually carries a `cache-snapshot` artifact. Older runs
# predate the feature and artifacts expire, so a successful run is not enough.
# Filters server-side by name, but re-checks in jq in case `name` is ignored.
has_snapshot() {
[[ -n "$(gh api "repos/leanprover-community/mathlib4/actions/runs/$1/artifacts?name=cache-snapshot&per_page=100" \
--jq '.artifacts[] | select(.name == "cache-snapshot") | .id' 2>/dev/null | head -1 || true)" ]]
}

# This PR's merge-base with master (+ its commit date), and the cutoff below which
# snapshots have expired (retention ~14d).
mb_info=$(gh api "repos/leanprover-community/mathlib4/compare/master...${HEAD_SHA}" \
--jq '.merge_base_commit | "\(.sha) \(.commit.committer.date)"' 2>/dev/null || true)
read -r mb mb_date <<< "${mb_info}"
cutoff=$(date -u -d '13 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || true)

# Prefer the merge-base's snapshot (while still retained), then the newest one
# before it, then the latest of all.
run_id=""
if [[ -n "${mb}" && ( -z "${cutoff}" || "${mb_date}" > "${cutoff}" ) ]]; then
run_id=$(run_at "${mb}")
[[ -z "${run_id}" ]] && run_id=$(newest_before "${mb_date}" "${cutoff}")
fi
[[ -z "${run_id}" ]] && run_id=$(latest_run)

# The resolved run may carry no `cache-snapshot` artifact: an older merge-base
# predating the feature, or one whose artifact already expired (older-than-today
# runs often won't have one). Rather than let the download step hard-error on a
# missing artifact, confirm it's present; if not, fall back to the latest master
# run, and warm only if that one has it.
if [[ -n "${run_id}" ]] && ! has_snapshot "${run_id}"; then
echo "Run ${run_id} has no cache-snapshot artifact; falling back to latest master run."
run_id=$(latest_run)
if [[ -n "${run_id}" ]] && ! has_snapshot "${run_id}"; then
run_id=""
fi
fi

echo "Resolved cache-snapshot run_id: '${run_id}' (merge-base: ${mb:-unknown})"
echo "run_id=${run_id}" >> "$GITHUB_OUTPUT"

- name: Warm cache from GitHub artifact
if: ${{ steps.resolve.outputs.run_id != '' }}
continue-on-error: true # fail-safe: fall back to the remote fetch (step 2)
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: cache-snapshot
path: /home/lean/.cache/mathlib
repository: leanprover-community/mathlib4
run-id: ${{ steps.resolve.outputs.run_id }}
github-token: ${{ github.token }}

# 2. Fetch this commit's oleans from the remote cache with the trusted `cache` binary
# (outside landrun). Runs on every repo; the warm above just gives the canonical
# repo a local head start. HEAD-scoped: reads only this commit's own cache scope.
- name: Fetch cache from remote
shell: bash
env:
WORKDIR: ${{ inputs.working_directory }}
CACHE_BIN: ${{ inputs.cache_bin }}
CACHE_REPO: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
run: |
set -eo pipefail
cd "${WORKDIR}"
rm -rf .lake/build/lib/lean/Mathlib
log="${RUNNER_TEMP:-/tmp}/cache-get.log"
# --repo so fork PRs also read their own repo-namespaced cache (master is read flat,
# so this still gets the master bulk); for in-repo runs it resolves to the same repo.
"${CACHE_BIN}" --repo="${CACHE_REPO}" get 2>&1 | tee "${log}"
# Warmth = how much the snapshot covered HEAD: files already cached locally
# (just decompressed) vs downloaded from Azure. Parsed best-effort from the log.
warm=$(grep -oE 'Decompressing [0-9]+ already-cached' "${log}" | grep -oE '[0-9]+' | head -1 || true)
cold=$(grep -oE 'Attempting to download [0-9]+' "${log}" | grep -oE '[0-9]+' | head -1 || true)
echo "Cache warmth: ${warm:-0} already-cached (warm) / ${cold:-0} downloaded from Azure (cold)"
2 changes: 1 addition & 1 deletion .github/actions/get-mathlib-ci/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ then use the local action:

```yaml
- name: Checkout local actions
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.workflow_sha }}
fetch-depth: 1
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/get-mathlib-ci/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ inputs:
# Default pinned commit used by workflows unless they explicitly override.
# Update this ref as needed to pick up changes to mathlib-ci scripts
# This is also updated automatically by .github/workflows/update_dependencies.yml
default: 5aee9d4ce5a39050c72b4aa46015a824b0c189ac
default: 57c68e7faac5aea96e58a94ca4a334a1999f0d31
path:
description: Checkout destination path.
required: false
Expand All @@ -33,7 +33,7 @@ runs:
using: composite
steps:
- name: Get mathlib-ci
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: leanprover-community/mathlib-ci
ref: ${{ inputs.ref }}
Expand Down
Loading
Loading