Commit graph

39448 commits

Author SHA1 Message Date
Sebastian Graf
655cc1178c
fix: make mvcgen suggest -trivial on recursion depth error (#12427)
This PR makes `mvcgen` suggest to use `-trivial` when doing so avoids a
recursion depth error.
2026-02-11 09:10:27 +00:00
Wojciech Różowski
64bd08e1f9
feat: add non-conv, user-facing cbv tactic (#12408)
This PR adds a user facing `cbv` tactic that can be used outside of the
`conv` mode.

Example usage:
```lean4
example : "hello" ++ " " ++ "world" = "hello world" := by cbv
```

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 09:04:11 +00:00
Markus Himmel
61cef96cd7
feat: verification of our KMP implementation (#12424)
This PR gives a proof of `LawfulToForwardSearcherModel` for `Slice`
patterns, which amounts to proving that our implementation of KMP is
correct.

Note that this PR also changes the KMP implementation to make it
slightly more efficient and easier to verify. I also have a correctness
proof for the old implementation, so there were no bugs in the old
implementation.
2026-02-11 08:20:20 +00:00
Sebastian Graf
99c83b9c76
fix: mvcgen support for match splitting on excess state args (#12425)
This PR fixes a bug in `mvcgen` caused by incomplete `match` splitting. 

In particular, if a program `match s with ...` matches on a state
variable `s` (presumably the result of a call to `get`), then `s` will
also occur in the stateful goal `H ⊢ₛ wp⟦match s with ...⟧ Q s`
*outside* the program expression; this was not anticipated before.
2026-02-11 08:12:25 +00:00
Paul Reichert
6056dee22f
feat: add missing order instances and lemmas (#12419)
This PR adds `LawfulOrderOrd` instances for `Nat`, `Int`, and all
fixed-width integer types (`Int8`, `Int16`, `Int32`, `Int64`, `ISize`,
`UInt8`, `UInt16`, `UInt32`, `UInt64`, `USize`). These instances
establish that the `Ord` instances for these types are compatible with
their `LE` instances. Additionally, this PR adds a few missing lemmas
and `grind` patterns.
2026-02-11 07:38:00 +00:00
Mac Malone
9da8f5dce4
feat: lake: record cache service in outputs (#12113)
This PR changes the alters the file format of outputs stored in the
local Lake cache to include an identifier indicating the service (if
any) the output came from. This will be used to enable lazily
downloading artifacts on-demand during builds.
2026-02-11 04:29:45 +00:00
Henrik Böving
e5f0d6283a
chore: update to c++20 (#12117)
This PR upgrades Lean's internal toolchain to use C++20 as a preparatory
step for #12044.
2026-02-11 01:17:40 +00:00
Lean stage0 autoupdater
d886be121e chore: update stage0 2026-02-10 22:17:26 +00:00
Kim Morrison
5115b8f361
doc: add test suite documentation to .claude/CLAUDE.md (#12421)
This PR adds comprehensive test running instructions to
`.claude/CLAUDE.md`,
replacing the single `test_single.sh` example with the full range of
test
commands documented in `doc/dev/testing.md`: full suite, filtered by
name,
rerun failures, and direct ctest usage.

🤖 Prepared with Claude Code

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 21:42:06 +00:00
Eric Wieser
c5d2796069
fix: avoid unaligned pointer dereference (#12318)
This PR avoids undefined behavior in `String.Slice.hash` on unaligned
substrings.
This could produce a SIGILL on some Arm platforms.

Closes #12317
2026-02-10 20:40:24 +00:00
Leonardo de Moura
c4d85b7622
chore: revert reducibility change PartialOrder.rel (#12407)
This PR is similar to #12403.

We previously conjectured that "all type class fields that are types
should be marked as reducible." The problem is that propositions are
types, but they are also used as data (with `Decidable`). For example,
we often see the proposition `x <= y` as a Boolean. So, we refined the
conjecture to:

"All type class fields that are types (and not propositions) should be
marked as reducible."
2026-02-10 19:46:36 +00:00
Leonardo de Moura
14b595e952
feat: better support for eta expanded terms in grind (#12415)
This PR improves the support for eta expanded terms in `grind` patterns.

Closes #12390
2026-02-10 19:46:00 +00:00
crStiv
80257a6901
doc: fix typos (#12418)
Nothing fancy, just fixed some typos of different importance
2026-02-10 19:26:49 +00:00
Wojciech Różowski
a6ba7312cc
chore: make toBetaApp public (#12416)
This PR makes `Sym.Simp.toBetaApp` public. This is necessary for the
refactor of the main `cbv` simproc in #12417.
2026-02-10 19:02:01 +00:00
Sebastian Graf
fc4f51d759
feat: pick up specs from the local context in mvcgen (#12395)
This PR adds `mvcgen` support for specifications in the local context.
Example:

```lean
import Std.Tactic.Do

open Std.Do

set_option mvcgen.warning false

def foo (x : Id Nat → Id Nat) : Id Nat := do
  let r₁ ← x (pure 42)
  let r₂ ← x (pure 26)
  pure (r₁ + r₂)

theorem foo_spec
    (x : Id Nat → Id Nat)
    (x_spec : ∀ (k : Id Nat) (_ : ⦃⌜True⌝⦄ k ⦃⇓r => ⌜r % 2 = 0⌝⦄), ⦃⌜True⌝⦄ x k ⦃⇓r => ⌜r % 2 = 0⌝⦄) :
    ⦃⌜True⌝⦄ foo x ⦃⇓r => ⌜r % 2 = 0⌝⦄ := by
  mvcgen [foo, x_spec] <;> grind

def bar (k : Id Nat) : Id Nat := do
  let r ← k
  if r > 30 then return 12 else return r

example : ⦃⌜True⌝⦄ foo bar ⦃⇓r => ⌜r % 2 = 0⌝⦄ := by
  mvcgen [foo_spec, bar] -- unfold `bar` and automatically apply the spec for the higher-order argument `k`
```
2026-02-10 15:51:26 +00:00
Wojciech Różowski
7d32030729
feat: add cbv_eval attribute (#12296)
This PR adds `cbv_eval` attribute that allows to evaluate functions in
`cbv` tactic using pre-registered theorems.
2026-02-10 15:41:42 +00:00
Sebastian Ullrich
bc30710c67
fix: LCNF.getImpureSignature? on imported decls (#12410) 2026-02-10 14:43:31 +00:00
Garmelon
d29407b481
chore: remove outdated trust0 test (#12401) 2026-02-10 13:07:10 +00:00
Paul Reichert
df26bea7c1
feat: upstream slice API improvements from human-eval-lean (#12352)
This PR improves the slice API with lemmas for `drop`/`take` operations
on `Subarray` and more lemmas about `Std.Slice.fold`, `Std.Slice.foldM`
and `Std.Slice.forIn`. It also changes the `simp` and `grind`
annotations for `Slice`-related lemmas. Lemmas converting between slices
of different shapes are no longer `simp`/`grind`-annotated because they
often complicated lemmas and hindered automation.
2026-02-10 10:54:07 +00:00
Wojciech Różowski
82d90b4cdc
fix: force unfolding of the Decidable instace in Decidable.rec (#12399)
This PR adds a custom simproc to handle `Decidable.rec`, where we force
the rewrite in the argument of the `Decidable` type, that normally is
not rewritten due to being a subsingleton.

Closes #12386
2026-02-10 10:49:19 +00:00
Henrik Böving
611337ecee
doc: the different chunks of the pass manager (#12400) 2026-02-10 08:48:36 +00:00
Henrik Böving
7488201604
refactor: port IR.SimpCase to LCNF (#12384)
This PR ports the IR SimpCase pass to LCNF.
2026-02-10 08:35:31 +00:00
Kim Morrison
4cdc199f77
chore: revert reducibility change to HasSSubset for now (#12403)
This PR reverts `attribute [reducible] HasSSubset.SSubset` from #12368,
as it is not immediately needed, and causes breakages in Mathlib.
2026-02-10 06:33:38 +00:00
Wojciech Różowski
af2444a140
perf: always zeta reduce let expressions in cbv (#12397)
This PR adds zeta reduction simproc to the pre step of `cbv`.
2026-02-09 18:45:58 +00:00
Wojciech Różowski
57c5efe309
fix: handling of ite/dite expressions in cbv tactic (#12361)
This PR develops custom simprocs for dealing with `ite`/`dite`
expressions in `cbv` tactics, based on equivalent simprocs from
`Sym.simp`, with the difference that if the condition is not reduced to
`True`/`False`, we make use of the decidable instance and calculate to
what the condition reduces to.

Stacked on top of #12391.
2026-02-09 15:00:10 +00:00
Mac Malone
919721c758
feat: IO.FS.Metadata.numLinks (#12277)
This PR adds `IO.FS.Metadata.numLinks`, which contains the number of
hard links to a file.

This changes the implementation of `System.FilePath.metadata` and
`System.FilePath.symlinkMetadata` to use libuv. Otherwise, `st_nlink`
was not properly set on Windows. This also has the side benefit of
provided sub-second precision for file times on Windows (fulfilling an
old TODO). Also, while libuv supports `lstat` for Windows, enabling that
is left to a future PR.
2026-02-09 14:28:56 +00:00
Mac Malone
9a15df5e28
fix: IO.FS.removeFile should delete read-only files on Windows (#12282)
This PR fixes a platform inconsistency in `IO.FS.removeFile` where it
could not delete read-only files on Windows.

The implementation now uses `uv_fs_unlink` instead of `std::remove`, as
libuv can delete read-only files. The PR also fixes a inconsistency in
`IO_test.lean` where it would generate files in the wrong directory when
run interactively.

---------

Co-authored-by: Markus Himmel <markus@himmel-villmar.de>
2026-02-09 14:28:31 +00:00
Wojciech Różowski
4401117a6a
chore: make simpCond public (#12391)
This PR makes `simpCond` public. It is needed to avoid code duplication
in #12361
2026-02-09 13:54:36 +00:00
Sebastian Graf
7a8e011603
test: support ite splitting and lifting through ExceptT to Sym mvcgen (#12392) 2026-02-09 13:41:35 +00:00
Henrik Böving
892475dcac
fix: LCNF casesOnCtor can only act if type correct (#12387)
This PR fixes an issue in LCNF simp where it would attempt to act on
type incorrect `cases`
statements and look for a branch, otherwise panic. This issue did not
yet manifest in production as
various other invariants upheld by LCNF simp help mask it but will start
to become an issue with the
upcoming changes.

This is the proper fix for #6957.
2026-02-09 12:44:01 +00:00
Sebastian Ullrich
b4a254de69 chore: revert "chore: CI: avoid fetching full repo in PR Release (#12309)"
This reverts commit 12ad957bd5.
2026-02-09 13:12:35 +00:00
Markus Himmel
5ba467d920
feat: LawfulForwardPatternModel for string patterns (#12360)
This PR provides a `LawfulForwardPatternModel` instance for string
patterns, i.e., it proves correctness of the `dropPrefix?` and
`startsWith` functions for string patterns.

Note that this is "just" the correctness proof; there isn't a way to
actually use it yet. API lemmas will follow.
2026-02-09 09:27:47 +00:00
Paul Reichert
d2c738c4bd
feat: vector iterator (#12363)
This PR introduces iterators for vectors via `Vector.iter` and
`Vector.iterM`, together with the usual lemmas.
2026-02-09 07:45:42 +00:00
Mac Malone
a31e68715c
fix: lake: include module identifiers in trace (#12377)
This PR adds identifying information about a module available to `lean`
(e.g., its name and package identifier) to the module's dependency
trace. This ensures modules with different identification have different
input hashes even if their source files and imports are identical.
2026-02-09 05:59:51 +00:00
Sebastian Ullrich
12ad957bd5
chore: CI: avoid fetching full repo in PR Release (#12309) 2026-02-09 05:14:33 +00:00
Leonardo de Moura
690648d943
chore: missing annotations (#12368)
This PR adds missing annotations for feature
[#12179](https://github.com/leanprover/lean4/pull/12179). PR #12179 is
quite challenging, and we are breaking it into smaller pieces.
2026-02-09 04:52:13 +00:00
Leonardo de Moura
6f4e711171
feat: some unification hints (#12341)
This PR adds a few unification hints that we will need after
`backward.isDefEq.respectTransparency` is `true` by default.

See #12338
It was part of #12179.
2026-02-09 04:51:13 +00:00
Sebastian Ullrich
23dc467ef5
chore: do not rely on Name.lt for ordering fvars in acLt (#12306)
Also relands #12000, fixing #12150
2026-02-08 14:25:31 +00:00
Mac Malone
39c26fce1d
feat: lake: disabling the artifact cache also disables fetching (#12300)
This PR makes disabling the artifact cache (e.g., via
`LAKE_ARTIFACT_CACHE=false` or `enableArtifactCache = false`) now stop
Lake from fetching from the cache (whereas it previously only stopped
writing to it).

There are now 3 possible configuration of the local artifact cache for a
package:
* `true`: Artifacts will be fetched from the cache before building (if
available) and built artifacts will be cached.
* `false:`: Lake will neither fetch artifacts from the cache or store
them into it.
* **default** (no configuration set): Lake will fetch artifacts from the
cache but not store them into it. A key motivation for this is to, by
default, reuse artifacts downloaded into the cache from a remote
service.
2026-02-07 18:07:05 +00:00
Rob23oba
f2ed53a3d6
fix: expose reduceOption (#12376)
This PR tags `List.reduceOption` with `@[expose]`. #12348 accidentally
moved the definition out of an `@[expose] section` which caused problems
in mathlib because `List.reduceOption` was expected to be exposed.
2026-02-07 17:24:59 +00:00
Sebastian Ullrich
da62a81e5e
feat: shake: track simpset/grindset uses (#12375)
This PR extends shake with tracking of attribute names passed to
`simp`/`grind`.

On the way there, it also fixes `register_simp/grind_attr` uses outside
`public meta section` as well as go-to-definition on declaration-level
uses of the created attributes (tactic-level goto would be a separate
todo).
2026-02-07 15:19:15 +00:00
Sebastian Ullrich
bbf72b9681
test: refine lake/tests/shake (#12374) 2026-02-07 15:17:07 +00:00
Sebastian Ullrich
ae79d14d27
feat: shake: track [csimp] uses (#12351)
This PR extends the `@[csimp]` attribute to be correctly tracked by
`lake shake`
2026-02-07 14:27:00 +00:00
David Thrane Christiansen
2a02685d95
fix: make classes appear as classes rather than structures in docs (#12373)
This PR moves the elaboration of structure/class Verso docstrings until
after the fact that it's a class is registered, so code samples in the
docstring can use it as a class. Redundant addition of structure and
constructor docstrings are also removed, because they're already handled
in MutualInductive.lean.

Closes #11651
2026-02-07 13:06:41 +00:00
Lean stage0 autoupdater
4a450bf01a chore: update stage0 2026-02-07 11:52:08 +00:00
Henrik Böving
ba9f475417
perf: use Array for CNF formulas (#11832)
This PR uses an `Array` instead of a `List` to store the clauses in
`Std.CNF`. This reduces the memory footprint and pressure on the
allocator, leading to noticeable performance changes with gigantic CNFs.
2026-02-07 11:28:06 +00:00
Markus Himmel
59d514d719
feat: more lemmas relating Bool and (d)ite (#12371)
This PR adds lemmas for simplifying situations involving `Bool` and
`ite`/`dite`.
2026-02-07 09:05:46 +00:00
David Thrane Christiansen
99b3ba12c9
fix: error messages from Verso docstring parser (#12372)
This PR extensively reworks the Verso docstring parser so that it gives
much better parser errors that provide more useful guidance.

Closes #12063
2026-02-07 07:49:06 +00:00
Leonardo de Moura
03dc334f73
fix: simp have in Sym (#12370)
This PR fixes a proof construction bug in `Sym.simp`.

Closes #12336
2026-02-07 00:24:30 +00:00
Henrik Böving
9f2f33bd65
perf: more brave dead variable elimination (#12365) 2026-02-06 22:36:17 +00:00