@@ -21,12 +21,10 @@ def ppAsserted? (filter : Filter) (collapsed := false) : GrindTacticM (Option Me
2121 return some <| Grind.ppExprArray `facts "Asserted facts" facts (collapsed := collapsed)
2222
2323@[builtin_grind_tactic showAsserted] def evalShowAsserted : GrindTactic := fun stx => withMainContext do
24- match stx with
25- | `(grind| show_asserted $[$filter?]?) =>
26- let filter ← elabFilter filter?
27- let some msg ← ppAsserted? filter | throwError "no facts"
28- logInfo msg
29- | _ => throwUnsupportedSyntax
24+ let `(grind| show_asserted $[$filter?]?) := stx | throwUnsupportedSyntax
25+ let filter ← elabFilter filter?
26+ let some msg ← ppAsserted? filter | throwError "no facts"
27+ logInfo msg
3028
3129def ppProps? (filter : Filter) (isTrue : Bool) (collapsed := false ) : GrindTacticM (Option MessageData) := do
3230 let props ← liftGoalM do
@@ -43,14 +41,12 @@ def showProps (filter? : Option (TSyntax `grind_filter)) (isTrue : Bool) : Grind
4341 logInfo msg
4442
4543@[builtin_grind_tactic showTrue] def evalShowTrue : GrindTactic := fun stx => do
46- match stx with
47- | `(grind| show_true $[$filter?]?) => showProps filter? true
48- | _ => throwUnsupportedSyntax
44+ let `(grind| show_true $[$filter?]?) := stx | throwUnsupportedSyntax
45+ showProps filter? true
4946
5047@[builtin_grind_tactic showFalse] def evalShowFalse : GrindTactic := fun stx => do
51- match stx with
52- | `(grind| show_false $[$filter?]?) => showProps filter? false
53- | _ => throwUnsupportedSyntax
48+ let `(grind| show_false $[$filter?]?) := stx | throwUnsupportedSyntax
49+ showProps filter? false
5450
5551def ppEqcs? (filter : Filter) (collapsed := false ) : GrindTacticM (Option MessageData) := liftGoalM do
5652 let mut regularEqcs : Array MessageData := #[]
@@ -88,42 +84,36 @@ def ppEqcs? (filter : Filter) (collapsed := false) : GrindTacticM (Option Messag
8884 return MessageData.trace { cls := `eqc, collapsed } "Equivalence classes" regularEqcs
8985
9086@[builtin_grind_tactic showEqcs] def evalShowEqcs : GrindTactic := fun stx => withMainContext do
91- match stx with
92- | `(grind| show_eqcs $[$filter?]?) =>
93- let filter ← elabFilter filter?
94- let some msg ← ppEqcs? filter | throwError "no equivalence classes"
95- logInfo msg
96- | _ => throwUnsupportedSyntax
87+ let `(grind| show_eqcs $[$filter?]?) := stx | throwUnsupportedSyntax
88+ let filter ← elabFilter filter?
89+ let some msg ← ppEqcs? filter | throwError "no equivalence classes"
90+ logInfo msg
9791
9892def pushIfSome (msgs : Array MessageData) (msg? : Option MessageData) : Array MessageData :=
9993 if let some msg := msg? then msgs.push msg else msgs
10094
10195@[builtin_grind_tactic showState] def evalShowState : GrindTactic := fun stx => withMainContext do
102- match stx with
103- | `(grind| show_state $[$filter?]?) =>
104- let filter ← elabFilter filter?
105- let msgs := #[]
106- let msgs := pushIfSome msgs (← ppAsserted? filter (collapsed := true ))
107- let msgs := pushIfSome msgs (← ppProps? filter true (collapsed := false ))
108- let msgs := pushIfSome msgs (← ppProps? filter false (collapsed := false ))
109- let msgs := pushIfSome msgs (← ppEqcs? filter (collapsed := false ))
110- logInfo <| MessageData.trace { cls := `grind, collapsed := false } "Grind state" msgs
111- | _ => throwUnsupportedSyntax
96+ let `(grind| show_state $[$filter?]?) := stx | throwUnsupportedSyntax
97+ let filter ← elabFilter filter?
98+ let msgs := #[]
99+ let msgs := pushIfSome msgs (← ppAsserted? filter (collapsed := true ))
100+ let msgs := pushIfSome msgs (← ppProps? filter true (collapsed := false ))
101+ let msgs := pushIfSome msgs (← ppProps? filter false (collapsed := false ))
102+ let msgs := pushIfSome msgs (← ppEqcs? filter (collapsed := false ))
103+ logInfo <| MessageData.trace { cls := `grind, collapsed := false } "Grind state" msgs
112104
113- @[builtin_grind_tactic showSplits] def evalShowSplits : GrindTactic := fun stx => withMainContext do
114- match stx with
115- | `(grind| show_splits $[$filter?]?) =>
116- let filter ← elabFilter filter?
117- let { candidates, numDigits } ← liftGoalM <| getSplitCandidateAnchors filter.eval
118- if candidates.isEmpty then
119- throwError "no case splits"
120- let msgs := candidates.map fun { anchor, e, .. } =>
121- .trace { cls := `split } m!"#{anchorToString numDigits anchor} := {e}" #[]
122- let msg := MessageData.trace { cls := `splits, collapsed := false } "Case split candidates" msgs
123- logInfo msg
124- | _ => throwUnsupportedSyntax
105+ @[builtin_grind_tactic showCases] def evalShowCases : GrindTactic := fun stx => withMainContext do
106+ let `(grind| show_cases $[$filter?]?) := stx | throwUnsupportedSyntax
107+ let filter ← elabFilter filter?
108+ let { candidates, numDigits } ← liftGoalM <| getSplitCandidateAnchors filter.eval
109+ if candidates.isEmpty then
110+ throwError "no case splits"
111+ let msgs := candidates.map fun { anchor, e, .. } =>
112+ .trace { cls := `split } m!"#{anchorToString numDigits anchor} := {e}" #[]
113+ let msg := MessageData.trace { cls := `splits, collapsed := false } "Case split candidates" msgs
114+ logInfo msg
125115
126- @[builtin_grind_tactic showThms ] def evalShowThms : GrindTactic := fun _ => withMainContext do
116+ @[builtin_grind_tactic showLocalThms ] def evalShowLocalThms : GrindTactic := fun _ => withMainContext do
127117 let goal ← getMainGoal
128118 let entries ← liftGrindM do
129119 let (found, entries) ← go {} {} goal.ematch.thms
0 commit comments