+++ title = “Module Definition Format” section = “technical” +++
Module Definition Format
htpy accepts module definitions in JSON format. A module definition specifies a module $M$ over the Steenrod algebra $A$, which htpy then resolves to compute $\operatorname{Ext}_A(M, \mathbb{F}_p)$.
Minimal example
A module with two generators and one Steenrod square action:
{
"type": "finite dimensional module",
"p": 2,
"gens": { "x0": 0, "x1": 1 },
"actions": ["Sq1 x0 = x1"]
}
Fields
Required
| Field | Type | Description |
|---|---|---|
type | string | Module type (see below) |
p | integer | The prime (2, 3, 5, or 7) |
gens | object | Generator names mapped to degrees |
Module types
"finite dimensional module": Explicitly specified generators and actions. Most common."finitely presented module": Generators plus relations (quotient of a free module).
Actions format
The actions field is an array of strings, each specifying one
Steenrod operation:
"Sq<i> <gen> = <linear combination>"
At $p = 2$:
"Sq1 x0 = x1"means $\operatorname{Sq}^1(x_0) = x_1$"Sq2 x0 = x1 + x2"means $\operatorname{Sq}^2(x_0) = x_1 + x_2$"Sq4 x0 = 0"means $\operatorname{Sq}^4(x_0) = 0$
At odd primes:
"P1 x0 = x1"means $P^1(x_0) = x_1$"b x0 = x1"means $\beta(x_0) = x_1$
Actions not listed are assumed to be zero. The Steenrod algebra relations (Adem relations) are checked automatically; specifying an action that violates the Adem relations will produce an error.
The v2 archive format
For interoperability, module definitions can also use the v2 archive format with structured actions:
{
"htpy_archive": "module_definition",
"version": 2,
"algebra": { "type": "adem", "p": 2 },
"generators": [
{ "name": "x0", "degree": 0 },
{ "name": "x1", "degree": 1 }
],
"actions": [
{ "op": "Sq1", "input": "x0", "output": { "x1": 1 } }
]
}
See The Archive Format for the complete specification.
Examples
The mod-2 Moore spectrum
$C(2) = S^0 \cup_2 e^1$: a sphere with a cell attached via the degree-2 map.
{
"type": "finite dimensional module",
"p": 2,
"gens": { "i": 0, "j": 1 },
"actions": ["Sq1 i = j"]
}
The Joker
A 5-cell complex with specific Steenrod structure:
{
"type": "finite dimensional module",
"p": 2,
"gens": { "x0": 0, "x1": 1, "x2": 2, "x3": 3, "x4": 4 },
"actions": [
"Sq1 x0 = x1",
"Sq2 x0 = x2",
"Sq1 x2 = x3",
"Sq2 x2 = x4",
"Sq4 x0 = x4"
]
}
Computation range
When importing a module definition, htpy prompts for the computation range:
- max stem ($n_{\max}$): maximum value of $t - s$
- max filtration ($s_{\max}$): maximum homological degree
Larger ranges produce more data but take longer to compute. The resolution time scales roughly as $O(n_{\max}^2 \cdot s_{\max})$ for typical modules.