Zulip Chat Archive

Stream: Is there code for X?

Topic: category theory: isomorphisms between images


Kevin Buzzard (Jun 10 2022 at 22:00):

I'm having trouble making eq_to_hom : image f = image g cancel when f = g. This is in contrast to my usual experience with eq_to_hom which is that when you make the stars align, simp makes it vanish. I think that the three claims below are all basically equivalent and I can't prove any of them. If someone could help me to prove one of them that would be great; any hints about which if any of them should be in mathlib / be @[simp] / @[simps] / @[reassoc] / whatever (I don't understand any of these properly within the context of category theory yet) would also be welcomed :-)

import category_theory.abelian.basic

open category_theory category_theory.limits

variables (𝓐 : Type*) [category 𝓐] [abelian 𝓐]

example (A B : 𝓐) (f g : A  B) (h : f = g) :
  (eq_to_hom (by rw h) : image f  image g)  image.ι g = image.ι f :=
begin
  sorry
end

example (A B : 𝓐) (f g : A  B) (h : f = g) :
  factor_thru_image f  (eq_to_hom (by rw h) : image f  image g) = factor_thru_image g :=
begin
  sorry
end

example (A B : 𝓐) (f g : A  B) (h : f = g) :
  factor_thru_image f  (eq_to_hom (by rw h) : image f  image g)  image.ι g = f :=
begin
  sorry,
end

Kevin Buzzard (Jun 10 2022 at 22:02):

PS I'm a little surprised that ext doesn't append image.ι g to both morphisms in the middle example. Should it? If it did then simp then reduces it to the third example.

Kevin Buzzard (Jun 10 2022 at 22:18):

Aah, docs#category_theory.limits.image.eq_fac should help.

Kevin Buzzard (Jun 10 2022 at 22:25):

example (A B : 𝓐) (f g : A  B) (h : f = g) :
  (eq_to_hom (by rw h) : image f  image g) = (image.eq_to_iso h).hom :=
begin
  sorry -- :-(
end

:sad:

Adam Topaz (Jun 10 2022 at 22:26):

Are you using docs#category_theory.limits.image.eq_to_hom ?

Adam Topaz (Jun 10 2022 at 22:27):

I suppose (read: hope) that would behave better with the image api

Kevin Buzzard (Jun 10 2022 at 22:28):

OK so you're telling me that in the specific case when I want image f -> image g from f = g I should not use docs#category_theory.eq_to_hom but I should instead use docs#category_theory.limits.image.eq_to_hom ? My last example is me failing to prove that these coincide, basically.

Adam Topaz (Jun 10 2022 at 22:29):

It looks like the API is rather built up around docs#category_theory.limits.image.eq_to_iso

Kevin Buzzard (Jun 10 2022 at 22:31):

Are there any more eq_to_homs I need to know about??

Adam Topaz (Jun 10 2022 at 22:32):

I don't know. It seems that we're missing some lemmas around the image api

Adam Topaz (Jun 10 2022 at 22:35):

example (A B : 𝓐) (f g : A  B) (h : f = g) :
  (eq_to_hom (by rw h) : image f  image g) = (image.eq_to_iso h).hom :=
begin
  cases h,
  rw [ cancel_mono (image.ι f),  image.eq_fac h],
  simp,
end

In case it helps :slight_frown:

Adam Topaz (Jun 10 2022 at 22:37):

I don't know why docs#category_theory.limits.image.eq_fac is not reversed and tagged with simp.
I don't know why we don't have an ext lemma about image.ι.
Were these intentional design decisions @Scott Morrison @Markus Himmel ?

Kevin Buzzard (Jun 10 2022 at 22:38):

Let me say right now that I'm loving the abelian category API. I've found it very intuitive to use and I've written 1000 lines of code in the last week or so using it without any problems until now; furthermore it seems like the solutions to all my current problems are in this thread. But I have the same questions as Adam.

Adam Topaz (Jun 10 2022 at 22:39):

For abelian categories, I suspect that docs#category_theory.abelian.image is much better behaved.

Kevin Buzzard (Jun 11 2022 at 09:32):

I can do everything with eq_to_hom if the following were simp lemmas:

@[simp, reassoc] lemma _root_.category_theory.limits.eq_to_hom_comp_image.ι {C : Type*} [category C] {X Y : C} {f f' : X  Y}
  [has_image f] [has_image f'] [has_equalizers C] (h : f = f') :
(eq_to_hom (by simp_rw h))  image.ι f' = image.ι f :=
begin
  unfreezingI {subst h},
  simp,
end

--- move
@[simp, reassoc] lemma _root_.category_theory.limits.eq_to_hom_comp_kernel.ι {C : Type*}
  [category C] [abelian C] {X Y : C} {f f' : X  Y} (h : f = f') :
(eq_to_hom (by simp_rw h))  kernel.ι f' = kernel.ι f :=
begin
  unfreezingI {subst h},
  simp,
end

I only care about abelian categories right now so the second one has too many assumptions. The first one is the other way around from a lemma we have already, modulo the fact that I am wedded to eq_to_hom rather than the image-specific versions.

Kevin Buzzard (Jun 11 2022 at 09:34):

Thanks to Adam for reminding me that just because I can't subst or cases on the equality of functions in my use case (d_from = d i j >> some_iso_or_other) I can do it in the general lemmas.


Last updated: Dec 20 2023 at 11:08 UTC