Chain homotopies #
We define chain homotopies, and prove that homotopic chain maps induce the same map on homology.
The composition of C.d i (c.next i) ≫ f (c.next i) i
.
Equations
- dNext i = AddMonoidHom.mk' (fun (f : (i j : ι) → C.X i ⟶ D.X j) => CategoryTheory.CategoryStruct.comp (C.d i (c.next i)) (f (c.next i) i)) ⋯
Instances For
f (c.next i) i
.
Equations
- fromNext i = AddMonoidHom.mk' (fun (f : (i j : ι) → C.X i ⟶ D.X j) => f (c.next i) i) ⋯
Instances For
The composition f j (c.prev j) ≫ D.d (c.prev j) j
.
Equations
- prevD j = AddMonoidHom.mk' (fun (f : (i j : ι) → C.X i ⟶ D.X j) => CategoryTheory.CategoryStruct.comp (f j (c.prev j)) (D.d (c.prev j) j)) ⋯
Instances For
f j (c.prev j)
.
Equations
- toPrev j = AddMonoidHom.mk' (fun (f : (i j : ι) → C.X i ⟶ D.X j) => f j (c.prev j)) ⋯
Instances For
A homotopy h
between chain maps f
and g
consists of components h i j : C.X i ⟶ D.X j
which are zero unless c.Rel j i
, satisfying the homotopy condition.
- hom (i j : ι) : C.X i ⟶ D.X j
Instances For
f
is homotopic to g
iff f - g
is homotopic to 0
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equal chain maps are homotopic.
Equations
- Homotopy.ofEq h = { hom := 0, zero := ⋯, comm := ⋯ }
Instances For
Every chain map is homotopic to itself.
Equations
Instances For
f
is homotopic to g
iff g
is homotopic to f
.
Instances For
homotopy is a transitive relation.
Instances For
the sum of two homotopies is a homotopy between the sum of the respective morphisms.
Instances For
the scalar multiplication of an homotopy
Instances For
homotopy is closed under composition (on the right)
Equations
- h.compRight g = { hom := fun (i j : ι) => CategoryTheory.CategoryStruct.comp (h.hom i j) (g.f j), zero := ⋯, comm := ⋯ }
Instances For
homotopy is closed under composition (on the left)
Equations
- h.compLeft e = { hom := fun (i j : ι) => CategoryTheory.CategoryStruct.comp (e.f i) (h.hom i j), zero := ⋯, comm := ⋯ }
Instances For
homotopy is closed under composition
Equations
- h₁.comp h₂ = (h₁.compRight f₂).trans (h₂.compLeft g₁)
Instances For
a variant of Homotopy.compRight
useful for dealing with homotopy equivalences.
Equations
- h.compRightId g = (h.compRight g).trans (Homotopy.ofEq ⋯)
Instances For
a variant of Homotopy.compLeft
useful for dealing with homotopy equivalences.
Equations
- h.compLeftId g = (h.compLeft g).trans (Homotopy.ofEq ⋯)
Instances For
Null homotopic maps can be constructed using the formula hd+dh
. We show that
these morphisms are homotopic to 0
and provide some convenient simplification
lemmas that give a degreewise description of hd+dh
, depending on whether we have
two differentials going to and from a certain degree, only one, or none.
The null homotopic map associated to a family hom
of morphisms C_i ⟶ D_j
.
This is the same datum as for the field hom
in the structure Homotopy
. For
this definition, we do not need the field zero
of that structure
as this definition uses only the maps C_i ⟶ C_j
when c.Rel j i
.
Equations
- Homotopy.nullHomotopicMap hom = { f := fun (i : ι) => (dNext i) hom + (prevD i) hom, comm' := ⋯ }
Instances For
Variant of nullHomotopicMap
where the input consists only of the
relevant maps C_i ⟶ D_j
such that c.Rel j i
.
Equations
- Homotopy.nullHomotopicMap' h = Homotopy.nullHomotopicMap fun (i j : ι) => dite (c.Rel j i) (h i j) fun (x : ¬c.Rel j i) => 0
Instances For
Compatibility of nullHomotopicMap
with the postcomposition by a morphism
of complexes.
Compatibility of nullHomotopicMap'
with the postcomposition by a morphism
of complexes.
Compatibility of nullHomotopicMap
with the precomposition by a morphism
of complexes.
Compatibility of nullHomotopicMap'
with the precomposition by a morphism
of complexes.
Compatibility of nullHomotopicMap
with the application of additive functors
Compatibility of nullHomotopicMap'
with the application of additive functors
Tautological construction of the Homotopy
to zero for maps constructed by
nullHomotopicMap
, at least when we have the zero
condition.
Equations
- Homotopy.nullHomotopy hom zero = { hom := hom, zero := zero, comm := ⋯ }
Instances For
Homotopy to zero for maps constructed with nullHomotopicMap'
Equations
- Homotopy.nullHomotopy' h = Homotopy.nullHomotopy (fun (i j : ι) => dite (c.Rel j i) (h i j) fun (x : ¬c.Rel j i) => 0) ⋯
Instances For
This lemma and the following ones can be used in order to compute
the degreewise morphisms induced by the null homotopic maps constructed
with nullHomotopicMap
or nullHomotopicMap'
Homotopy.mkInductive
allows us to build a homotopy of chain complexes inductively,
so that as we construct each component, we have available the previous two components,
and the fact that they satisfy the homotopy condition.
To simplify the situation, we only construct homotopies of the form Homotopy e 0
.
Homotopy.equivSubZero
can provide the general case.
Notice however, that this construction does not have particularly good definitional properties:
we have to insert eqToHom
in several places.
Hopefully this is okay in most applications, where we only need to have the existence of some
homotopy.
An auxiliary construction for mkInductive
.
Here we build by induction a family of diagrams,
but don't require at the type level that these successive diagrams actually agree.
They do in fact agree, and we then capture that at the type level (i.e. by constructing a homotopy)
in mkInductive
.
At this stage, we don't check the homotopy condition in degree 0,
because it "falls off the end", and is easier to treat using xNext
and xPrev
,
which we do in mkInductiveAux₂
.
Equations
- One or more equations did not get rendered due to their size.
- Homotopy.mkInductiveAux₁ e zero one comm_one succ 0 = ⟨zero, ⟨one, comm_one⟩⟩
- Homotopy.mkInductiveAux₁ e zero one comm_one succ 1 = ⟨one, ⟨(succ 0 ⟨zero, ⟨one, comm_one⟩⟩).fst, ⋯⟩⟩
Instances For
An auxiliary construction for mkInductive
.
Equations
- One or more equations did not get rendered due to their size.
- Homotopy.mkInductiveAux₂ e zero comm_zero one comm_one succ 0 = ⟨0, ⟨CategoryTheory.CategoryStruct.comp zero (HomologicalComplex.xPrevIso Q Homotopy.mkInductiveAux₂.proof_1).inv, ⋯⟩⟩
Instances For
A constructor for a Homotopy e 0
, for e
a chain map between ℕ
-indexed chain complexes,
working by induction.
You need to provide the components of the homotopy in degrees 0 and 1, show that these satisfy the homotopy condition, and then give a construction of each component, and the fact that it satisfies the homotopy condition, using as an inductive hypothesis the data and homotopy condition for the previous two components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Homotopy.mkCoinductive
allows us to build a homotopy of cochain complexes inductively,
so that as we construct each component, we have available the previous two components,
and the fact that they satisfy the homotopy condition.
An auxiliary construction for mkCoinductive
.
Here we build by induction a family of diagrams,
but don't require at the type level that these successive diagrams actually agree.
They do in fact agree, and we then capture that at the type level (i.e. by constructing a homotopy)
in mkCoinductive
.
At this stage, we don't check the homotopy condition in degree 0,
because it "falls off the end", and is easier to treat using xNext
and xPrev
,
which we do in mkInductiveAux₂
.
Equations
- One or more equations did not get rendered due to their size.
- Homotopy.mkCoinductiveAux₁ e zero one comm_one succ 0 = ⟨zero, ⟨one, comm_one⟩⟩
- Homotopy.mkCoinductiveAux₁ e zero one comm_one succ 1 = ⟨one, ⟨(succ 0 ⟨zero, ⟨one, comm_one⟩⟩).fst, ⋯⟩⟩
Instances For
An auxiliary construction for mkInductive
.
Equations
- One or more equations did not get rendered due to their size.
- Homotopy.mkCoinductiveAux₂ e zero comm_zero one comm_one succ 0 = ⟨0, ⟨CategoryTheory.CategoryStruct.comp (HomologicalComplex.xNextIso P Homotopy.mkCoinductiveAux₂.proof_1).hom zero, ⋯⟩⟩
Instances For
A constructor for a Homotopy e 0
, for e
a chain map between ℕ
-indexed cochain complexes,
working by induction.
You need to provide the components of the homotopy in degrees 0 and 1, show that these satisfy the homotopy condition, and then give a construction of each component, and the fact that it satisfies the homotopy condition, using as an inductive hypothesis the data and homotopy condition for the previous two components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A homotopy equivalence between two chain complexes consists of a chain map each way, and homotopies from the compositions to the identity chain maps.
Note that this contains data; arguably it might be more useful for many applications if we truncated it to a Prop.
- hom : C ⟶ D
- inv : D ⟶ C
- homotopyHomInvId : Homotopy (CategoryTheory.CategoryStruct.comp self.hom self.inv) (CategoryTheory.CategoryStruct.id C)
- homotopyInvHomId : Homotopy (CategoryTheory.CategoryStruct.comp self.inv self.hom) (CategoryTheory.CategoryStruct.id D)
Instances For
The morphism property on HomologicalComplex V c
given by homotopy equivalences.
Equations
- HomologicalComplex.homotopyEquivalences V c f = ∃ (e : HomotopyEquiv X Y), e.hom = f
Instances For
Any complex is homotopy equivalent to itself.
Equations
- HomotopyEquiv.refl C = { hom := CategoryTheory.CategoryStruct.id C, inv := CategoryTheory.CategoryStruct.id C, homotopyHomInvId := Homotopy.ofEq ⋯, homotopyInvHomId := Homotopy.ofEq ⋯ }
Instances For
Equations
- HomotopyEquiv.instInhabited = { default := HomotopyEquiv.refl C }
Being homotopy equivalent is a symmetric relation.
Equations
- f.symm = { hom := f.inv, inv := f.hom, homotopyHomInvId := f.homotopyInvHomId, homotopyInvHomId := f.homotopyHomInvId }
Instances For
Homotopy equivalence is a transitive relation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An isomorphism of complexes induces a homotopy equivalence.
Equations
- HomotopyEquiv.ofIso f = { hom := f.hom, inv := f.inv, homotopyHomInvId := Homotopy.ofEq ⋯, homotopyInvHomId := Homotopy.ofEq ⋯ }
Instances For
An additive functor takes homotopies to homotopies.
Equations
- F.mapHomotopy h = { hom := fun (i j : ι) => F.map (h.hom i j), zero := ⋯, comm := ⋯ }
Instances For
An additive functor preserves homotopy equivalences.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A homotopy between morphisms of homological complexes K ⟶ L
induces a homotopy
between morphisms of short complexes K.sc i ⟶ L.sc i
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The isomorphism in homology induced by an homotopy equivalence.
Equations
- h.toHomologyIso i = { hom := HomologicalComplex.homologyMap h.hom i, inv := HomologicalComplex.homologyMap h.inv i, hom_inv_id := ⋯, inv_hom_id := ⋯ }