Skip to content

Commit c27c098

Browse files
Thmoas-Guanjoelriou
andcommitted
feat(Homology): bijection between Ext (#31697)
For `F : C ⥤ D` fully faithful functor between abelian category, if one of the following 1: `C` has enough projectives and `F` preserve projective object 2: `C` has enough injectives and `F` preserve injective object The induced map `Ext X Y n → Ext F(X) F(Y) n` is bijective. Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
1 parent 34a002f commit c27c098

File tree

4 files changed

+91
-0
lines changed

4 files changed

+91
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ public import Mathlib.Algebra.Homology.DerivedCategory.Ext.ExactSequences
570570
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.ExtClass
571571
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.Linear
572572
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.Map
573+
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.MapBijective
573574
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.TStructure
574575
public import Mathlib.Algebra.Homology.DerivedCategory.Fractions
575576
public import Mathlib.Algebra.Homology.DerivedCategory.FullyFaithful
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/-
2+
Copyright (c) 2025 Nailin Guan. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Nailin Guan
5+
-/
6+
module
7+
8+
public import Mathlib.Algebra.Category.Grp.Zero
9+
public import Mathlib.Algebra.FiveLemma
10+
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.EnoughInjectives
11+
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.EnoughProjectives
12+
public import Mathlib.Algebra.Homology.DerivedCategory.Ext.Map
13+
public import Mathlib.CategoryTheory.Preadditive.Injective.Preserves
14+
public import Mathlib.CategoryTheory.Preadditive.Projective.Preserves
15+
16+
/-!
17+
18+
# Bijections Between Ext
19+
20+
In this file, we show that the maps between `Ext` induced
21+
by a fully faithful exact functor `F : C ⥤ D` are bijective when either
22+
1. `F` preserves projective objects and `C` has enough projectives, or
23+
2. `F` preserves injective objects and `C` has enough injectives.
24+
25+
-/
26+
27+
@[expose] public section
28+
29+
universe w w' v v' u u'
30+
31+
namespace CategoryTheory
32+
33+
open Limits Abelian
34+
35+
variable {C : Type u} [Category.{v} C] [Abelian C]
36+
variable {D : Type u'} [Category.{v'} D] [Abelian D]
37+
38+
variable (F : C ⥤ D) [F.Additive] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
39+
40+
attribute [local simp] Ext.mapExactFunctor_comp Ext.mapExactFunctor_mk₀ Ext.mapExactFunctor_extClass
41+
42+
attribute [local instance] Ext.subsingleton_of_projective in
43+
lemma Functor.mapExt_bijective_of_preservesProjectiveObjects [F.Full] [F.Faithful] [HasExt.{w} C]
44+
[HasExt.{w'} D] [EnoughProjectives C] [F.PreservesProjectiveObjects] (X Y : C) (n : ℕ) :
45+
Function.Bijective (F.mapExtAddHom X Y n) := by
46+
induction n generalizing X with
47+
| zero => simpa [Ext.mapExactFunctor₀] using ⟨Faithful.map_injective, Full.map_surjective⟩
48+
| succ n hn =>
49+
let P : ProjectivePresentation X := Classical.arbitrary _
50+
let S := ShortComplex.mk _ _ (kernel.condition P.f)
51+
have : Projective (S.map F).X₂ := Functor.PreservesProjectiveObjects.projective_obj P.projective
52+
have hS : S.ShortExact := { exact := ShortComplex.exact_kernel P.f }
53+
exact AddMonoidHom.bijective_of_surjective_of_bijective_of_right_exact _ _ _ _
54+
(F.mapExtAddHom S.X₂ Y n) (F.mapExtAddHom S.X₁ Y n) (F.mapExtAddHom S.X₃ Y (n + 1))
55+
(by cat_disch) (by cat_disch)
56+
((ShortComplex.ab_exact_iff_function_exact _).1
57+
(Ext.contravariant_sequence_exact₁' hS Y n (n + 1) (add_comm 1 n)))
58+
((ShortComplex.ab_exact_iff_function_exact _).1
59+
(Ext.contravariant_sequence_exact₁' (hS.map F) (F.obj Y) n (n + 1) (add_comm 1 n)))
60+
(hn _).surjective (hn _)
61+
(fun x₃ ↦ Ext.contravariant_sequence_exact₃ hS _ x₃ (by subsingleton) (add_comm 1 n))
62+
(fun y₃ ↦ Ext.contravariant_sequence_exact₃ (hS.map F) _ y₃ (by subsingleton) (add_comm 1 n))
63+
64+
attribute [local instance] Ext.subsingleton_of_injective in
65+
lemma Functor.mapExt_bijective_of_preservesInjectiveObjects [F.Full] [F.Faithful] [HasExt.{w} C]
66+
[HasExt.{w'} D] [EnoughInjectives C] [F.PreservesInjectiveObjects] (X Y : C) (n : ℕ) :
67+
Function.Bijective (F.mapExtAddHom X Y n) := by
68+
induction n generalizing Y with
69+
| zero => simpa [Ext.mapExactFunctor₀] using ⟨Faithful.map_injective, Full.map_surjective⟩
70+
| succ n hn =>
71+
let I : InjectivePresentation Y := Classical.arbitrary _
72+
let S := ShortComplex.mk _ _ (cokernel.condition I.f)
73+
have : Injective (S.map F).X₂ := Functor.PreservesInjectiveObjects.injective_obj I.injective
74+
have hS : S.ShortExact := { exact := ShortComplex.exact_cokernel I.f }
75+
exact AddMonoidHom.bijective_of_surjective_of_bijective_of_right_exact _ _ _ _
76+
(F.mapExtAddHom X S.X₂ n) (F.mapExtAddHom X S.X₃ n) (F.mapExtAddHom X S.X₁ (n + 1))
77+
(by cat_disch) (by cat_disch)
78+
((ShortComplex.ab_exact_iff_function_exact _).mp
79+
(Ext.covariant_sequence_exact₃' X hS n (n + 1) rfl))
80+
((ShortComplex.ab_exact_iff_function_exact _).mp
81+
(Ext.covariant_sequence_exact₃' (F.obj X) (hS.map F) n (n + 1) rfl))
82+
(hn _).surjective (hn _)
83+
(fun x₁ ↦ Ext.covariant_sequence_exact₁ _ hS x₁ (by subsingleton) rfl)
84+
(fun y₁ ↦ Ext.covariant_sequence_exact₁ _ (hS.map F) y₁ (by subsingleton) rfl)
85+
86+
end CategoryTheory

Mathlib/CategoryTheory/Preadditive/Injective/Basic.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class EnoughInjectives : Prop where
6666

6767
attribute [inherit_doc EnoughInjectives] EnoughInjectives.presentation
6868

69+
attribute [instance low] EnoughInjectives.presentation
70+
6971
end
7072

7173
namespace Injective

Mathlib/CategoryTheory/Preadditive/Projective/Basic.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ an epimorphism `P ↠ X`. -/
7777
class EnoughProjectives : Prop where
7878
presentation : ∀ X : C, Nonempty (ProjectivePresentation X)
7979

80+
attribute [instance low] EnoughProjectives.presentation
81+
8082
end
8183

8284
namespace Projective

0 commit comments

Comments
 (0)