Zulip Chat Archive
Stream: general
Topic: sparse categories
Scott Morrison (Mar 30 2019 at 09:05):
@Reid Barton, @Floris van Doorn, I was experimenting with sparse categories (I think they are an excellent idea), but ran into this pesky issue:
import category_theory.category universes u v namespace category_theory variables {C : Type u} [category_struct.{v} C] instance sparse_category [∀ X Y : C, subsingleton (X ⟶ Y)] : category.{v} C := { } lemma foo [∀ X Y : C, subsingleton (X ⟶ Y)] (X Y : C) (f : X ⟶ Y) : 𝟙 X ≫ f = f := begin simp, end end category_theory
For some reason the simp
fails, and can't apply the simp lemma category.id_comp
. I can't work out what's going on here. Any ideas??
Kevin Buzzard (Mar 30 2019 at 10:00):
lemma foo [∀ X Y : C, subsingleton (X ⟶ Y)] (X Y : C) (f : X ⟶ Y) : 𝟙 X ≫ f = f := begin refine category.id_comp _ f, -- goals accomplished! end /- kernel failed to type check declaration 'foo' this is usually due to a buggy tactic or a bug in the builtin elaborator elaborated type: ∀ {C : Type u} [_inst_1 : category_struct C] [_inst_2 : ∀ (X Y : C), subsingleton (X ⟶ Y)] (X Y : C) (f : X ⟶ Y), 𝟙 X ≫ f = f elaborated value: λ {C : Type u} [_inst_1 : category_struct C] [_inst_2 : ∀ (X Y : C), subsingleton (X ⟶ Y)] (X Y : C) (f : X ⟶ Y), category.id_comp C f nested exception message: invalid reference to undefined universe level parameter 'v' -/
Kevin Buzzard (Mar 30 2019 at 10:00):
It's a universe issue?
Kevin Buzzard (Mar 30 2019 at 10:05):
set_option pp.universes true set_option pp.notation false lemma foo [∀ X Y : C, subsingleton (X ⟶ Y)] (X Y : C) (f : X ⟶ Y) : 𝟙 X ≫ f = f := begin refine category.id_comp' _ f, -- goals accomplished! end /- kernel failed to type check declaration 'foo' this is usually due to a buggy tactic or a bug in the builtin elaborator elaborated type: ∀ {C : Type u} [_inst_1 : category_struct.{v u} C] [_inst_2 : ∀ (X Y : C), subsingleton.{v+1} (has_hom.hom.{v u} X Y)] (X Y : C) (f : has_hom.hom.{v u} X Y), eq.{v+1} (category_struct.comp.{v u} (category_struct.id.{v u} X) f) f elaborated value: λ {C : Type u} [_inst_1 : category_struct.{v u} C] [_inst_2 : ∀ (X Y : C), subsingleton.{v+1} (has_hom.hom.{v u} X Y)] (X Y : C) (f : has_hom.hom.{v u} X Y), category.id_comp'.{v u} C f nested exception message: invalid reference to undefined universe level parameter 'v' -/
Scott Morrison (Mar 30 2019 at 10:20):
ah... that looks like it could be the problem!
Scott Morrison (Mar 30 2019 at 10:27):
Hmm... it's a problem, but apparently not the problem!
lemma foo [∀ X Y : C, subsingleton.{v} (X ⟶ Y)] (X Y : C) (f : X ⟶ Y) : 𝟙 X ≫ f = f := begin refine category.id_comp' _ f, -- goals accomplished! end
works, but you still can't prove that lemma by simp
.
Scott Morrison (Mar 30 2019 at 10:34):
hmm, okay. For some reason that I don't understand simp
can't cope with synthesising category instances via instance sparse_category [∀ X Y : C, subsingleton (X ⟶ Y)] : category.{v} C := { }
.
Scott Morrison (Mar 30 2019 at 10:35):
The workaround is just to have this be a def
instead, and you just use it to build the instance once and for all, rather than looking up the subsingleton instances at each use.
Scott Morrison (Mar 30 2019 at 10:35):
(That's probably the more sensible use anyway.)
Last updated: Dec 20 2023 at 11:08 UTC