Tests using `logInfo` were taking an additional two seconds on my machine. This is a performance issue with the old code generator, where we spend all this time specializing the logging functions for `GoalM`. I have not checked whether the new code generator is also affected by this performance issue. Here is a small example that exposes the issue: ```lean import Lean set_option profiler true open Lean Meta Grind in def test (e : Expr): GoalM Unit := do logInfo e ``` cc @zwarich
42 lines
1.6 KiB
Text
42 lines
1.6 KiB
Text
import Lean.Meta.Tactic.Grind
|
||
|
||
def f (α : Type) [Add α] (a : α) := a + a + a
|
||
|
||
open Lean Meta Grind in
|
||
def fallback : Fallback := do
|
||
let nodes ← filterENodes fun e => return e.self.isAppOf ``Lean.Grind.nestedProof
|
||
trace[Meta.debug] "{nodes.toList.map (·.self)}"
|
||
let nodes ← filterENodes fun e => return e.self.isAppOf ``GetElem.getElem
|
||
let [_, n, _] := nodes.toList | unreachable!
|
||
trace[Meta.debug] "{← getEqc n.self}"
|
||
(← get).mvarId.admit
|
||
|
||
set_option trace.Meta.debug true
|
||
set_option grind.debug true
|
||
set_option grind.debug.proofs true
|
||
|
||
/-
|
||
Recall that array access terms, such as `a[i]`, have nested proofs.
|
||
The following test relies on `grind` `nestedProof` wrapper to
|
||
detect equalities between array access terms.
|
||
-/
|
||
|
||
/--
|
||
info: [Meta.debug] [Lean.Grind.nestedProof (i < a.toList.length) (_example.proof_1 i j a b h1 h2),
|
||
Lean.Grind.nestedProof (j < a.toList.length) h1,
|
||
Lean.Grind.nestedProof (j < b.toList.length) h]
|
||
[Meta.debug] [a[i], b[j], a[j]]
|
||
-/
|
||
#guard_msgs (info) in
|
||
example (i j : Nat) (a b : Array Nat) (h1 : j < a.size) (h : j < b.size) (h2 : i ≤ j) : a[i] < a[j] + b[j] → i = j → a = b → False := by
|
||
grind on_failure fallback
|
||
|
||
/--
|
||
info: [Meta.debug] [Lean.Grind.nestedProof (i < a.toList.length) (_example.proof_1 i j a b h1 h2),
|
||
Lean.Grind.nestedProof (j < a.toList.length) h1,
|
||
Lean.Grind.nestedProof (j < b.toList.length) h]
|
||
[Meta.debug] [a[i], a[j]]
|
||
-/
|
||
#guard_msgs (info) in
|
||
example (i j : Nat) (a b : Array Nat) (h1 : j < a.size) (h : j < b.size) (h2 : i ≤ j) : a[i] < a[j] + b[j] → i = j → False := by
|
||
grind on_failure fallback
|