Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: elaborate theorem bodies in parallel #5864

Draft
wants to merge 580 commits into
base: async-proofs-base
Choose a base branch
from

Conversation

Kha
Copy link
Member

@Kha Kha commented Oct 28, 2024

Draft in need of cleanups, smaller fixes, and incremental upstreaming, opened for benchmarking

@Kha
Copy link
Member Author

Kha commented Oct 28, 2024

!bench

@leanprover-bot
Copy link
Collaborator

Here are the benchmark results for commit 3319266.
There were significant changes against commit 07ea626:

  Benchmark     Metric                    Change
  =========================================================
- import Lean   branch-misses               4.8%   (41.6 σ)
- import Lean   branches                  323.8% (6967.6 σ)
- import Lean   instructions              234.6% (4024.9 σ)
- import Lean   task-clock                 73.0%   (17.5 σ)
- import Lean   wall-clock                 72.7%   (17.3 σ)
- stdlib        attribute application      41.1%   (25.5 σ)
- stdlib        dsimp                      53.6%   (78.9 σ)
- stdlib        instantiate metavars       57.3%   (11.4 σ)
- stdlib        instructions                3.1%  (393.6 σ)
- stdlib        maxrss                     54.2%   (77.4 σ)
- stdlib        process pre-definitions    63.3%   (31.2 σ)
- stdlib        share common exprs         52.7%   (23.4 σ)
- stdlib        tactic execution          126.0%   (63.7 σ)
- stdlib        task-clock                 18.0%  (275.8 σ)
- stdlib        type checking              96.4%  (325.3 σ)
+ stdlib size   bytes .olean               -6.2%
+ stdlib size   lines C                    -8.0%

@Kha
Copy link
Member Author

Kha commented Oct 28, 2024

!bench

@leanprover-bot
Copy link
Collaborator

Here are the benchmark results for commit 600b587.
There were significant changes against commit 07ea626:

  Benchmark     Metric                    Change
  =========================================================
- stdlib        attribute application      40.7%   (52.8 σ)
- stdlib        dsimp                      50.4%  (100.0 σ)
- stdlib        fix level params           36.2%   (15.0 σ)
- stdlib        instantiate metavars       57.2%   (25.3 σ)
- stdlib        maxrss                     54.5%  (159.1 σ)
- stdlib        process pre-definitions    65.3%   (99.1 σ)
- stdlib        tactic execution          127.0%   (88.2 σ)
- stdlib        task-clock                 16.4%   (41.8 σ)
- stdlib        type checking              96.6%  (364.6 σ)
+ stdlib        wall-clock                 -2.7% (-594.3 σ)
+ stdlib size   bytes .olean               -6.2%
+ stdlib size   lines C                    -8.0%

@Kha Kha changed the base branch from master to async-proofs-base October 28, 2024 17:02
@Kha Kha force-pushed the async-proofs branch 5 times, most recently from c27de50 to 9727358 Compare October 28, 2024 21:31
@Kha
Copy link
Member Author

Kha commented Oct 29, 2024

!bench

@leanprover-bot
Copy link
Collaborator

Here are the benchmark results for commit 9727358.
There were significant changes against commit 07ea626:

  Benchmark   Metric                    Change
  ======================================================
- stdlib      attribute application      47.2%  (18.7 σ)
- stdlib      fix level params           34.9%  (38.0 σ)
- stdlib      instantiate metavars       59.9%  (29.6 σ)
- stdlib      instructions                6.7% (991.7 σ)
- stdlib      maxrss                     54.0% (135.2 σ)
- stdlib      process pre-definitions    69.0%  (21.8 σ)
- stdlib      share common exprs         56.7% (111.7 σ)
- stdlib      tactic execution          157.6% (395.3 σ)
- stdlib      task-clock                 30.0% (625.7 σ)
- stdlib      type checking             104.3%  (67.8 σ)
- stdlib      wall-clock                  6.5%  (14.6 σ)

kim-em and others added 22 commits December 3, 2024 17:59
…6282)

This PR moves `IO.Channel` and `IO.Mutex` from `Init` to `Std.Sync` and
renames them to `Std.Channel` and `Std.Mutex`.

Note that the original files are retained and the deprecation is written
manually as we cannot import `Std` from `Init` so this is the only way
to deprecate without a hard breaking change. In particular we do not yet
move `Std.Queue` from `Init` to `Std` both because it needs to be
retained for this deprecation to work but also because it is already
within the `Std` namespace and as such we cannot maintain two copies of
the file at once. After the deprecation period is finished `Std.Queue`
will find a new home in `Std.Data.Queue`.
…eanprover#6244)

This PR changes the implementation of `HashMap.toList`, so the ordering
agrees with `HashMap.toArray`.

Currently there are no verification lemmas about `HashMap.toList`, so no
contract is being broken yet!
* Make sure metaprogramming users cannot be surprised by its
introduction
* Make `#guard_msgs` compatible with its use
This PR adds the `debug.proofAsSorry` option. When enabled, the proofs
of theorems are ignored and replaced with `sorry`.
This PR adds theorems characterizing the value of the unsigned shift
right of a bitvector in terms of its 2s complement interpretation as an
integer.
Unsigned shift right by at least one bit makes the value of the
bitvector less than or equal to `2^(w-1)`,
makes the interpretation of the bitvector `Int` and `Nat` agree.
In the case when `n = 0`, then the shift right value equals the integer
interpretation.

```lean
theorem toInt_ushiftRight_eq_ite {x : BitVec w} {n : Nat} :
  (x >>> n).toInt = if n = 0 then x.toInt else x.toNat >>> n
```

```lean
theorem toFin_uShiftRight {x : BitVec w} {n : Nat} :
  (x >>> n).toFin = x.toFin / (Fin.ofNat' (2^w) (2^n))
```

---------

Co-authored-by: Harun Khan <[email protected]>
Co-authored-by: Tobias Grosser <[email protected]>
This PR adds `BitVec.[toInt|toFin]_concat` and moves a couple of
theorems into the concat section, as `BitVec.msb_concat` is needed for
the `toInt_concat` proof.

We also add `Bool.toInt`.
This PR removes an unused import in the time library that can yield to
import cycles when building stuff that gets imported by `Std.Internal`
but also wants to import `Std.Time`.
This PR adds support for `HEq` to the new code generator.
This PR adds lemmas simplifying `for` loops over `Option` into
`Option.pelim`, giving parity with lemmas simplifying `for` loops of
`List` into `List.fold`.
This PR upstreams the `ToLevel` typeclass from mathlib and uses it to
fix the existing `ToExpr` instances so that they are truly universe
polymorphic (previously it generated malformed expressions when the
universe level was nonzero). We improve on the mathlib definition of
`ToLevel` to ensure the class always lives in `Type`, irrespective of
the universe parameter.

This implements part one of the plan to upstream a derive handler for
`ToExpr`, as discussed in leanprover#5906 and leanprover#5909.

---------

Co-authored-by: Kyle Miller <[email protected]>
Co-authored-by: Tobias Grosser <[email protected]>
This PR generalizes the universe level for `Array.find?`, by giving it a
separate implementation from `Array.findM?`.
This PR adds `protected` to `Fin.cast` and `BitVec.cast`, to avoid
confusion with `_root_.cast`. These should mostly be used via
dot-notation in any case.
This PR adds `GetElem` lemmas for the basic `Vector` operations.

The `Vector` API is still very sparse, but I'm hoping to infill rapidly.
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.