This PR makes `#guard_msgs` to treat `trace` messages separate from `info`, `warning` and `error`. It also introduce the ability to say `#guard_msgs (pass info`, like `(drop info)` so far, and also adds `(check info)` as the explicit form of `(info)`, for completeness. Fixes #8266
48 lines
1.2 KiB
Text
48 lines
1.2 KiB
Text
def replicate : (n : Nat) → (a : α) → List α
|
||
| 0, _ => []
|
||
| n+1, a => a :: replicate n a
|
||
|
||
/--
|
||
trace: [grind.ematch.pattern] replicate.eq_1: [@replicate #1 `[0] #0]
|
||
[grind.ematch.pattern] replicate.eq_2: [@replicate #2 (#0 + 1) #1]
|
||
-/
|
||
#guard_msgs (trace) in
|
||
set_option trace.grind.ematch.pattern true in
|
||
attribute [grind] replicate
|
||
|
||
example : ys = [] → replicate 0 [] = ys := by
|
||
grind only [replicate]
|
||
|
||
/--
|
||
error: invalid `grind` parameter, `replicate` is a definition, the only acceptable (and redundant) modifier is '='
|
||
-/
|
||
#guard_msgs (error) in
|
||
example : ys = [] → replicate 0 [] = ys := by
|
||
grind only [←replicate]
|
||
|
||
example : ys = [] → replicate 0 [] = ys := by
|
||
fail_if_success grind only
|
||
sorry
|
||
|
||
example (ys : List α) : n = 0 → replicate n ys = [] := by
|
||
grind only [replicate]
|
||
|
||
example (ys : List α) : n = 0 → List.replicate n ys = [] := by
|
||
grind only [List.replicate]
|
||
|
||
opaque foo : Nat → Nat
|
||
opaque bla : Nat → Nat
|
||
|
||
theorem foo_bla : foo x = bla x := sorry
|
||
|
||
example : foo x = bla x := by
|
||
grind only [_=_ foo_bla]
|
||
|
||
@[reducible] def inc (_ : Nat) := 1
|
||
|
||
/--
|
||
error: `inc` is a reducible definition, `grind` automatically unfolds them
|
||
-/
|
||
#guard_msgs (error) in
|
||
example : a = 1 → inc x = a := by
|
||
grind [inc]
|