This PR adds a `result? : Option TraceResult` field to `TraceData` and populates it in `withTraceNode` and `withTraceNodeBefore`, so that metaprograms walking trace trees can determine success/failure structurally instead of string-matching on emoji. `TraceResult` has three cases: `.success` (checkEmoji), `.failure` (crossEmoji), and `.error` (bombEmoji, exception thrown). An `ExceptToTraceResult` typeclass converts `Except` results to `TraceResult` directly, with instances for `Bool` and `Option`. `TraceResult.toEmoji` converts back to emoji for display. This replaces the previous `ExceptToEmoji` typeclass — `TraceResult` is now the primary representation rather than being derived from emoji strings. `withTraceNodeBefore` (used by `isDefEq`) uses `ExceptToTraceResult.toTraceResult` directly, correctly handling `Bool` (`.ok false` = failure) and `Option` (`.ok none` = failure), with `Except.error` mapping to `.error`. For `withTraceNode`, `result?` defaults to `none`. Callers can pass `mkResult?` to provide structured results; when set, the corresponding emoji is auto-prepended to the message. Motivated by mathlib's `#defeq_abuse` diagnostic tactic (https://github.com/leanprover-community/mathlib4/pull/35750) which currently string-matches on emoji to determine trace node outcomes. See https://leanprover.zulipchat.com/#narrow/channel/113488-general/topic/backward.2EisDefEq.2ErespectTransparency 🤖 Prepared with Claude Code --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| CollectAxioms.lean | ||
| CollectFVars.lean | ||
| CollectLevelMVars.lean | ||
| CollectLevelParams.lean | ||
| CollectLooseBVars.lean | ||
| CollectMVars.lean | ||
| Diff.lean | ||
| FindExpr.lean | ||
| FindLevelMVar.lean | ||
| FindMVar.lean | ||
| FoldConsts.lean | ||
| ForEachExpr.lean | ||
| ForEachExprWhere.lean | ||
| FVarSubset.lean | ||
| HasConstCache.lean | ||
| Heartbeats.lean | ||
| InstantiateLevelParams.lean | ||
| LakePath.lean | ||
| LeanOptions.lean | ||
| MonadBacktrack.lean | ||
| MonadCache.lean | ||
| NumApps.lean | ||
| NumObjs.lean | ||
| OccursCheck.lean | ||
| ParamMinimizer.lean | ||
| Path.lean | ||
| PPExt.lean | ||
| Profile.lean | ||
| Profiler.lean | ||
| PtrSet.lean | ||
| RecDepth.lean | ||
| Recognizers.lean | ||
| ReplaceExpr.lean | ||
| ReplaceLevel.lean | ||
| Reprove.lean | ||
| SafeExponentiation.lean | ||
| SCC.lean | ||
| ShareCommon.lean | ||
| Sorry.lean | ||
| SortExprs.lean | ||
| TestExtern.lean | ||
| Trace.lean | ||