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
99 lines
2.2 KiB
Text
99 lines
2.2 KiB
Text
set_option trace.grind.eqc true
|
|
set_option trace.grind.internalize true
|
|
|
|
/--
|
|
trace: [grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.eqc] (p → q) = True
|
|
[grind.eqc] p = True
|
|
[grind.eqc] (p → q) = q
|
|
[grind.eqc] q = False
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) → p → q := by
|
|
grind
|
|
|
|
/--
|
|
trace: [grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.eqc] (p → q) = True
|
|
[grind.eqc] q = False
|
|
[grind.eqc] p = False
|
|
[grind.eqc] p = True
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) → ¬q → ¬p := by
|
|
grind
|
|
|
|
/--
|
|
trace: [grind.internalize] (p → q) = r
|
|
[grind.internalize] Prop
|
|
[grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.internalize] r
|
|
[grind.eqc] ((p → q) = r) = True
|
|
[grind.eqc] (p → q) = r
|
|
[grind.eqc] p = False
|
|
[grind.eqc] (p → q) = True
|
|
[grind.eqc] r = False
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) = r → ¬p → r := by
|
|
grind
|
|
|
|
|
|
/--
|
|
trace: [grind.internalize] (p → q) = r
|
|
[grind.internalize] Prop
|
|
[grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.internalize] r
|
|
[grind.eqc] ((p → q) = r) = True
|
|
[grind.eqc] (p → q) = r
|
|
[grind.eqc] q = True
|
|
[grind.eqc] (p → q) = True
|
|
[grind.eqc] r = False
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) = r → q → r := by
|
|
grind
|
|
|
|
/--
|
|
trace: [grind.internalize] (p → q) = r
|
|
[grind.internalize] Prop
|
|
[grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.internalize] r
|
|
[grind.eqc] ((p → q) = r) = True
|
|
[grind.eqc] (p → q) = r
|
|
[grind.eqc] q = False
|
|
[grind.eqc] r = True
|
|
[grind.eqc] p = False
|
|
[grind.eqc] p = True
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) = r → ¬q → r → ¬p := by
|
|
grind
|
|
|
|
/--
|
|
trace: [grind.internalize] (p → q) = r
|
|
[grind.internalize] Prop
|
|
[grind.internalize] p → q
|
|
[grind.internalize] p
|
|
[grind.internalize] q
|
|
[grind.internalize] r
|
|
[grind.eqc] ((p → q) = r) = True
|
|
[grind.eqc] (p → q) = r
|
|
[grind.eqc] q = False
|
|
[grind.eqc] r = False
|
|
[grind.eqc] p = True
|
|
[grind.eqc] p = False
|
|
-/
|
|
#guard_msgs (trace) in
|
|
example (p q : Prop) : (p → q) = r → ¬q → ¬r → p := by
|
|
grind
|