Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(category_theory): left-derived functors #7487

Closed
wants to merge 152 commits into from
Closed
Show file tree
Hide file tree
Changes from 150 commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
ce8b14e
feat(category_theory/.../images): image.pre_comp_epi_of_epi
semorrison May 4, 2021
2ab67aa
feat(category_theory/.../zero): if a zero morphism is a mono, the sou…
semorrison May 4, 2021
dc8ac57
add simp lemmas
semorrison May 4, 2021
410a946
feat(category_theory/.../additive_functor): additive functors preserv…
semorrison May 4, 2021
25a6827
feat(category_theory/preadditive): reformulation of mono_of_kernel_zero
semorrison May 4, 2021
7e13d1b
feat(category_theory/quotient): the quotient functor is full and esse…
semorrison May 4, 2021
6fa9bfe
feat(category_theory/subobject): minor tweaks
semorrison May 4, 2021
62850b8
Merge branch 'subobject2' into subobject_limits
semorrison May 4, 2021
d6169aa
feat(category_theory/subobjects): more about kernel and image subobjects
semorrison May 4, 2021
3caf09d
minor
semorrison May 4, 2021
292109b
Merge branch 'subobject_limits' into homology_redesign
semorrison May 4, 2021
79e72a0
Merge branch 'subobject2' into subobject_limits
semorrison May 4, 2021
01f2cc4
Merge branch 'subobject_limits' into homology_redesign
semorrison May 4, 2021
723796d
Merge branch 'mono_of_kernel_iso_zero' into homology_redesign
semorrison May 4, 2021
a4635dc
Merge branch 'zero' into homology_redesign
semorrison May 4, 2021
b9c853b
feat(algebra/homology): redesign of homological complexes
semorrison May 4, 2021
5feee94
feat(algebra/homology/single): chain complexes supported in a single …
semorrison May 4, 2021
bc59d44
oops
semorrison May 4, 2021
7e30250
Merge branch 'homology_redesign' into homology_single
semorrison May 4, 2021
5f441a0
feat(algebra/homology): chain complexes are an additive category
semorrison May 4, 2021
f2c531f
Merge branch 'functor.map_zero_object' into homology_additive
semorrison May 4, 2021
10b42c1
feat(algebra/homology): homotopies between chain maps
semorrison May 4, 2021
f1ebd3c
Merge branch 'quotient_functor' into homotopy_category
semorrison May 4, 2021
08065fd
feat(algebra/homology): the homotopy category
semorrison May 4, 2021
76676a9
Update src/category_theory/quotient.lean
jcommelin May 4, 2021
f2be42d
feat(category_theory/*/projective): refactor treatment of projective …
semorrison May 4, 2021
a0a456b
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 4, 2021
dac539f
feat(algebra/homology): projective resolutions
semorrison May 4, 2021
8e77d33
feat(category_theory): left-derived functors
semorrison May 4, 2021
683ac43
Apply suggestions from code review
semorrison May 4, 2021
d863225
should have linted first
semorrison May 4, 2021
5dae933
Merge branch 'functor.map_zero_object' into homology_additive
semorrison May 4, 2021
6b3b49e
Merge branch 'homology_additive' into homotopy
semorrison May 4, 2021
7017a60
Merge branch 'homotopy' into homotopy_category
semorrison May 4, 2021
1e60c98
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 4, 2021
bf979cf
Merge branch 'projective_resolution3' into derived
semorrison May 4, 2021
4a1cced
feat(category_theory/quotient): congruence relations
dwarn May 4, 2021
121b4d6
lint
semorrison May 5, 2021
c7d83b7
Merge branch 'zero' of github.com:leanprover-community/mathlib into zero
semorrison May 5, 2021
139c457
removing a simps that was unnecessary, and resulting in a linter timeout
semorrison May 5, 2021
52f82ac
Merge branch 'zero' into homology_redesign
semorrison May 5, 2021
4932b5c
Merge branch 'subobject_limits' into homology_redesign
semorrison May 5, 2021
3d1e61b
Merge branch 'homology_redesign' into homology_single
semorrison May 5, 2021
33bae46
lint
semorrison May 5, 2021
7851222
Merge branch 'homology_single' into homology_additive
semorrison May 5, 2021
f876567
linting
semorrison May 5, 2021
02bee65
lint
semorrison May 5, 2021
785df14
Merge branch 'homotopy' into homotopy_category
semorrison May 5, 2021
67af120
Merge branch 'homology_redesign' into projective_refactor
semorrison May 5, 2021
7cfd26a
has_zero_object
semorrison May 5, 2021
d12d371
Merge branch 'homology_redesign' into homotopy_category
semorrison May 5, 2021
9e62459
lint
semorrison May 5, 2021
0a035c2
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 5, 2021
efeca52
Merge branch 'projective_refactor' into projective_resolution3
semorrison May 5, 2021
e8e4da6
Merge branch 'projective_resolution3' into derived
semorrison May 5, 2021
f5be39a
minor
semorrison May 5, 2021
944a0d7
Merge branch 'homology_additive' into homotopy
semorrison May 5, 2021
7a49620
Merge branch 'homotopy' into homotopy_category
semorrison May 5, 2021
c75e4ba
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 5, 2021
d239c1b
Merge branch 'projective_resolution3' into derived
semorrison May 5, 2021
b10114e
docstrings
dwarn May 5, 2021
7c2d060
add two simp lemmas
semorrison May 5, 2021
e7e95af
merge
semorrison May 6, 2021
9d55e3f
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 6, 2021
038d380
Merge branch 'projective_resolution3' into derived
semorrison May 6, 2021
678691d
Merge remote-tracking branch 'origin/master' into subobject_limits
semorrison May 6, 2021
0dda372
Merge branch 'subobject_limits' into homology_redesign
semorrison May 6, 2021
04370fd
Merge remote-tracking branch 'origin/master' into quotient_cats
dwarn May 6, 2021
ead1692
oops
dwarn May 6, 2021
09594ab
Merge branch 'master' into homology_redesign
jcommelin May 7, 2021
784ba97
Merge remote-tracking branch 'origin/master' into quotient_cats
dwarn May 8, 2021
e757bab
process most of the comments
jcommelin May 10, 2021
93bd9c7
one more
jcommelin May 10, 2021
9501d73
process comments
jcommelin May 11, 2021
9b6df47
add tfae
jcommelin May 11, 2021
3eeb4aa
Merge branch 'homology_redesign' into homology_single
semorrison May 11, 2021
c8b63e3
fix comment
semorrison May 11, 2021
b937790
Merge branch 'homology_redesign' into homology_single
semorrison May 11, 2021
a924290
Merge branch 'homology_single' into homology_additive
semorrison May 11, 2021
91d4c0c
Merge branch 'homology_additive' into homotopy
semorrison May 11, 2021
f216c73
Merge branch 'homotopy' into homotopy_category
semorrison May 11, 2021
43a6c6d
fix
semorrison May 11, 2021
9954845
Merge branch 'homology_redesign' into projective_refactor
semorrison May 11, 2021
18c4030
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 11, 2021
713601a
Merge branch 'projective_refactor' into projective_resolution3
semorrison May 11, 2021
b53a0be
Merge branch 'projective_resolution3' into derived
semorrison May 11, 2021
03697d4
fix
semorrison May 11, 2021
5983ab6
fix
semorrison May 11, 2021
d1deb9e
merge
semorrison May 11, 2021
fcc3267
merge
semorrison May 11, 2021
0fa0223
Merge branch 'homology_additive' into homotopy
semorrison May 11, 2021
5616666
Merge branch 'homotopy' into homotopy_category
semorrison May 11, 2021
bffc273
merge
semorrison May 11, 2021
7fc79d2
Merge branch 'projective_resolution3' into derived
semorrison May 11, 2021
b7db063
rename to single₀, add natural isomorphism
semorrison May 12, 2021
e2e2f5a
Merge remote-tracking branch 'origin/master' into homology_single
semorrison May 12, 2021
b8efab9
full and faithful instances
semorrison May 12, 2021
2c9eceb
oops
semorrison May 13, 2021
9ac32cc
doc-string
semorrison May 13, 2021
59f9bda
Merge branch 'homology_single' into homology_additive
semorrison May 13, 2021
85a37ea
update
semorrison May 13, 2021
dff5aa6
Merge remote-tracking branch 'origin/master' into homology_additive
semorrison May 14, 2021
1688047
Merge branch 'homology_additive' into homotopy
semorrison May 14, 2021
b739577
Apply suggestions from code review
semorrison May 14, 2021
e1a97af
simp lemmas
semorrison May 14, 2021
d1f2adf
Merge branch 'homology_additive' of github.com:leanprover-community/m…
semorrison May 14, 2021
5fa5aa2
add single_map_homological_complex
semorrison May 14, 2021
78fb66f
add single_map_homological_complex
semorrison May 14, 2021
b7a7d46
Update src/algebra/homology/additive.lean
semorrison May 14, 2021
a29887a
Merge branch 'homotopy' into homotopy_category
semorrison May 14, 2021
4c75b75
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 14, 2021
824d882
Merge branch 'projective_resolution3' into derived
semorrison May 14, 2021
9a88097
fix comment
semorrison May 14, 2021
729a2b5
Merge branch 'homology_additive' of github.com:leanprover-community/m…
semorrison May 14, 2021
8bfae6f
Merge branch 'homology_additive' into homotopy
semorrison May 14, 2021
ef7e892
Merge branch 'homotopy' into homotopy_category
semorrison May 14, 2021
d0f3690
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 14, 2021
d7d335f
renaming
semorrison May 14, 2021
c9a2077
Merge branch 'projective_resolution3' into derived
semorrison May 14, 2021
28d8dde
finish rename
semorrison May 14, 2021
2412361
Merge branch 'master' into homotopy
jcommelin May 14, 2021
7101cf3
Apply suggestions from code review
semorrison May 15, 2021
a549c11
cleanup
semorrison May 15, 2021
05b513d
Merge branch 'homotopy' of github.com:leanprover-community/mathlib in…
semorrison May 15, 2021
004ff03
remove unnecessary arguments
semorrison May 15, 2021
21a8591
Merge branch 'homotopy' into homotopy_category
semorrison May 15, 2021
28225ba
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 15, 2021
6186c5f
use #7501
semorrison May 15, 2021
44b8d61
Blah
adamtopaz May 15, 2021
7fd6059
Merge remote-tracking branch 'origin/master' into homotopy_category
semorrison May 16, 2021
735b504
Swap term order to match, and fill in some sorries
semorrison May 16, 2021
f3e855b
working again
semorrison May 16, 2021
7aaae8e
Merge branch 'homotopy_fix' into homotopy_category
semorrison May 16, 2021
f64fec3
merge
semorrison May 17, 2021
6fa5125
Merge remote-tracking branch 'origin/master' into projective_resolution3
semorrison May 17, 2021
2d225a4
Merge branch 'projective_resolution3' into derived
semorrison May 17, 2021
3377bc5
fix
semorrison May 17, 2021
1b94235
Merge branch 'projective_resolution3' into derived
semorrison May 17, 2021
1eaba69
Make `d_next` and friends into `add_monoid_hom`s
jcommelin May 17, 2021
376f50e
Merge branch 'homotopy_fix' into homotopy_category
semorrison May 17, 2021
6613d2c
lint
semorrison May 17, 2021
61a1a57
Merge branch 'homotopy_category' into projective_resolution3
semorrison May 18, 2021
6cfa886
Merge branch 'projective_resolution3' into derived
semorrison May 18, 2021
50a46a7
lint
semorrison May 18, 2021
303b0d7
merge
semorrison May 20, 2021
b9728f3
Merge branch 'projective_resolution3' into derived
semorrison May 20, 2021
4ff8fb7
merge
semorrison May 31, 2021
c368ab3
some tweaks
jcommelin Jul 2, 2021
2b9f53b
Revert "some tweaks"
jcommelin Jul 3, 2021
218e8c5
use open_locale
jcommelin Jul 3, 2021
82186d7
add simps
jcommelin Jul 3, 2021
3a7238f
Update src/category_theory/derived.lean
jcommelin Jul 3, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/algebra/homology/homology.lean
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,8 @@ variables (V c)
naturality' := λ C₁ C₂ f, boundaries_to_cycles_naturality f i, }

/-- The `i`-th homology, as a functor to `V`. -/
@[simps] def homology_functor [has_cokernels V] (i : ι) :
@[simps]
def homology_functor [has_cokernels V] (i : ι) :
homological_complex V c ⥤ V :=
-- It would be nice if we could just write
-- `cokernel (boundaries_to_cycles_nat_trans V c i)`
Expand Down
179 changes: 179 additions & 0 deletions src/category_theory/derived.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
/-
Copyright (c) 2021 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
import category_theory.preadditive.projective_resolution

/-!
# Left-derived functors

We define the left-derived functors `F.left_derived n : C ⥤ D` for any additive functor `F`
out of a category with projective resolutions.

The definition is
```
projective_resolutions C ⋙ F.map_homotopy_category _ ⋙ homotopy_category.homology_functor D _ n
jcommelin marked this conversation as resolved.
Show resolved Hide resolved
```
that is, we pick a projective resolution (thought of as an object of the homotopy category),
we apply `F` objectwise, and compute `n`-th homology.

We show that these left-derived functors can be calculated
on objects using any choice of projective resolution,
and on morphisms by any choice of lift to a chain map between chosen projective resolutions.

Similarly we define natural transformations between left-derived functors coming from
natural transformations between the original additive functors,
and show how to compute the components.

## Implementation

We don't assume the categories involved are abelian
(just preadditive, and have equalizers, cokernels, and image maps),
or that the functors are right exact.
None of these assumptions are needed yet.

It is often convenient, of course, to work with `[abelian C] [enough_projectives C] [abelian D]`
which (assuming the results from `category_theory.abelian.projective`) are enough to
provide all the typeclass hypotheses assumed here.
-/

noncomputable theory

open category_theory
open category_theory.limits

universes v u

namespace category_theory
variables {C : Type u} [category.{v} C] {D : Type*} [category D]

-- Importing `category_theory.abelian.projective` and assuming
-- `[abelian C] [enough_projectives C] [abelian D]` suffices to acquire all the following:
variables [preadditive C] [has_zero_object C] [has_equalizers C]
[has_images C] [has_projective_resolutions C]
variables [preadditive D] [has_zero_object D] [has_equalizers D] [has_cokernels D]
[has_images D] [has_image_maps D]

/-- The left derived functors of an additive functor. -/
def functor.left_derived (F : C ⥤ D) [F.additive] (n : ℕ) : C ⥤ D :=
projective_resolutions C ⋙ F.map_homotopy_category _ ⋙ homotopy_category.homology_functor D _ n

-- TODO the left derived functors are additive (and linear when `F` is linear)

/-- We can compute a left derived functor using a chosen projective resolution. -/
def functor.left_derived_obj_iso (F : C ⥤ D) [F.additive] (n : ℕ)
{X : C} (P : ProjectiveResolution X) :
(F.left_derived n).obj X ≅
(homology_functor D _ n).obj ((F.map_homological_complex _).obj P.complex) :=
(homotopy_category.homology_functor D _ n).map_iso
(homotopy_category.iso_of_homotopy_equiv
(F.map_homotopy_equiv (ProjectiveResolution.homotopy_equiv _ P)))
≪≫ (homotopy_category.homology_factors D _ n).app _

/-- The 0-th derived functor on a projective object `X` is just `X`. -/
jcommelin marked this conversation as resolved.
Show resolved Hide resolved
def functor.left_derived_obj_projective_zero (F : C ⥤ D) [F.additive]
(X : C) [projective X] :
(F.left_derived 0).obj X ≅ F.obj X :=
F.left_derived_obj_iso 0 (ProjectiveResolution.self X) ≪≫
(homology_functor _ _ _).map_iso ((chain_complex.single₀_map_homological_complex F).app X) ≪≫
(chain_complex.homology_functor_0_single₀ D).app (F.obj X)

open_locale zero_object

/-- The higher derived functors vanish on projective objects. -/
def functor.left_derived_obj_projective_succ (F : C ⥤ D) [F.additive] (n : ℕ)
(X : C) [projective X] :
(F.left_derived (n+1)).obj X ≅ 0 :=
F.left_derived_obj_iso (n+1) (ProjectiveResolution.self X) ≪≫
(homology_functor _ _ _).map_iso ((chain_complex.single₀_map_homological_complex F).app X) ≪≫
(chain_complex.homology_functor_succ_single₀ D n).app (F.obj X)

/--
We can compute a left derived functor on a morphism using a lift of that morphism
to a chain map between chosen projective resolutions.
-/
lemma functor.left_derived_map_eq (F : C ⥤ D) [F.additive] (n : ℕ) {X Y : C} (f : X ⟶ Y)
{P : ProjectiveResolution X} {Q : ProjectiveResolution Y} (g : P.complex ⟶ Q.complex)
(w : g ≫ Q.π = P.π ≫ (chain_complex.single₀ C).map f) :
(F.left_derived n).map f =
(F.left_derived_obj_iso n P).hom ≫
(homology_functor D _ n).map ((F.map_homological_complex _).map g) ≫
(F.left_derived_obj_iso n Q).inv :=
begin
dsimp only [functor.left_derived, functor.left_derived_obj_iso],
dsimp, simp only [category.comp_id, category.id_comp],
rw [←homology_functor_map, homotopy_category.homology_functor_map_factors],
simp only [←functor.map_comp],
congr' 1,
apply homotopy_category.eq_of_homotopy,
apply functor.map_homotopy,
apply homotopy.trans,
exact homotopy_category.homotopy_out_map _,
apply ProjectiveResolution.lift_homotopy f,
{ simp, },
{ simp [w], },
end

/-- The natural transformation between left-derived functors induced by a natural transformation. -/
def nat_trans.left_derived {F G : C ⥤ D} [F.additive] [G.additive] (α : F ⟶ G) (n : ℕ) :
F.left_derived n ⟶ G.left_derived n :=
whisker_left (projective_resolutions C)
(whisker_right (nat_trans.map_homotopy_category α _)
(homotopy_category.homology_functor D _ n))

@[simp] lemma nat_trans.left_derived_id (F : C ⥤ D) [F.additive] (n : ℕ) :
nat_trans.left_derived (𝟙 F) n = 𝟙 (F.left_derived n) :=
by { simp [nat_trans.left_derived], refl, }

-- The `simp_nf` linter times out here, so we disable it.
@[simp, nolint simp_nf] lemma nat_trans.left_derived_comp
{F G H : C ⥤ D} [F.additive] [G.additive] [H.additive]
(α : F ⟶ G) (β : G ⟶ H) (n : ℕ) :
nat_trans.left_derived (α ≫ β) n = nat_trans.left_derived α n ≫ nat_trans.left_derived β n :=
by simp [nat_trans.left_derived]

/--
A component of the natural transformation between left-derived functors can be computed
using a chosen projective resolution.
-/
lemma nat_trans.left_derived_eq {F G : C ⥤ D} [F.additive] [G.additive] (α : F ⟶ G) (n : ℕ)
{X : C} (P : ProjectiveResolution X) :
(nat_trans.left_derived α n).app X =
(F.left_derived_obj_iso n P).hom ≫
(homology_functor D _ n).map ((nat_trans.map_homological_complex α _).app P.complex) ≫
(G.left_derived_obj_iso n P).inv :=
begin
symmetry,
dsimp [nat_trans.left_derived, functor.left_derived_obj_iso],
simp only [category.comp_id, category.id_comp],
rw [←homology_functor_map, homotopy_category.homology_functor_map_factors],
simp only [←functor.map_comp],
congr' 1,
apply homotopy_category.eq_of_homotopy,
simp only [nat_trans.map_homological_complex_naturality_assoc,
←functor.map_comp],
apply homotopy.comp_left_id,
rw [←functor.map_id],
apply functor.map_homotopy,
apply homotopy_equiv.homotopy_hom_inv_id,
end

-- TODO:
-- lemma nat_trans.left_derived_projective_zero {F G : C ⥤ D} [F.additive] [G.additive] (α : F ⟶ G)
-- (X : C) [projective X] :
-- (nat_trans.left_derived α 0).app X =
-- (F.left_derived_obj_projective_zero X).hom ≫
-- α.app X ≫
-- (G.left_derived_obj_projective_zero X).inv := sorry

-- TODO:
-- lemma nat_trans.left_derived_projective_succ {F G : C ⥤ D} [F.additive] [G.additive] (α : F ⟶ G)
-- (n : ℕ) (X : C) [projective X] :
-- (nat_trans.left_derived α (n+1)).app X = 0 := sorry

-- TODO left-derived functors of the identity functor are the identity
-- (requires we assume `abelian`?)
-- PROJECT left-derived functors of a composition (Grothendieck sequence)

end category_theory