|
| 1 | +/- |
| 2 | +Copyright (c) 2021 Scott Morrison. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Scott Morrison |
| 5 | +-/ |
| 6 | +import category_theory.derived |
| 7 | +import category_theory.monoidal.preadditive |
| 8 | + |
| 9 | +/-! |
| 10 | +# Tor, the left-derived functor of tensor product |
| 11 | +
|
| 12 | +We define `Tor C n : C ⥤ C ⥤ C`, by left-deriving in the second factor of `(X, Y) ↦ X ⊗ Y`. |
| 13 | +
|
| 14 | +For now we have almost nothing to say about it! |
| 15 | +
|
| 16 | +It would be good to show that this is naturally isomorphic to the functor obtained |
| 17 | +by left-deriving in the first factor, instead. |
| 18 | +For now we define `Tor'` by left-deriving in the first factor, |
| 19 | +but showing `Tor C n ≅ Tor' C n` will require a bit more theory! |
| 20 | +Possibly it's best to axiomatize delta functors, and obtain a unique characterisation? |
| 21 | +
|
| 22 | +-/ |
| 23 | + |
| 24 | +noncomputable theory |
| 25 | + |
| 26 | +open category_theory.limits |
| 27 | +open category_theory.monoidal_category |
| 28 | + |
| 29 | +namespace category_theory |
| 30 | + |
| 31 | +variables {C : Type*} [category C] [monoidal_category C] [preadditive C] [monoidal_preadditive C] |
| 32 | + [has_zero_object C] [has_equalizers C] [has_cokernels C] [has_images C] [has_image_maps C] |
| 33 | + [has_projective_resolutions C] |
| 34 | + |
| 35 | +variables (C) |
| 36 | + |
| 37 | +/-- We define `Tor C n : C ⥤ C ⥤ C` by left-deriving in the second factor of `(X, Y) ↦ X ⊗ Y`. -/ |
| 38 | +@[simps] |
| 39 | +def Tor (n : ℕ) : C ⥤ C ⥤ C := |
| 40 | +{ obj := λ X, functor.left_derived ((tensoring_left C).obj X) n, |
| 41 | + map := λ X Y f, nat_trans.left_derived ((tensoring_left C).map f) n, |
| 42 | + map_id' := λ X, by rw [(tensoring_left C).map_id, nat_trans.left_derived_id], |
| 43 | + map_comp' := λ X Y Z f g, by rw [(tensoring_left C).map_comp, nat_trans.left_derived_comp], } |
| 44 | + |
| 45 | +/-- An alternative definition of `Tor`, where we left-derive in the first factor instead. -/ |
| 46 | +@[simps] |
| 47 | +def Tor' (n : ℕ) : C ⥤ C ⥤ C := |
| 48 | +functor.flip |
| 49 | +{ obj := λ X, functor.left_derived ((tensoring_right C).obj X) n, |
| 50 | + map := λ X Y f, nat_trans.left_derived ((tensoring_right C).map f) n, |
| 51 | + map_id' := λ X, by rw [(tensoring_right C).map_id, nat_trans.left_derived_id], |
| 52 | + map_comp' := λ X Y Z f g, by rw [(tensoring_right C).map_comp, nat_trans.left_derived_comp], } |
| 53 | + |
| 54 | +open_locale zero_object |
| 55 | + |
| 56 | +/-- The higher `Tor` groups for `X` and `Y` are zero if `Y` is projective. -/ |
| 57 | +def Tor_succ_of_projective (X Y : C) [projective Y] (n : ℕ) : ((Tor C (n + 1)).obj X).obj Y ≅ 0 := |
| 58 | +((tensoring_left C).obj X).left_derived_obj_projective_succ n Y |
| 59 | + |
| 60 | +/-- The higher `Tor'` groups for `X` and `Y` are zero if `X` is projective. -/ |
| 61 | +def Tor'_succ_of_projective (X Y : C) [projective X] (n : ℕ) : |
| 62 | + ((Tor' C (n + 1)).obj X).obj Y ≅ 0 := |
| 63 | +-- This unfortunately needs a manual `dsimp`, to avoid a slow unification problem. |
| 64 | +begin |
| 65 | + dsimp only [Tor', functor.flip], |
| 66 | + exact ((tensoring_right C).obj Y).left_derived_obj_projective_succ n X |
| 67 | +end |
| 68 | + |
| 69 | +end category_theory |
0 commit comments