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: adds optConfig syntax for tactic configuration #5883

Merged
merged 3 commits into from
Oct 30, 2024

Conversation

kmill
Copy link
Collaborator

@kmill kmill commented Oct 30, 2024

This PR adds a new syntax for tactic and command configurations. It also updates the elaborator construction command to be able to process this new syntax.

We do not update core tactics yet. Once tactics switch over to it, rather than (for example) writing simp (config := { contextual := true, maxSteps := 22}), one can write simp +contextual (maxSteps := 22). The new syntax is reverse compatible in the sense that (config := ...) still sets the entire configuration.

Note to metaprogrammers: Use optConfig instead of (config)?. The elaborator generated by declare_config_elab accepts both old and new configurations. The elaborator has also been written to be tolerant to null nodes, so adapting to optConfig should be as easy as changing just the syntax for your tactics and deleting mkOptionalNode.

Breaking change: The new system is mostly reverse compatible, however the type of the generated elaborator now lands in TacticM to make use of the current recovery state. Commands that wish to elaborate configurations should now use declare_command_config_elab instead of declare_config_elab to get an elaborator landing in CommandElabM.

This PR just adds the syntax and elaborator for a new kind of tactic configuration.

Once tactics switch over to it, rather than writing `simp (config := { contextual := true, maxSteps := 22})`, one can write `simp +contextual (maxSteps := 22)`.

Note to metaprogrammers: Use `optConfig` instead of `(config)?`. The elaborator generated by `declare_config_elab` accepts both old and new configurations. The elaborator has also been written to be tolerant to null nodes, so adapting to `optConfig` should be as easy as changing just the syntax for your tactics.
@kmill kmill requested a review from kim-em as a code owner October 30, 2024 03:59
@github-actions github-actions bot added the toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN label Oct 30, 2024
leanprover-community-mathlib4-bot added a commit to leanprover-community/batteries that referenced this pull request Oct 30, 2024
leanprover-community-mathlib4-bot added a commit to leanprover-community/mathlib4 that referenced this pull request Oct 30, 2024
@leanprover-community-bot
Copy link
Collaborator

leanprover-community-bot commented Oct 30, 2024

Mathlib CI status (docs):

@leanprover-community-bot leanprover-community-bot added the breaks-mathlib This is not necessarily a blocker for merging: but there needs to be a plan label Oct 30, 2024
leanprover-community-mathlib4-bot added a commit to leanprover-community/batteries that referenced this pull request Oct 30, 2024
leanprover-community-mathlib4-bot added a commit to leanprover-community/mathlib4 that referenced this pull request Oct 30, 2024
@leanprover-community-bot leanprover-community-bot added builds-mathlib CI has verified that Mathlib builds against this PR and removed breaks-mathlib This is not necessarily a blocker for merging: but there needs to be a plan labels Oct 30, 2024
@kmill kmill added this pull request to the merge queue Oct 30, 2024
Merged via the queue into leanprover:master with commit d4b1be0 Oct 30, 2024
22 checks passed
github-merge-queue bot pushed a commit that referenced this pull request Nov 1, 2024
PR #5883 added a new syntax for tactic configuration, and this PR
enables it in most tactics. Example: `simp +contextual`.

There will be followup PRs to modify the remaining ones.

Breaking change: Tactics that are macros for `simp` or other core
tactics need to adapt. The easiest way is to replace `(config)?` with
`optConfig` and then in the syntax quotations replace `$[$cfg]?` by
`$cfg:optConfig`. For tactics that manipulate the configuration, see
`erw` for an example:
```lean
macro "erw" c:optConfig s:rwRuleSeq loc:(location)? : tactic => do
  `(tactic| rw $[$(getConfigItems c)]* (transparency := .default) $s:rwRuleSeq $(loc)?)
```
Configuration options are processed left-to-right, so this forces the
`transparency` to always be `.default`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
builds-mathlib CI has verified that Mathlib builds against this PR toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants