Zulip Chat Archive
Stream: general
Topic: bug in the builtin elaborator
Eric Wieser (Apr 04 2021 at 17:19):
This lemma:
import data.set.finite
lemma foo {α : Type*} {s : set α} (h : set.finite s) [decidable_eq (h.to_finset : set α)] :
true := trivial
is giving me the error
kernel failed to type check declaration 'foo' this is usually due to a buggy tactic or a bug in the builtin elaborator
elaborated type:
∀ {α : Type u_1} {s : set α} (h : s.finite) [_inst_1 : decidable_eq ↥↑(h.to_finset)], true
elaborated value:
λ {α : Type u_1} {s : set α} (h : s.finite) [_inst_1 : decidable_eq ↥↑(h.to_finset)], trivial
nested exception message:
type mismatch at application
decidable_eq ↥↑(h.to_finset)
term
↥↑(h.to_finset)
has type
has_coe_to_sort.S (set α)
but is expected to have type
Sort u_2
In the absence of any tactics, this must be an elaborator bug, right?
Kevin Buzzard (Apr 04 2021 at 18:45):
If you're looking for a fix, then coercing manually does the job:
import data.set.finite
universe u
lemma foo {α : Type u} {s : set α} (h : set.finite s) [decidable_eq ((h.to_finset : set α) : Type u)] :
true := trivial
Kevin Buzzard (Apr 04 2021 at 18:47):
You don't need finsets:
import data.set.finite
universe u
lemma foo {α : Type u} {s : set α} [decidable_eq s] :
true := trivial -- works
lemma bar {α : Type u} {s : set α} [decidable_eq (s : set α)] :
true := trivial -- fails (same error)
Mario Carneiro (Apr 05 2021 at 04:58):
It appears that the elaborator is inferring this:
instance {α : Type*} : has_coe_to_sort (set α) := ⟨_, λ s, {x // x ∈ s}⟩
universes u v
variable {α : Type u}
lemma bar {s : set α} [decidable_eq.{v} (s : set α)] : true := trivial -- fails (kernel error)
That is, the universe variable on decidable_eq
is a fresh universe v
unrelated to the type of anything in sight. The kernel is complaining that it should be u+1
, and if you put decidable_eq.{u+1}
it works. Perhaps the has_coe_to_sort
is getting resolved too late and the universe constraint is never applied?
Mario Carneiro (Apr 05 2021 at 05:00):
(The fact that the above definition is also accepted by the elaborator despite the type error appears to be a variant on the same issue.)
Last updated: Dec 20 2023 at 11:08 UTC