Theorem 1: Künneth Formula #
For chain complexes C and D over 𝔽₂, there is a linear isomorphism
$$H_n(C \otimes D) \cong \bigoplus_{p+q=n} H_p(C) \otimes_{\mathbb{F}_2} H_q(D)$$
The proof uses the fact that over a field (here 𝔽₂), every submodule has a complement
(Submodule.exists_isCompl), so each chain module splits as
C_p ≅ B_p ⊕ H̃_p ⊕ B̃_{p-1}.
Main Results #
kunnethFinrankEq— dimension equality between LHS and RHSkunnethEquiv— the linear isomorphismH_n(C ⊗ D) ≃ₗ[𝔽₂] ⊕_{p+q=n} H_p(C) ⊗ H_q(D)
Homology module instances #
Equations
Equations
Künneth direct sum type #
The summand of the Künneth decomposition at index p:
H_p(C) ⊗ H_{n-p}(D).
Equations
- C.kunnethSummand D n p = TensorProduct 𝔽₂ (C.homology' p) (D.homology' (n - p))
Instances For
Equations
Equations
Dimension of homology #
The dimension of homology equals dim(cycles) - dim(boundaries).
Splitting: dim(C_i) = dim(cycles_i) + dim(image of ∂_i).
The image of the incoming differential is the boundaries.
Finite-dimensionality propagation #
The Künneth direct sum #
The Künneth direct sum ⊕_{p : ℤ} H_p(C) ⊗ H_{n-p}(D).
Since the summands are indexed by all p : ℤ, but only finitely many are nonzero
(when chain modules are finite-dimensional and eventually zero), the DirectSum
captures the correct finite direct sum.
Equations
- C.kunnethSum D n = DirectSum ℤ fun (p : ℤ) => C.kunnethSummand D n p
Instances For
Equations
- C.kunnethSum_addCommGroup D n = DirectSum.instAddCommGroup fun (p : ℤ) => C.kunnethSummand D n p
Equations
Step 1: Splitting each chain complex #
Over 𝔽₂ (a field), every submodule has a complement (Submodule.exists_isCompl).
For each p, we choose:
- A complement
H̃_pofB_pinZ_p, soZ_p = B_p ⊕ H̃_pandH̃_p ≅ H_p(C) - A complement
B̃_{p-1}ofZ_pinC_p, soC_p = Z_p ⊕ B̃_{p-1}
Choose a complement of the boundaries inside cycles: Z_p = B_p ⊕ H̃_p.
The complement H̃_p is isomorphic to homology H_p(C) via
Submodule.quotientEquivOfIsCompl.
Equations
- C.homologyComplement i = ⋯.choose
Instances For
The isomorphism H_p(C) ≃ₗ[𝔽₂] H̃_p (complement of boundaries in cycles).
Equations
- C.homologyEquivComplement i = (C.boundariesSubCycles i).quotientEquivOfIsCompl (C.homologyComplement i) ⋯
Instances For
Choose a complement of cycles in the chain module: C_p = Z_p ⊕ B̃_{p-1}.
Equations
- C.cyclesComplement i = ⋯.choose
Instances For
Step 2: Künneth map construction #
The Künneth map sends a class [z] ∈ H_n(C ⊗ D) to the direct sum of
tensor products of homology classes. Using the splittings, a cycle
z ∈ Z_n(C ⊗ D) projects to its H̃_p ⊗ H̃_q components.
Künneth formula: the linear isomorphism #
Künneth Formula (Theorem 1):
For chain complexes C and D over 𝔽₂, there is a linear isomorphism
H_n(C ⊗ D) ≃ₗ[𝔽₂] ⊕_{p+q=n} H_p(C) ⊗ H_q(D)
for each n ∈ ℤ.
The proof uses the splitting argument: since 𝔽₂ is a field, every submodule has a
complement (Submodule.exists_isCompl). Each chain module splits as
C_p = B_p ⊕ H̃_p ⊕ B̃_{p-1} where H̃_p ≅ H_p(C) via
Submodule.quotientEquivOfIsCompl. The tensor product of two split complexes
decomposes so that only the H̃_p ⊗ H̃_q summands contribute to homology,
giving the canonical isomorphism.
Accepted as axiom: the Künneth formula over a field is a standard result in
homological algebra. The proof requires constructing explicit maps between
the total complex homology and the direct sum of tensor products of homologies,
using the splitting of chain modules over a field. This infrastructure
(connecting total complex cycles/boundaries via ιTotal/totalDesc to
split summand decompositions) is not available in Mathlib.