Zulip Chat Archive
Stream: lean4
Topic: (kernel) function expected .noConfusion
Sébastien Michelland (Jun 01 2022 at 16:15):
This behavior seems to be a bug in the dependent matcher - MyBool.noConfusion
gets passed both an argument for b = .MyTrue
and an extra one for u = ()
.
inductive MyBool :=
| MyTrue
| MyFalse
inductive T :=
| mk (b: MyBool) (u: Unit)
inductive isTrue: T → Type :=
| intro: isTrue (.mk .MyTrue ())
example {τ: T} (h: isTrue τ): Unit :=
match τ, h with
| .mk .MyTrue (), .intro => ()
-- (kernel) function expected
-- MyBool.noConfusion (_ : b✝ = MyBool.MyTrue) (_ : u✝ = ())
I there is a way to write such a function without first refining τ
then h
, I'd also like to know.
Leonardo de Moura (Jun 02 2022 at 01:00):
Thanks for reporting this issue. I pushed a fix for it: https://github.com/leanprover/lean4/commit/32db3161666325b704ef9d4876f9ee9718e03bb2
Last updated: Dec 20 2023 at 11:08 UTC