Zulip Chat Archive

Stream: maths

Topic: category theory rewrite in exactness tactic


Kevin Buzzard (Jun 01 2022 at 15:56):

I was just faced with the following goal. Everything is a morphism in some fixed (abelian) category and all morphisms go either from or to some object C.X i of the category, in the centre of the picture.

  /-
  h: exact (C.d (i + 1) i) (C.d i (i - 1))
  ⊢ exact (C.d_to i) (C.d_from i)
  -/

Why can't I solve this with an assumption_mod_cast-like tool? Here C : chain_complex (some_category) (some_shape) and I am lying about dot notation.

The types: C.d_from i : C.X i ⟶ C.X_next i and C.d i (i - 1) : C.X i ⟶ C.X (i - 1) -- these are homs in category theory, not function arrows. But here's a thing. We proved that C.X_next i and C.X (i - 1) were canonically isomorphic in the following sense: the API for C.X_next includes def X_next_iso {i j : ι} (hcan : c.rel i j) : C.X_next i ≅ C.X j := ... and the secret thing which I know about this isomorphism is that it is canonical in that it is rfl modulo a rewrite which introduces an axiom hcan.rec where hcan : A = B is a proof of a possibly non-definitional equality of terms).

So could a "diagram chase lite" tactic be told about this X_next_iso fact, and then if you have a pair of maps like C.d_from i and C.d i j and a proof of c.rel i j, you can register this pair as being "canonically identified" in the system by providing the proof that the triangle with X_next_iso commutes; in this case, this is the lemma @[simp, reassoc] lemma d_from_comp_X_next_iso (r : c.rel i j) : C.d_from i ≫ (C.X_next_iso r).hom = C.d i j already in our API.

If f and g are two maps related in this way, with the same source X_i, then for any a : _ \hom X_i I will know exact a f <-> exact a g, because presumably we know exact a f <-> exact a (f >> (e : iso)). I would like to think of what just happened, changing that f to a g, as some kind of cool rewrite which avoids motive is not type correct errors. Is this anything close to a sensible idea or should I just be doing everything manually?

Reid Barton (Jun 01 2022 at 16:02):

Is C.d_from i == C.d i (i - 1)?

Reid Barton (Jun 01 2022 at 16:03):

C.d_from i ≫ (C.X_next_iso r).hom = C.d i j

Is (C.X_next_iso r).hom of the form eq_to_hom of something?

Reid Barton (Jun 01 2022 at 16:07):

Yeah, it is, so you could use an approach with convert. Or just prove a little lemma like exact f g -> exact (f >> i) (i.inv >> g) (probably got the order wrong).

Reid Barton (Jun 01 2022 at 16:10):

Or maybe you already think this goal is easy but you just want it to be even easier?

Adam Topaz (Jun 01 2022 at 16:11):

@Kevin Buzzard we have isomoprhisms between X_next and X_prev and X (i+1) and X (i-1), and the compatibility with d. So you compose with those isomorphisms to deduce exactness.

Kevin Buzzard (Jun 01 2022 at 16:13):

yeah I know, I'm just trying a more conceptual approach. My hypothesis is now
h : exact (e1.inv >> f) (g >> e2.hom) with goal exact f g. Do we have these "cancel iso" results?

Adam Topaz (Jun 01 2022 at 16:16):

by simp might work?

Adam Topaz (Jun 01 2022 at 16:16):

or by simpa using h.

Kevin Buzzard (Jun 01 2022 at 16:17):

annoyingly simp knows that e1.inv >> f is f' and rewrites to that. I'll remove the lemma.

Kevin Buzzard (Jun 01 2022 at 16:18):

  simpa [-homological_complex.X_prev_iso_comp_d_to, -homological_complex.d_from_comp_X_next_iso] using h,

does it :-)

Kevin Buzzard (Jun 01 2022 at 16:19):

simpa only [exact_comp_iso, exact_iso_comp] using h,

Kevin Buzzard (Jun 01 2022 at 16:21):

I see, so I could have been using the simplifier, I was just unlucky that some other rewrite removing the equiv triggered first.


Last updated: Dec 20 2023 at 11:08 UTC