Repository navigation
Conversation
A tactic probe could reference the enclosing declaration (or a member of its mutual block) through Lean's auxiliary local and report success, although Lean checks such references for termination only when it finalizes the declaration. Report these probes as unsuccessful with the original proof state and a message naming the declaration, and document the sync-to-check workflow.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 stops runAt tactic probes from reporting success when their result uses the declaration being proved. While a declaration elaborates, Lean exposes it to its own body as an auxiliary local and checks every such use for termination only when it finalizes the declaration. A probe has no finalization step, so a probe such as
exact countDown norexact tacticSelfpreviously returnedsuccess: truewhether or not the real edit would pass Lean's termination check, including for unsound circular proofs.mutualblock, now returnsuccess: falsewith the original proof state, no successor handle, and a message naming the declaration and pointing to edit-and-sync.partial/unsafedefinitions, now also report the probe as unchecked rather than succeeding. That is a deliberate trade: no probe answer is wrong, at the cost of requiring edit-and-sync for recursive proofs. Running Lean's termination check on a speculatively completed declaration is possible later work.