Zulip Chat Archive
Stream: general
Topic: decidable heq
Eric Rodriguez (Jun 09 2021 at 19:05):
I know the answer is probably "don't do these cursed things", but I want to get decidable_eq instance for quiver.total and am really struggling:
import combinatorics.quiver
universes v u
instance {V : Type u} [quiver.{v} V] [decidable_eq V] : decidable_eq (quiver.total V) :=
begin
intros a b,
apply decidable_of_decidable_of_iff _ (quiver.total.ext_iff a b).symm,
haveI : decidable (a.hom == b.hom) := sorry,
apply_instance
end
now, the very big issue is how in the hell I decide equality of heq. I know I certainly need more decidable instances, but not sure which or how to string them together. The reason I want decidability here is because there's going to be parts where I'm hoping dec_trivial can do the book-keeping and not me.
Eric Wieser (Jun 09 2021 at 19:17):
docs#quiver.total for reference
Kevin Buzzard (Jun 09 2021 at 19:18):
I doubt this is provable unless you also have decidable equality on all the hom sets. Let's say a.left = b.left and a.right = b.right. Then you want to decide equality of two terms of type a.left ⟶ a.right.
Eric Wieser (Jun 09 2021 at 19:19):
Yeah, I think you need [Π a b : V, decidable_eq (a ⟶ b)] (edit: or something dependent but weaker)
Kevin Buzzard (Jun 09 2021 at 19:20):
For example (I should say that I have no idea what a quiver is so please check what I'm saying) if V = just unit but Hom(star,star) is the real numbers, V has decidable equality but I doubt quiver.total V does.
Eric Rodriguez (Jun 09 2021 at 19:25):
No, for sure I think I need more instances. But not sure which and then how to proceed with it
Eric Wieser (Jun 09 2021 at 19:27):
Does derive decidable_eq work?
Eric Wieser (Jun 09 2021 at 19:28):
Worst case scenario you show it's equivalent to a sigma type, and then instances should kick in
Eric Wieser (Jun 09 2021 at 19:28):
But the derive_handler ought to do that for you
Eric Rodriguez (Jun 09 2021 at 19:32):
Eric Wieser said:
Does
derive decidable_eqwork?
putting that on quiver.total wants the instance that you thought it'd need, but I'm not sure how to tell derive "just assume it"
Eric Rodriguez (Jun 09 2021 at 19:32):
and if I try to use tactic.mk_dec_eq_instance directly it gives me a match failed error
Eric Rodriguez (Jun 09 2021 at 19:35):
aha! this works but probably isn't optimal
instance [quiver.{v} V] [decidable_eq V] [Π a b : V, decidable_eq (a ⟶ b)] : decidable_eq (quiver.total V) :=
by tactic.mk_dec_eq_instance
Kevin Buzzard (Jun 09 2021 at 20:09):
Oh nice! You used black magic!
Eric Wieser (Jun 09 2021 at 20:31):
Looks optimal to me
Last updated: May 02 2025 at 03:31 UTC