Releases: leanprover/lean4
v4.2.0
v4.2.0
- isDefEq cache for terms not containing metavariables..
- Make
Environment.mk
andEnvironment.add
private, and addreplay
as a safer alternative. IO.Process.output
no longer inherits the standard input of the caller.- Do not inhibit caching of default-level
match
reduction. - List the valid case tags when the user writes an invalid one.
- The derive handler for
DecidableEq
now handles mutual inductive types. - Show path of failed import in Lake.
- Fix linker warnings on macOS.
- Lake: Add
postUpdate?
package configuration option. Used by a package to specify some code which should be run after a successfullake update
of the package or one of its downstream dependencies. (lake#185) - Improvements to Lake startup time (#2572, #2573)
refine e
now replaces the main goal with metavariables which were created during elaboration ofe
and no longer captures pre-existing metavariables that occur ine
(#2502).- This is accomplished via changes to
withCollectingNewGoalsFrom
, which also affectselabTermWithHoles
,refine'
,calc
(tactic), andspecialize
. Likewise, all of these now only include newly-created metavariables in their output. - Previously, both newly-created and pre-existing metavariables occurring in
e
were returned inconsistently in different edge cases, causing duplicated goals in the infoview (issue #2495), erroneously closed goals (issue #2434), and unintuitive behavior due torefine e
capturing previously-created goals appearing unexpectedly ine
(no issue; see PR).
- This is accomplished via changes to
Merged PRs
- Add new issue templates by @mhuisi in #2519
- chore: begin development cycle for 4.2.0 by @semorrison in #2545
- chore: do not generate PR releases from forks by @semorrison in #2550
- chore: when bumping Mathlib testing branches, bump to latest nightly-testing by @semorrison in #2553
- fix: uninterpolated error message in
registerRpcProcedure
by @thorimur in #2547 - Enforce linebreak between
calc
steps by @Kha in #2532 - fix: rename parameter of withImportModules to match doc string by @dwrensha in #2530
- perf: reduce allocations in unused variable linter by @hargoniX in #2491
- fix: set
MACOSX_DEPLOYMENT_TARGET
in CI only by @Kha in #2556 - CI: label stale PRs by @Kha in #2561
- chore: disambiguate
whnf
system category by @Kha in #2560 - fix: use MoveFileEx for rename on win by @digama0 in #2546
- fix: set ref in getCalcFirstStep by @PatrickMassot in #2563
- perf: Use flat ByteArrays in Trie by @nomeata in #2529
- chore: update domain by @Kha in #2566
- feat: lake: add name to manifest by @tydeu in #2565
- fix: only return new mvars from
refine
,elabTermWithHoles
, andwithCollectingNewGoalsFrom
by @thorimur in #2502 - fix: don't try to generate
below
for nested predicates. by @arthur-adjedj in #2390 - perf: do not detect
lean
's toolchain by @tydeu in #2570 - test: add lake benchmarks by @tydeu in #2457
- perf: lake: build lakefile environments incrementally by @Kha in #2573
- perf: lake: no
lean --githash
when collocated by @tydeu in #2572 - test: lake: add env & dep cfg benchmarks + cleanup by @tydeu in #2574
- perf: lake: lazily acquire repo URL/tag in
:release
by @tydeu in #2583 - doc: add token error change to RELEASES.md by @Kha in #2579
- chore: begin development cycle for v4.3.0 by @semorrison in #2585
- fix: hover term/tactic confusion by @digama0 in #2586
- doc: fix doc comment syntax in declModifiers doc comment by @nomeata in #2590
- chore: add release note about lake startup time by @semorrison in #2597
- chore: Remove unused variables from kernel by @nomeata in #2576
- Fix typos by @DenisGorbachev in #2605
- docs: update RELEASES.md for #2502 by @thorimur in #2606
- [Backport releases/v4.2.0] docs: update RELEASES.md for #2502 by @github-actions in #2613
- refactor: remove redundant let by @DenisGorbachev in #2614
- Fix linker warnings on macOS by @Kha in #2598
- feat : derive
DecidableEq
for mutual inductives by @arthur-adjedj in #2591 - fix: withLocation should use withMainContext for target by @alexjbest in #2607
- fix: XML parsing bugs by @kuruczgy in #2601
- feat: Web Assembly Build by @abentkamp in #2599
- feat: make
Environment.mk
private by @digama0 in #2604 - doc: fix the link to contribution guidelines by @DenisGorbachev in #2623
- feat: show path of failed import by @bollu in #2616
- doc: add missing character in testing.md by @david-christiansen in #2630
- Tag names by @david-christiansen in #2629
- fix: eliminate widestring uses by @Kha in #2633
- chore: fix typos in comments by @int-y1 in #2636
- chore: fix more typos in comments by @int-y1 in #2638
- perf: do not inhibit caching of default-level
match
reduction by @Kha in #2612 - chore: add missing if statements to pr-release.yml workflow by @semorrison in #2639
- chore: fix MVarId.getType' by @semorrison in #2595
- chore: add axiom for tracing use of reduceBool / reduceNat by @semorrison in #2654
- feat: replay constants into an Environment by @semorrison in #2617
- chore: remove unnecessary
partial
inForEachExpr.visit
by @digama0 in #2657 - chore: change trustCompiler axiom to True by @semorrison in #2662
- Add development process docs by @david-christiansen in #2650
- fix: treat pretty-printed names as strings by @Vtec234 in #2652
- feat:
ToMessageData (α × β)
instance by @digama0 in #2658 - fix: implementation of Array.anyMUnsafe by @semorrison in #2641
- perf: use quick_is_def_eq first by @digama0 in #2671
- chore: make
Environment.add
private by @semorrison in #2642 - fix: quot reduction bug by @digama0 in #2673
- fix:
stdin := .null
inIO.Process.output
by @tydeu in #2544 - test: lake: show module with failed import by @tydeu in #2677
- feat: lake:
postUpdate?
+ test by @tydeu in #2603 - Cancel outstanding tasks on document edit in the language server by @Kha in #2648
- feat: lake:
--no-build
option to exit before a build by @tydeu in #2651 - Machinery for opt-in builds in language server by @Kha in #2665
- fix : make
mk_no_confusion_type
handle delta-reduction when generating telescope by @arthur-adjedj in #2501 - isDefEq cache for terms not containing metavariables. by @leodemoura in #2644
- chore: simp tracing reports ← by @semorrison in #2621
- feat: use nat_gcd in the kernel by @semorrison in #2533
- chore: add items to RE...
v4.2.0-rc4
Full Changelog: v4.2.0-rc3...v4.2.0-rc4
Fixes a bug that could lead to data loss from lake clean
when switching between this version and previous stable versions. Users upgrading a project from 4.2.0-rc2 or 4.2.0-rc3 should manually remove their lakefile.olean
after adjusting lean-toolchain
.
v4.2.0-rc3
This version is known to contain a bug that could lead to data loss from lake clean
, which has been fixed in 4.2.0-rc4. Users upgrading a project from this version to 4.2.0 rc4 should manually remove their lakefile.olean
after adjusting lean-toolchain
.
This is a fix for v4.2.0-rc2
as lean4#2648 appears to cause intermittent crashes in VSCode.
v4.2.0-rc2
This version is known to contain a bug that could lead to data loss from lake clean
, which has been fixed in 4.2.0-rc4. Users upgrading a project from this version to 4.2.0 rc4 should manually remove their lakefile.olean
after adjusting lean-toolchain
.
What's Changed
- perf: lake: lazily acquire repo URL/tag in
:release
by @tydeu in #2583 - doc: add token error change to RELEASES.md by @Kha in #2579
- chore: begin development cycle for v4.3.0 by @semorrison in #2585
- fix: hover term/tactic confusion by @digama0 in #2586
- doc: fix doc comment syntax in declModifiers doc comment by @nomeata in #2590
- chore: add release note about lake startup time by @semorrison in #2597
- chore: Remove unused variables from kernel by @nomeata in #2576
- Fix typos by @DenisGorbachev in #2605
- docs: update RELEASES.md for #2502 by @thorimur in #2606
- [Backport releases/v4.2.0] docs: update RELEASES.md for #2502 by @github-actions in #2613
- refactor: remove redundant let by @DenisGorbachev in #2614
- Fix linker warnings on macOS by @Kha in #2598
- feat : derive
DecidableEq
for mutual inductives by @arthur-adjedj in #2591 - fix: withLocation should use withMainContext for target by @alexjbest in #2607
- fix: XML parsing bugs by @kuruczgy in #2601
- feat: Web Assembly Build by @abentkamp in #2599
- feat: make
Environment.mk
private by @digama0 in #2604 - doc: fix the link to contribution guidelines by @DenisGorbachev in #2623
- feat: show path of failed import by @bollu in #2616
- doc: add missing character in testing.md by @david-christiansen in #2630
- Tag names by @david-christiansen in #2629
- fix: eliminate widestring uses by @Kha in #2633
- chore: fix typos in comments by @int-y1 in #2636
- chore: fix more typos in comments by @int-y1 in #2638
- perf: do not inhibit caching of default-level
match
reduction by @Kha in #2612 - chore: add missing if statements to pr-release.yml workflow by @semorrison in #2639
- chore: fix MVarId.getType' by @semorrison in #2595
- chore: add axiom for tracing use of reduceBool / reduceNat by @semorrison in #2654
- feat: replay constants into an Environment by @semorrison in #2617
- chore: remove unnecessary
partial
inForEachExpr.visit
by @digama0 in #2657 - chore: change trustCompiler axiom to True by @semorrison in #2662
- Add development process docs by @david-christiansen in #2650
- fix: treat pretty-printed names as strings by @Vtec234 in #2652
- feat:
ToMessageData (α × β)
instance by @digama0 in #2658 - fix: implementation of Array.anyMUnsafe by @semorrison in #2641
- perf: use quick_is_def_eq first by @digama0 in #2671
- chore: make
Environment.add
private by @semorrison in #2642 - fix: quot reduction bug by @digama0 in #2673
- fix:
stdin := .null
inIO.Process.output
by @tydeu in #2544 - test: lake: show module with failed import by @tydeu in #2677
- feat: lake:
postUpdate?
+ test by @tydeu in #2603 - Cancel outstanding tasks on document edit in the language server by @Kha in #2648
- feat: lake:
--no-build
option to exit before a build by @tydeu in #2651 - Machinery for opt-in builds in language server by @Kha in #2665
- fix : make
mk_no_confusion_type
handle delta-reduction when generating telescope by @arthur-adjedj in #2501 - isDefEq cache for terms not containing metavariables. by @leodemoura in #2644
- chore: simp tracing reports ← by @semorrison in #2621
- feat: use nat_gcd in the kernel by @semorrison in #2533
- chore: add items to RELEASES.md by @semorrison in #2687
New Contributors
- @DenisGorbachev made their first contribution in #2605
- @kuruczgy made their first contribution in #2601
- @abentkamp made their first contribution in #2599
Full Changelog: v4.2.0-rc1...v4.2.0-rc2
v4.2.0-rc1
No breaking changes so far since v4.1.0.
What's Changed
- Add new issue templates by @mhuisi in #2519
- chore: begin development cycle for 4.2.0 by @semorrison in #2545
- chore: do not generate PR releases from forks by @semorrison in #2550
- chore: when bumping Mathlib testing branches, bump to latest nightly-testing by @semorrison in #2553
- fix: uninterpolated error message in
registerRpcProcedure
by @thorimur in #2547 - Enforce linebreak between
calc
steps by @Kha in #2532 - fix: rename parameter of withImportModules to match doc string by @dwrensha in #2530
- perf: reduce allocations in unused variable linter by @hargoniX in #2491
- fix: set
MACOSX_DEPLOYMENT_TARGET
in CI only by @Kha in #2556 - CI: label stale PRs by @Kha in #2561
- chore: disambiguate
whnf
system category by @Kha in #2560 - fix: use MoveFileEx for rename on win by @digama0 in #2546
- fix: set ref in getCalcFirstStep by @PatrickMassot in #2563
- perf: Use flat ByteArrays in Trie by @nomeata in #2529
- chore: update domain by @Kha in #2566
- feat: lake: add name to manifest by @tydeu in #2565
- fix: only return new mvars from
refine
,elabTermWithHoles
, andwithCollectingNewGoalsFrom
by @thorimur in #2502 - fix: don't try to generate
below
for nested predicates. by @arthur-adjedj in #2390 - perf: do not detect
lean
's toolchain by @tydeu in #2570 - test: add lake benchmarks by @tydeu in #2457
- perf: lake: build lakefile environments incrementally by @Kha in #2573
- perf: lake: no
lean --githash
when collocated by @tydeu in #2572 - test: lake: add env & dep cfg benchmarks + cleanup by @tydeu in #2574
Full Changelog: v4.1.0...v4.2.0-rc1
v4.1.0
Significant changes since v4.0.0
-
The error positioning on missing tokens has been improved. In particular, this should make it easier to spot errors in incomplete tactic proofs.
-
After elaborating a configuration file, Lake will now cache the configuration to a
lakefile.olean
. Subsequent runs of Lake will import this OLean instead of elaborating the configuration file. This provides a significant performance improvement (benchmarks indicate that using the OLean cuts Lake's startup time in half), but there are some important details to keep in mind:- Lake will regenerate this OLean after each modification to the
lakefile.lean
orlean-toolchain
. You can also force a reconfigure by passing the new--reconfigure
/-R
option tolake
. - Lake configuration options (i.e.,
-K
) will be fixed at the moment of elaboration. Setting these options whenlake
is using the cached configuration will have no effect. To change options, runlake
with-R
/--reconfigure
. - The
lakefile.olean
is a local configuration and should not be committed to Git. Therefore, existing Lake packages need to add it to their.gitignore
.
- Lake will regenerate this OLean after each modification to the
-
The signature of
Lake.buildO
has changed,args
has been split intoweakArgs
andtraceArgs
.traceArgs
are included in the input trace andweakArgs
are not. See Lake's FFI example for a demonstration of how to adapt to this change. -
The signatures of
Lean.importModules
,Lean.Elab.headerToImports
, andLean.Elab.parseImports
have changed from takingList Import
toArray Import
. -
There is now an
occs
field
in the configuration object for therewrite
tactic,
allowing control of which occurrences of a pattern should be rewritten.
This was previously a separate argument forLean.MVarId.rewrite
,
and this has been removed in favour of an additional field ofRewrite.Config
.
It was not previously accessible from user tactics.
Contributors
% git log v4.0.0..v4.1.0 --pretty="%an" | sort | uniq -c | sort -rn
28 Mac Malone
9 Scott Morrison
8 Sebastian Ullrich
2 Mario Carneiro
2 Jannis Limperg
1 mhuisi
1 github-actions[bot]
1 Marcus Rossel
1 Joachim Breitner
v4.1.0-rc1
This is the first release candidate for v4.1.0-rc1
. We are switching to using a tracking branch for this release, at release/v4.1.0
. We hope to cherry-pick any critical fixes onto this branch, rather than moving up to master for any subsequent release candidates.
Breaking changes since v4.0.0
:
-
After elaborating a configuration file, Lake will now cache the configuration to a
lakefile.olean
. Subsequent runs of Lake will import this OLean instead of elaborating the configuration file. This provides a significant performance improvement (benchmarks indicate that using the OLean cuts Lake's startup time in half), but there are some important details to keep in mind:- Lake will regenerate this OLean after each modification to the
lakefile.lean
orlean-toolchain
. You can also force a reconfigure by passing the new--reconfigure
/-R
option tolake
. - Lake configuration options (i.e.,
-K
) will be fixed at the moment of elaboration. Setting these options whenlake
is using the cached configuration will have no effect. To change options, runlake
with-R
/--reconfigure
. - The
lakefile.olean
is a local configuration and should not be committed to Git. Therefore, existing Lake packages need to add it to their.gitignore
.
- Lake will regenerate this OLean after each modification to the
-
The signature of
Lake.buildO
has changed,args
has been split intoweakArgs
andtraceArgs
.traceArgs
are included in the input trace andweakArgs
are not. See Lake's FFI example for a demonstration of how to adapt to this change. -
The signatures of
Lean.importModules
,Lean.Elab.headerToImports
, andLean.Elab.parseImports
have changed from takingList Import
toArray Import
. -
There is now an
occs
field in the configuration object for therewrite
tactic, allowing control of which occurrences of a pattern should be rewritten. This was previously a separate argument forLean.MVarId.rewrite
, and this has been removed in favour of an additional field ofRewrite.Config
. It was not previously accessible from user tactics.
v4.0.0
This is the first official release of Lean 4.
We intend to begin regular releases of Lean 4, providing a new "minor" version approximately monthly.
We do not yet make promises about backwards compatibility, although all breaking changes will be documented in RELEASES.md.
Please visit
- Our community forum on Zulip! This is the best place to get help, and find out what the Lean community is working on.
- The Lean language website for downloads and documentation.
- The homepage of the Lean Focused Research Organization for the team behind Lean.
- The Lean community website for help getting started, tutorials, and information about Mathlib.
- The Mathlib GitHub repository, for Lean's major mathematical library.
We have had over 2000 commits since the previous milestone.
% git log v4.0.0-m5..v4.0.0 --pretty="%an" | sort | uniq -c | sort -rn
833 Leonardo de Moura
662 Mac Malone
301 Sebastian Ullrich
228 Gabriel Ebner
215 Mario Carneiro
46 Henrik Böving
41 Ed Ayers
26 Scott Morrison
20 Siddharth Bhat
12 Wojciech Nawrocki
11 Bulhwi Cha
8 Adrien Champion
7 Chris Lovett
6 Alex J Best
5 Yuri de Wit
5 Tobias Grosser
4 Rishikesh Vaishnav
4 David Renshaw
3 pcpthm
3 int-y1
3 Patrick Massot
3 Martin Dvořák
3 Marcus Rossel
3 Elias Aebi
2 Pietro Monticone
2 Parth Shastri
2 Joachim Breitner
2 Jannis Limperg
2 James Gallicchio
2 François G. Dorais
2 Floris van Doorn
2 Eric Wieser
2 Connor Baker
2 Chris Hughes
2 Anders Christiansen Sørby
1 thorimur
1 mcdoll
1 locriacyber
1 joao guilherme
1 bc²
1 awson
1 ammkrn
1 Richard Musiol
1 Olivier Taïbi
1 Matthias Hetzenberger
1 Kaiyu Yang
1 Junyan Xu
1 Juan Pablo Romero
1 Jon Eugster
1 Jeremy Salwen
1 Jakob von Raumer
1 Gabriel Dahia
1 Fynn Schmitt-Ulms
1 Evgenia Karunus
1 Enrico Borba
1 Denis Gorbachev
1 David Thrane Christiansen
1 Arthur Paulino
1 Andrés Goens
v4.0.0-rc5
This is the fifth release candidate for the first official release of Lean 4.
It replaces v4.0.0-rc4, but has no changes except for the values of Lean.toolchain
and Lean.versionString
, which were not set correctly under the previous release process.
v4.0.0-rc4
This is the fourth release candidate for the first official release of Lean 4.
It replaces v4.0.0-rc3, which included a commit that broke Mathlib. Setting up better integrated testing is in the works!
What's Changed
Full Changelog: v4.0.0-rc3...v4.0.0-rc4