Many of our tests in `tests/lean/run/` produce output from `#eval` (or `#check`) statements, that is then ignored. This PR tries to capture all the useful output using `#guard_msgs`. I've only done a cursory check that the output is still sane --- there is a chance that some "unchecked" tests have already accumulated regressions and this just cements them! In the other direction, I did identify two rotten tests: * a minor one in `setStructInstNotation.lean`, where a comment says `Set Nat`, but `#check` actually prints `?_`. Weird? * `CompilerProbe.lean` is generating empty output, apparently indicating that something is broken, but I don't know the signficance of this file. In any case, I'll ask about these elsewhere. (This started by noticing that a recent `grind` test file had an untested `trace_state`, and then got carried away.)
42 lines
1.2 KiB
Text
42 lines
1.2 KiB
Text
import Lean
|
||
|
||
universe u
|
||
|
||
inductive Pred : ∀ (α : Type u), List α → Type (u+1)
|
||
| foo {α : Type u} (l1 : List α) (l2 : List (Option α)) : Pred (Option α) l2 → Pred α l1
|
||
|
||
axiom goal : forall (α : Type u) (xs : List (List α)) (h : Pred (List α) xs), xs ≠ [] → xs = xs
|
||
|
||
open Lean
|
||
open Lean.Meta
|
||
|
||
def tst1 : MetaM Unit := do
|
||
let cinfo ← getConstInfo `goal;
|
||
let type := cinfo.type;
|
||
let mvar ← mkFreshExprMVar type;
|
||
trace[Elab] (MessageData.ofGoal mvar.mvarId!);
|
||
let (_, mvarId) ← introN mvar.mvarId! 2;
|
||
let (fvarId, mvarId) ← intro1 mvarId;
|
||
trace[Elab] (MessageData.ofGoal mvarId);
|
||
let s ← generalizeIndices mvarId fvarId;
|
||
trace[Elab] (MessageData.ofGoal s.mvarId);
|
||
pure ()
|
||
|
||
set_option trace.Elab true
|
||
|
||
/--
|
||
info: [Elab] ⊢ ∀ (α : Type u) (xs : List (List α)), Pred (List α) xs → xs ≠ [] → xs = xs
|
||
[Elab] α✝ : Type u
|
||
xs✝ : List (List α✝)
|
||
h✝ : Pred (List α✝) xs✝
|
||
⊢ xs✝ ≠ [] → xs✝ = xs✝
|
||
[Elab] α✝ : Type u
|
||
xs✝ : List (List α✝)
|
||
h✝¹ : Pred (List α✝) xs✝
|
||
α : Type u
|
||
a✝ : List α
|
||
h✝ : Pred α a✝
|
||
⊢ List α✝ = α → HEq xs✝ a✝ → HEq h✝¹ h✝ → xs✝ ≠ [] → xs✝ = xs✝
|
||
-/
|
||
#guard_msgs in
|
||
#eval tst1
|