This PR moves the issue tracking infrastructure from `GrindM` to `SymM`. Issues can occur in different places within a `sym =>` block (e.g., during arithmetic normalization, simplification), not just during `grind` invocations. Moving them to `SymM` makes them available to all modules operating within the symbolic computation framework. - `Sym.reportIssue`: adds an issue to the `SymM` state - `Sym.getIssues`: retrieves accumulated issues - `Sym.withNewIssueContext`: saves/restores the issue list around a computation, used at grind entry points to isolate per-invocation issues while preserving them in the outer context - `GrindM.State.issues` removed; `Grind.reportIssue` delegates to `Sym.reportIssue` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
26 lines
983 B
Text
26 lines
983 B
Text
module
|
|
opaque f : Nat → Nat
|
|
opaque op : Nat → Nat → Nat
|
|
@[grind] theorem op_comm : op x y = op y x := sorry
|
|
@[grind] theorem op_assoc : op (op x y) z = op x (op y z) := sorry
|
|
|
|
syntax "gen! " num : term
|
|
|
|
macro_rules
|
|
| `(gen! 0) => `(f 0)
|
|
| `(gen! $n:num) => `(op (f $n) (gen! $(Lean.quote (n.getNat - 1))))
|
|
|
|
-- This test has been commented out as it is nondeterministic:
|
|
-- sometimes it fails with a timeout at `whnf` rather than `isDefEq`.
|
|
-- /--
|
|
-- trace: [sym.issues] (deterministic) timeout at `isDefEq`, maximum number of heartbeats (5000) has been reached
|
|
-- Use `set_option maxHeartbeats <num>` to set the limit.
|
|
-- ⏎
|
|
-- Additional diagnostic information may be available using the `set_option diagnostics true` command.
|
|
-- -/
|
|
-- #guard_msgs (trace, drop error) in
|
|
-- set_option trace.sym.issues true in
|
|
-- set_option maxHeartbeats 5000 in
|
|
-- example : gen! 10 = 0 ∧ True := by
|
|
-- set_option trace.Meta.debug true in
|
|
-- grind (instances := 10000)
|