lean4-htt/tests/lean/run/2291.lean
Cameron Zwarich d489c6196c chore: update expected test outputs
This makes it easier to distinguish tests that are actually
failing while we work on the new codegen.
2025-06-20 17:29:10 +02:00

218 lines
8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Lean.Elab.Command
import Lean.Elab.Open
/-!
Issue #2291
The following example would cause the pretty printer to panic.
-/
set_option trace.Compiler.simp true in
/--
info: [0]
---
trace: [Compiler.simp] size: 22
def _eval : Lean.MessageData :=
let _x.1 := Lean.instToExprNat;
let _x.2 := "Nat";
let _x.3 := Lean.Name.mkStr1 _x.2;
let _x.4 := @List.nil _;
let type := Lean.Expr.const._override _x.3 _x.4;
let _x.5 := "List";
let _x.6 := "nil";
let _x.7 := Lean.Name.mkStr2 _x.5 _x.6;
let _x.8 := Lean.Level.zero._impl;
let _x.9 := @List.nil _;
let _x.10 := @List.cons _ _x.8 _x.9;
let _x.11 := Lean.Expr.const._override _x.7 _x.10;
let nil := Lean.Expr.app._override _x.11 type;
let _x.12 := "cons";
let _x.13 := Lean.Name.mkStr2 _x.5 _x.12;
let _x.14 := Lean.Expr.const._override _x.13 _x.10;
let cons := Lean.Expr.app._override _x.14 type;
let _x.15 := 0;
let _x.16 := @List.nil _;
let _x.17 := @List.cons _ _x.15 _x.16;
let _x.18 := @Lean.List.toExprAux.0 _ _x.1 nil cons _x.17;
let _x.19 := Lean.MessageData.ofExpr _x.18;
return _x.19
[Compiler.simp] size: 22
def _eval : Lean.MessageData :=
let _x.1 := Lean.instToExprNat;
let _x.2 := "Nat";
let _x.3 := Lean.Name.mkStr1 _x.2;
let _x.4 := @List.nil _;
let type := Lean.Expr.const._override _x.3 _x.4;
let _x.5 := "List";
let _x.6 := "nil";
let _x.7 := Lean.Name.mkStr2 _x.5 _x.6;
let _x.8 := Lean.Level.zero._impl;
let _x.9 := @List.nil _;
let _x.10 := @List.cons _ _x.8 _x.9;
let _x.11 := Lean.Expr.const._override _x.7 _x.10;
let nil := Lean.Expr.app._override _x.11 type;
let _x.12 := "cons";
let _x.13 := Lean.Name.mkStr2 _x.5 _x.12;
let _x.14 := Lean.Expr.const._override _x.13 _x.10;
let cons := Lean.Expr.app._override _x.14 type;
let _x.15 := 0;
let _x.16 := @List.nil _;
let _x.17 := @List.cons _ _x.15 _x.16;
let _x.18 := @Lean.List.toExprAux.0 _ _x.1 nil cons _x.17;
let _x.19 := Lean.MessageData.ofExpr _x.18;
return _x.19
[Compiler.simp] size: 6
def _private.Lean.ToExpr.0.Lean.List.toExprAux._at_._eval.spec_0 nilFn consFn x.1 : Lean.Expr :=
cases x.1 : Lean.Expr
| List.nil =>
return nilFn
| List.cons head.2 tail.3 =>
let _x.4 := Lean.mkNatLit head.2;
let _x.5 := Lean.List.toExprAux._at_._eval.spec_0.0 nilFn consFn tail.3;
let _x.6 := Lean.mkAppB consFn _x.4 _x.5;
return _x.6
[Compiler.simp] size: 21
def _eval : Lean.MessageData :=
let _x.1 := "Nat";
let _x.2 := Lean.Name.mkStr1 _x.1;
let _x.3 := @List.nil _;
let type := Lean.Expr.const._override _x.2 _x.3;
let _x.4 := "List";
let _x.5 := "nil";
let _x.6 := Lean.Name.mkStr2 _x.4 _x.5;
let _x.7 := Lean.Level.zero._impl;
let _x.8 := @List.nil _;
let _x.9 := @List.cons _ _x.7 _x.8;
let _x.10 := Lean.Expr.const._override _x.6 _x.9;
let nil := Lean.Expr.app._override _x.10 type;
let _x.11 := "cons";
let _x.12 := Lean.Name.mkStr2 _x.4 _x.11;
let _x.13 := Lean.Expr.const._override _x.12 _x.9;
let cons := Lean.Expr.app._override _x.13 type;
let _x.14 := 0;
let _x.15 := @List.nil _;
let _x.16 := @List.cons _ _x.14 _x.15;
let _x.17 := Lean.List.toExprAux._at_._eval.spec_0.0 nil cons _x.16;
let _x.18 := Lean.MessageData.ofExpr _x.17;
return _x.18
[Compiler.simp] size: 6
def _private.Lean.ToExpr.0.Lean.List.toExprAux._at_._eval.spec_0 nilFn consFn x.1 : Lean.Expr :=
cases x.1 : Lean.Expr
| List.nil =>
return nilFn
| List.cons head.2 tail.3 =>
let _x.4 := Lean.mkNatLit head.2;
let _x.5 := Lean.List.toExprAux._at_._eval.spec_0.0 nilFn consFn tail.3;
let _x.6 := Lean.mkAppB consFn _x.4 _x.5;
return _x.6
[Compiler.simp] size: 20
def _eval : Lean.MessageData :=
let _x.1 := "Nat";
let _x.2 := Lean.Name.mkStr1 _x.1;
let _x.3 := [] _;
let type := Lean.Expr.const._override _x.2 _x.3;
let _x.4 := "List";
let _x.5 := "nil";
let _x.6 := Lean.Name.mkStr2 _x.4 _x.5;
let _x.7 := Lean.Level.zero._impl;
let _x.8 := List.cons _ _x.7 _x.3;
let _x.9 := Lean.Expr.const._override _x.6 _x.8;
let nil := Lean.Expr.app._override _x.9 type;
let _x.10 := "cons";
let _x.11 := Lean.Name.mkStr2 _x.4 _x.10;
let _x.12 := Lean.Expr.const._override _x.11 _x.8;
let cons := Lean.Expr.app._override _x.12 type;
let _x.13 := 0;
let _x.14 := [] _;
let _x.15 := List.cons _ _x.13 _x.14;
let _x.16 := Lean.List.toExprAux._at_._eval.spec_0.0 nil cons _x.15;
let _x.17 := Lean.MessageData.ofExpr _x.16;
return _x.17
[Compiler.simp] size: 6
def _private.Lean.ToExpr.0.Lean.List.toExprAux._at_._eval.spec_0 nilFn consFn x.1 : Lean.Expr :=
cases x.1 : Lean.Expr
| List.nil =>
return nilFn
| List.cons head.2 tail.3 =>
let _x.4 := Lean.mkNatLit head.2;
let _x.5 := Lean.List.toExprAux._at_._eval.spec_0.0 nilFn consFn tail.3;
let _x.6 := Lean.mkAppB consFn _x.4 _x.5;
return _x.6
[Compiler.simp] size: 20
def _eval : Lean.MessageData :=
let _x.1 := "Nat";
let _x.2 := Lean.Name.mkStr1 _x.1;
let _x.3 := [] _;
let type := Lean.Expr.const._override _x.2 _x.3;
let _x.4 := "List";
let _x.5 := "nil";
let _x.6 := Lean.Name.mkStr2 _x.4 _x.5;
let _x.7 := Lean.Level.zero._impl;
let _x.8 := List.cons _ _x.7 _x.3;
let _x.9 := Lean.Expr.const._override _x.6 _x.8;
let nil := Lean.Expr.app._override _x.9 type;
let _x.10 := "cons";
let _x.11 := Lean.Name.mkStr2 _x.4 _x.10;
let _x.12 := Lean.Expr.const._override _x.11 _x.8;
let cons := Lean.Expr.app._override _x.12 type;
let _x.13 := 0;
let _x.14 := [] _;
let _x.15 := List.cons _ _x.13 _x.14;
let _x.16 := Lean.List.toExprAux._at_._eval.spec_0.0 nil cons _x.15;
let _x.17 := Lean.MessageData.ofExpr _x.16;
return _x.17
[Compiler.simp] size: 6
def _private.Lean.ToExpr.0.Lean.List.toExprAux._at_._eval.spec_0 nilFn consFn x.1 : Lean.Expr :=
cases x.1 : Lean.Expr
| List.nil =>
return nilFn
| List.cons head.2 tail.3 =>
let _x.4 := Lean.mkNatLit head.2;
let _x.5 := Lean.List.toExprAux._at_._eval.spec_0.0 nilFn consFn tail.3;
let _x.6 := Lean.mkAppB consFn _x.4 _x.5;
return _x.6
[Compiler.simp] size: 20
def _eval : Lean.MessageData :=
let _x.1 := "Nat";
let _x.2 := Lean.Name.mkStr1 _x.1;
let _x.3 := [] _;
let type := Lean.Expr.const._override _x.2 _x.3;
let _x.4 := "List";
let _x.5 := "nil";
let _x.6 := Lean.Name.mkStr2 _x.4 _x.5;
let _x.7 := Lean.Level.zero._impl;
let _x.8 := List.cons _ _x.7 _x.3;
let _x.9 := Lean.Expr.const._override _x.6 _x.8;
let nil := Lean.Expr.app._override _x.9 type;
let _x.10 := "cons";
let _x.11 := Lean.Name.mkStr2 _x.4 _x.10;
let _x.12 := Lean.Expr.const._override _x.11 _x.8;
let cons := Lean.Expr.app._override _x.12 type;
let _x.13 := 0;
let _x.14 := [] _;
let _x.15 := List.cons _ _x.13 _x.14;
let _x.16 := Lean.List.toExprAux._at_._eval.spec_0.0 nil cons _x.15;
let _x.17 := Lean.MessageData.ofExpr _x.16;
return _x.17
-/
#guard_msgs in
#eval [0]
/-!
Fixing the above involved changing `Lean.unresolveNameGlobal`.
Here, we also verify that we do not pretty print using any aliases that have macro scopes.
-/
open Lean in
elab "add_bad_alias " n:ident : command => withFreshMacroScope do
let declName ← Elab.OpenDecl.resolveNameUsingNamespaces [← getCurrNamespace] n
let badName ← MonadQuotation.addMacroScope `bad
modify fun s => { s with env := addAlias s.env badName declName }
def f := 1
add_bad_alias f
-- Formerly was info: bad✝ :
/-- info: f : Nat -/
#guard_msgs in #check (f)