Skip to main content

Cohomology of free loop space

Here is an example script computing the cohomology of the free loop space of the even dimensional sphere.

With IntDegree (usual Z\Z-grading)

Here we describe the simplest method to compute the cohomology of the free loop space of the even dimensional sphere. First we define the Sullivan model of the even dimensional sphere as in the previous page.

FreeLoopSpace.kt
// Define the Sullivan model of the 4-sphere.
val sphereDim = 4
val indeterminateList = listOf(
Indeterminate("x", sphereDim),
Indeterminate("y", sphereDim * 2 - 1)
)
val matrixSpace = SparseMatrixSpaceOverRational
val sphere = FreeDGAlgebra.fromMap(matrixSpace, indeterminateList) { (x, y) ->
mapOf(y to x.pow(2)) // dx = 0, dy = x^2
}

By using the Sullivan model sphere, the model of the free loop space is obtained by FreeLoopSpace(sphere).

FreeLoopSpace.kt
// Define the Sullivan model of the free loop space.
val freeLoopSpace = FreeLoopSpace(sphere)
val (x, y, sx, sy) = freeLoopSpace.generatorList

It is just a special example of FreeDGAlgebra, so we can apply any computation methods to it. (See the previous page for details.)

FreeLoopSpace.kt
// Assert that d(sy) and -2*x*sx are the same.
freeLoopSpace.context.run {
println("dsy = ${d(sy)} = ${-2 * x * sx}")
}

// Compute cohomology of the free loop space.
for (degree in 0 until 25) {
val basis = freeLoopSpace.cohomology.getBasis(degree)
println("H^$degree(LS^$sphereDim) = Q$basis")
}

With MultiDegree

By using MultiDegree, the performance of the above computation can be improved. See this page for details on MultiDegree.

In general, the Sullivan model (ΛVΛV,d)(\Lambda V\otimes\Lambda\overline{V}, d) of a free loop space has a decomposition (ΛVΛV,d)k(ΛVΛkV,d)(\Lambda V\otimes\Lambda\overline{V}, d) \cong \bigoplus_k(\Lambda V\otimes\Lambda^k\overline{V}, d) as complexses. By using this fact, its cohomology can be computed very quickly. We can use this feature by replacing FreeLoopSpace(sphere) with FreeLoopSpace.withShiftDegree(sphere) as follows.

FreeLoopSpace.kt
val freeLoopSpaceWithMultiDegree = FreeLoopSpace.withShiftDegree(sphere)
for (degree in 0 until 25) {
val basis = freeLoopSpace.cohomology.getBasis(degree)
println("H^$degree(LS^$sphereDim) = Q$basis")
}

Benchmark

The following chart compares the time to compute Hk(LS2)H^k(LS^2) for 0kn0\leq k\leq n. The computation with MultiDegree is much faster.