@@ -5,7 +5,7 @@ Authors: Joël Riou
55-/
66module
77
8- public import Mathlib.Algebra.Homology.HomotopyCategory.HomComplex
8+ public import Mathlib.Algebra.Homology.HomotopyCategory.HomComplexCohomology
99public import Mathlib.Algebra.Homology.HomotopyCategory.SingleFunctors
1010
1111/-!
@@ -68,6 +68,40 @@ lemma δ_fromSingleMk {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
6868 · simp [δ_shape n n' (by lia), HomologicalComplex.shape K q q' (by simp; lia),
6969 fromSingleMk]
7070
71+ /-- Cochains of degree `n` from `(singleFunctor C p).obj X` to `K` identify
72+ to `X ⟶ K.X q` when `p + n = q`. -/
73+ noncomputable def fromSingleEquiv {p q n : ℤ} (h : p + n = q) :
74+ Cochain ((singleFunctor C p).obj X) K n ≃+ (X ⟶ K.X q) where
75+ toFun α := (HomologicalComplex.singleObjXSelf (.up ℤ) p X).inv ≫ α.v p q h
76+ invFun f := fromSingleMk f h
77+ left_inv α := by
78+ ext p' q' hpq'
79+ by_cases hp : p' = p
80+ · aesop
81+ · exact (HomologicalComplex.isZero_single_obj_X _ _ _ _ hp).eq_of_src _ _
82+ right_inv f := by simp
83+ map_add' := by simp
84+
85+ @[simp]
86+ lemma fromSingleMk_add {p q : ℤ} (f g : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
87+ fromSingleMk (f + g) h = fromSingleMk f h + fromSingleMk g h :=
88+ (fromSingleEquiv h).symm.map_add _ _
89+
90+ @[simp]
91+ lemma fromSingleMk_sub {p q : ℤ} (f g : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
92+ fromSingleMk (f - g) h = fromSingleMk f h - fromSingleMk g h :=
93+ (fromSingleEquiv h).symm.map_sub _ _
94+
95+ @[simp]
96+ lemma fromSingleMk_neg {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
97+ fromSingleMk (-f) h = -fromSingleMk f h :=
98+ (fromSingleEquiv h).symm.map_neg _
99+
100+ lemma fromSingleMk_surjective {p n : ℤ} (α : Cochain ((singleFunctor C p).obj X) K n)
101+ (q : ℤ) (h : p + n = q) :
102+ ∃ (f : X ⟶ K.X q), fromSingleMk f h = α :=
103+ (fromSingleEquiv h).symm.surjective α
104+
71105/-- Constructor for cochains to a single complex. -/
72106@[nolint unusedArguments]
73107noncomputable def toSingleMk {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (_ : p + n = q) :
@@ -113,6 +147,54 @@ noncomputable def fromSingleMk {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p +
113147 rw [Cochain.δ_fromSingleMk _ _ _ q' (by lia), hf]
114148 simp)
115149
150+ lemma fromSingleMk_surjective {p n : ℤ} (α : Cocycle ((singleFunctor C p).obj X) K n)
151+ (q : ℤ) (h : p + n = q) (q' : ℤ) (hq' : q + 1 = q') :
152+ ∃ (f : X ⟶ K.X q) (hf : f ≫ K.d q q' = 0 ), fromSingleMk f h q' hq' hf = α := by
153+ obtain ⟨f, hf⟩ := Cochain.fromSingleMk_surjective α.1 q h
154+ have hα := α.δ_eq_zero (n + 1 )
155+ rw [← hf, Cochain.δ_fromSingleMk _ _ _ q' (by lia)] at hα
156+ replace hα := Cochain.congr_v hα p q' (by lia)
157+ exact ⟨f, by simpa using hα, by ext : 1 ; assumption⟩
158+
159+ lemma fromSingleMk_add {p q : ℤ} (f g : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
160+ (q' : ℤ) (hq' : q + 1 = q') (hf : f ≫ K.d q q' = 0 ) (hg : g ≫ K.d q q' = 0 ) :
161+ fromSingleMk (f + g) h q' hq' (by simp [hf, hg]) =
162+ fromSingleMk f h q' hq' hf + fromSingleMk g h q' hq' hg := by
163+ cat_disch
164+
165+ lemma fromSingleMk_sub {p q : ℤ} (f g : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
166+ (q' : ℤ) (hq' : q + 1 = q') (hf : f ≫ K.d q q' = 0 ) (hg : g ≫ K.d q q' = 0 ) :
167+ fromSingleMk (f - g) h q' hq' (by simp [hf, hg]) =
168+ fromSingleMk f h q' hq' hf - fromSingleMk g h q' hq' hg := by
169+ cat_disch
170+
171+ lemma fromSingleMk_neg {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
172+ (q' : ℤ) (hq' : q + 1 = q') (hf : f ≫ K.d q q' = 0 ) :
173+ fromSingleMk (-f) h q' hq' (by simp [hf]) = - fromSingleMk f h q' hq' hf := by
174+ cat_disch
175+
176+ variable (X K) in
177+ @[simp]
178+ lemma fromSingleMk_zero {p q : ℤ} {n : ℤ} (h : p + n = q)
179+ (q' : ℤ) (hq' : q + 1 = q') :
180+ fromSingleMk (0 : X ⟶ K.X q) h q' hq' (by simp) = 0 := by
181+ cat_disch
182+
183+ lemma fromSingleMk_mem_coboundaries_iff {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
184+ (q' : ℤ) (hq' : q + 1 = q') (hf : f ≫ K.d q q' = 0 )
185+ (q'' : ℤ) (hq'' : q'' + 1 = q) :
186+ fromSingleMk f h q' hq' hf ∈ coboundaries _ _ _ ↔
187+ ∃ (g : X ⟶ K.X q''), g ≫ K.d q'' q = f := by
188+ rw [mem_coboundaries_iff _ (n - 1 ) (by simp)]
189+ constructor
190+ · rintro ⟨α, hα⟩
191+ obtain ⟨g, hg⟩ := Cochain.fromSingleMk_surjective α q'' (by lia)
192+ refine ⟨g, ?_⟩
193+ rw [← hg, fromSingleMk_coe, Cochain.δ_fromSingleMk _ _ _ _ h] at hα
194+ exact (Cochain.fromSingleEquiv h).symm.injective hα
195+ · rintro ⟨g, rfl⟩
196+ exact ⟨Cochain.fromSingleMk g (by lia), Cochain.δ_fromSingleMk _ _ _ _ h⟩
197+
116198/-- Constructor for cocycles to a single complex. -/
117199@[simps!]
118200noncomputable def toSingleMk {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (h : p + n = q)
0 commit comments