Shapes of homological complexes #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We define a structure complex_shape ι
for describing the shapes of homological complexes
indexed by a type ι
.
This is intended to capture chain complexes and cochain complexes, indexed by either ℕ
or ℤ
,
as well as more exotic examples.
Rather than insisting that the indexing type has a succ
function
specifying where differentials should go,
inside c : complex_shape
we have c.rel : ι → ι → Prop
,
and when we define homological_complex
we only allow nonzero differentials d i j
from i
to j
if c.rel i j
.
Further, we require that { j // c.rel i j }
and { i // c.rel i j }
are subsingletons.
This means that the shape consists of some union of lines, rays, intervals, and circles.
Convenience functions c.next
and c.prev
provide these related elements
when they exist, and return their input otherwise.
This design aims to avoid certain problems arising from dependent type theory.
In particular we never have to ensure morphisms d i : X i ⟶ X (succ i)
compose as
expected (which would often require rewriting by equations in the indexing type).
Instead such identities become separate proof obligations when verifying that a
complex we've constructed is of the desired shape.
If α
is an add_right_cancel_semigroup
, then we define up α : complex_shape α
,
the shape appropriate for cohomology,so d : X i ⟶ X j
is nonzero only when j = i + 1
,
as well as down α : complex_shape α
, appropriate for homology,
so d : X i ⟶ X j
is nonzero only when i = j + 1
.
(Later we'll introduce cochain_complex
and chain_complex
as abbreviations for
homological_complex
with one of these shapes baked in.)
- rel : ι → ι → Prop
- next_eq : ∀ {i j j' : ι}, self.rel i j → self.rel i j' → j = j'
- prev_eq : ∀ {i i' j : ι}, self.rel i j → self.rel i' j → i = i'
A c : complex_shape ι
describes the shape of a chain complex,
with chain groups indexed by ι
.
Typically ι
will be ℕ
, ℤ
, or fin n
.
There is a relation rel : ι → ι → Prop
,
and we will only allow a non-zero differential from i
to j
when rel i j
.
There are axioms which imply { j // c.rel i j }
and { i // c.rel i j }
are subsingletons.
This means that the shape consists of some union of lines, rays, intervals, and circles.
Below we define c.next
and c.prev
which provide these related elements.
Instances for complex_shape
- complex_shape.has_sizeof_inst
The complex shape where only differentials from each X.i
to itself are allowed.
This is mostly only useful so we can describe the relation of "related in k
steps" below.
The reverse of a complex_shape
.
An arbitary choice of index j
such that rel i j
, if such exists.
Returns i
otherwise.
An arbitary choice of index i
such that rel i j
, if such exists.
Returns j
otherwise.
The complex_shape
allowing differentials from X i
to X (i+a)
.
(For example when a = 1
, a cohomology theory indexed by ℕ
or ℤ
)
The complex_shape
allowing differentials from X (j+a)
to X j
.
(For example when a = 1
, a homology theory indexed by ℕ
or ℤ
)
The complex_shape
appropriate for cohomology, so d : X i ⟶ X j
only when j = i + 1
.
Equations
The complex_shape
appropriate for homology, so d : X i ⟶ X j
only when i = j + 1
.