Zulip Chat Archive

Stream: general

Topic: category theory


Floris van Doorn (May 03 2019 at 22:23):

I'm working a bit on the category theory library in the branch limits-isos. My initial goal was to show that if C has products/coproducts/..., then Cᵒᵖ has coproducts/products/..., but I've also been changing some other things, like the definition of equivalence (now it's an adjoint equivalence).

One thing I want to change is that if we have a natural transformation α : F ⟶ G, I would like to write α.app for its action on objects. The problem is that the type of α is has_hom.hom and the full name of app is nat_trans.app, so it often doesn't work (it works sometimes, but not reliably, and I don't know why it sometimes doesn't work).
I tried to add a declaration

@[reducible] def has_hom.hom.app {F G : C ⥤ D} (α : F ⟶ G) (X : C) : F.obj X ⟶ G.obj X := nat_trans.app α X

This works, but now we have two versions of app which are not syntactically equal, which causes major headaches when rewriting/simplifying. In the branch limits-isos tried to get it to work, but in some rare cases α.app will actually use nat_trans.app, which is undesirable.

Any suggestions to resolve this? I'm now leaning towards removing has_hom.hom.app and live with the fact that we sometimes have to write nat_trans.app α instead of α.app

Mario Carneiro (May 03 2019 at 22:36):

shouldn't it unfold to nat_trans in this example, so α.app means nat_trans.app α?

Mario Carneiro (May 03 2019 at 22:37):

I think adding has_hom.hom.app will not make this better

Mario Carneiro (May 03 2019 at 22:38):

but I'm curious to see your problem cases where α.app doesn't work

Floris van Doorn (May 03 2019 at 22:40):

I'll undo the change and double check where I ran into problems. Maybe it was a case where the category instance wasn't synthesized yet.

Floris van Doorn (May 04 2019 at 22:58):

@[simp] lemma id_app (F : C  D) (X : C) : (𝟙 F).app X = 𝟙 (F.obj X) := rfl

gives (with pp.implicit set to true)

invalid field notation, 'app' is not a valid "field" because environment does not contain 'category_theory.has_hom.hom.app'
  𝟙 F
which has type
  F ⟶ F
Additional information:
d:\projects\mathlib\src\category_theory\functor_category.lean:42:48: context: invalid field notation, 'app' is not a valid "field" because environment does not contain 'category_theory.has_hom.rec.app'
  𝟙 F
which has type
  @has_hom.rec (C ⥤ D) (λ [c : has_hom (C ⥤ D)], C ⥤ D → C ⥤ D → Sort ?)
    (λ (hom : C ⥤ D → C ⥤ D → Sort ?), hom)
    (@category_struct.to_has_hom (C ⥤ D) ?m_1)
    F
    F

Using (𝟙 F : F ⟶ F).app does work.

Floris van Doorn (May 04 2019 at 22:59):

So it seems that sometimes the functor category instance wasn't synthesized yet. But so far this happens only a couple of times, so it seems very manageable.


Last updated: Dec 20 2023 at 11:08 UTC