lean4-htt/tests/lean/run/canonM_exists_fun.lean
Kim Morrison 24f305c0e3
chore: fix canonicalizer handling over forall/lambda (#6082)
This PR changes how the canonicalizer handles `forall` and `lambda`,
replacing bvars with temporary fvars. Fixes a bug reported by @hrmacbeth
on
[zulip](https://leanprover.zulipchat.com/#narrow/channel/270676-lean4/topic/Quantifiers.20in.20CanonM/near/482483448).
2024-11-17 07:34:45 +00:00

22 lines
673 B
Text

import Lean.Meta.Canonicalizer
import Lean.Elab.Tactic
elab "foo" t:term : tactic => do
let e ← Lean.Elab.Tactic.elabTerm t none
trace[debug] "canonicalizing {e}"
let e' ← (Lean.Meta.canon e).run'
trace[debug] "canonicalized it to {e'}"
/-- info: ∃ f, ∀ (x : Nat), f x = 0 : Prop -/
#guard_msgs in
#check (∃ f : Nat → Nat, ∀ x, f x = 0) -- works fine
/--
info: [debug] canonicalizing ∃ f, ∀ (x : Nat), f x = 0
[debug] canonicalized it to ∃ f, ∀ (x : Nat), f x = 0
-/
#guard_msgs in
set_option trace.debug true in
example : True := by
foo (∃ f : Nat → Nat, ∀ x, f x = 0) -- used to fail with "unexpected bound variable #1"
trivial