-
Notifications
You must be signed in to change notification settings - Fork 710
feat: proper recursive specialization #11479
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
Open
hargoniX
wants to merge
12
commits into
master
Choose a base branch
from
hbv/specialize_rec
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Contributor
Author
|
!radar |
|
Benchmark results for fd5b87d against 0e83422 are in! @hargoniX Major changes (72)
Minor changes (3)
|
fd5b87d to
4a93cec
Compare
Contributor
Author
|
!bench |
|
Benchmark results for 4a93cec against edcef51 are in! @Garmelon @hargoniX Major changes (2)
Minor changes (2)
|
Contributor
Author
|
!bench |
|
Benchmark results for 28d874c against edcef51 are in! @hargoniX Major changes (1)
Minor changes (3)
|
Collaborator
|
Mathlib CI status (docs):
|
Collaborator
|
Reference manual CI status:
|
601f2d0 to
8c1bc30
Compare
Contributor
Author
|
!bench |
|
Benchmark results for 91927db against edcef51 are in! @hargoniX Major changes (2)
Minor changes (2)
|
91927db to
7fd9654
Compare
leanprover-community-mathlib4-bot
added a commit
to leanprover-community/batteries
that referenced
this pull request
Dec 5, 2025
leanprover-community-mathlib4-bot
added a commit
to leanprover-community/mathlib4-nightly-testing
that referenced
this pull request
Dec 5, 2025
leanprover-bot
added a commit
to leanprover/reference-manual
that referenced
this pull request
Dec 5, 2025
leanprover-community-mathlib4-bot
added a commit
to leanprover-community/batteries
that referenced
this pull request
Dec 8, 2025
leanprover-community-mathlib4-bot
added a commit
to leanprover-community/mathlib4-nightly-testing
that referenced
this pull request
Dec 8, 2025
leanprover-bot
added a commit
to leanprover/reference-manual
that referenced
this pull request
Dec 8, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
builds-manual
CI has verified that the Lean Language Reference builds against this PR
builds-mathlib
CI has verified that Mathlib builds against this PR
changelog-compiler
Compiler, runtime, and FFI
toolchain-available
A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR enables the specializer to also recursively specialize in some non trivial higher order situations.
The main motivation for this change is the upcoming changes to do notation by sgraf. In there he uses combinators such as
in programs such as
inspecting this IR right before we get to the specializer in the current compiler we get:
Here the
kcontinuehigher order functions pose a special challenge because they delay the discovery of new specialization opportunities. Inspecting the IR after the current specializer (and a cleanup simp step) we get functions that look as follows:Observe that the specializer decided to abstract over
kcontinueinstead of specializing further recursively. Thus this tight loop is now going through an indirect call.This PR now changes the specializer somewhat fundamentally to handle situations like this. The most notable change is going to a fixpoint loop of:
Furthermore, declarations that were already specialized:
fixedHOparameters for specialization, in order to avoid termination issues with repeated specialization and abstraction of type class parameters under binders@[specialize]. Thus we need to specialize them even if their arguments don't actually contain anything of interest in order to ensure that type classes etc. are correctly cleaned up within their bodies.Closes #10924