The Steenrod algebra

AUTHORS:

  • John H. Palmieri (2008-07-30): version 0.9

This module defines the mod p Steenrod algebra \mathcal{A}_p, some of its properties, and ways to define elements of it.

From a topological point of view, \mathcal{A}_p is the algebra of stable cohomology operations on mod p cohomology; thus for any topological space X, its mod p cohomology algebra H^*(X,\mathbf{F}_p) is a module over \mathcal{A}_p.

From an algebraic point of view, \mathcal{A}_p is an \mathbf{F}_p-algebra; when p=2, it is generated by elements \text{Sq}^i for i\geq 0 (the Steenrod squares), and when p is odd, it is generated by elements \mathcal{P}^i for i \geq 0 (the Steenrod reduced `p`th powers) along with an element \beta (the mod `p` Bockstein). The Steenrod algebra is graded: \text{Sq}^i is in degree i for each i, \beta is in degree 1, and \mathcal{P}^i is in degree 2(p-1)i.

The unit element is \text{Sq}^0 when p=2 and \mathcal{P}^0 when p is odd. The generating elements also satisfy the Adem relations. At the prime 2, these have the form

\text{Sq}^a \text{Sq}^b   = \sum_{c=0}^{[a/2]} \binom{b-c-1}{a-2c} \text{Sq}^{a+b-c} \text{Sq}^c.

At odd primes, they are a bit more complicated. See Steenrod and Epstein [SE] for full details. These relations lead to the existence of the Serre-Cartan basis for \mathcal{A}_p.

The mod p Steenrod algebra has the structure of a Hopf algebra, and Milnor [Mil] has a beautiful description of the dual, leading to a construction of the Milnor basis for \mathcal{A}_p. In this module, elements in the Steenrod algebra are represented, by default, using the Milnor basis.

See the documentation for SteenrodAlgebra for many more details and examples.

REFERENCES:

  • [Mil] J. W. Milnor, “The Steenrod algebra and its dual,” Ann. of Math. (2) 67 (1958), 150-171.
  • [SE] N. E. Steenrod and D. B. A. Epstein, Cohomology operations, Ann. of Math. Stud. 50 (Princeton University Press, 1962).
class sage.algebras.steenrod_algebra.SteenrodAlgebraFactory

Bases: sage.structure.factory.UniqueFactory

The mod p Steenrod algebra

INPUT:

  • p - positive prime integer (optional, default = 2)
  • basis - string (optional, default = ‘milnor’)

OUTPUT:

  • mod p Steenrod algebra with given basis

This returns the mod p Steenrod algebra, elements of which are printed using basis.

EXAMPLES:

Some properties of the Steenrod algebra are available:

sage: A = SteenrodAlgebra(2)
sage: A.ngens()  # number of generators
+Infinity
sage: A.gen(5)   # 5th generator
Sq(32)
sage: A.order()
+Infinity
sage: A.is_finite()
False
sage: A.is_commutative()
False
sage: A.is_noetherian()
False
sage: A.is_integral_domain()
False
sage: A.is_field()
False
sage: A.is_division_algebra()
False
sage: A.category()
Category of algebras over Finite Field of size 2

There are methods for constructing elements of the Steenrod algebra:

sage: A2 = SteenrodAlgebra(2); A2
mod 2 Steenrod algebra
sage: A2.Sq(1,2,6)
Sq(1,2,6)
sage: A2.Q(3,4)  # product of Milnor primitives Q_3 and Q_4
Sq(0,0,0,1,1)
sage: A2.pst(2,3)  # Margolis pst element
Sq(0,0,4)
sage: A5 = SteenrodAlgebra(5); A5
mod 5 Steenrod algebra
sage: A5.P(1,2,6)
P(1,2,6)
sage: A5.Q(3,4)
Q_3 Q_4
sage: A5.Q(3,4) * A5.P(1,2,6)
Q_3 Q_4 P(1,2,6)
sage: A5.pst(2,3)
P(0,0,25)

You can test whether elements are contained in the Steenrod algebra:

sage: w = Sq(2) * Sq(4)
sage: w in SteenrodAlgebra(2)
True
sage: w in SteenrodAlgebra(17)
False

Different bases for the Steenrod algebra:

There are two standard vector space bases for the mod p Steenrod algebra: the Milnor basis and the Serre-Cartan basis. When p=2, there are also several other, less well-known, bases. See the documentation for the function ‘steenrod_algebra_basis’ for full descriptions of each of the implemented bases.

This module implements the following bases at all primes:

  • ‘milnor’: Milnor basis.
  • ‘serre-cartan’ or ‘adem’ or ‘admissible’: Serre-Cartan basis.

It implements the following bases when p=2:

  • ‘wood_y’: Wood’s Y basis.
  • ‘wood_z’: Wood’s Z basis.
  • ‘wall’, ‘wall_long’: Wall’s basis.
  • ‘arnon_a’, ‘arnon_a_long’: Arnon’s A basis.
  • ‘arnon_c’: Arnon’s C basis.
  • ‘pst’, ‘pst_rlex’, ‘pst_llex’, ‘pst_deg’, ‘pst_revz’: various P^s_t-bases.
  • ‘comm’, ‘comm_rlex’, ‘comm_llex’, ‘comm_deg’, ‘comm_revz’, or these with ‘_long’ appended: various commutator bases.

When defining a Steenrod algebra, you can specify a basis. Then elements of that Steenrod algebra are printed in that basis

sage: adem = SteenrodAlgebra(2, 'adem')
sage: x = adem.Sq(2,1)  # Sq(-) always means a Milnor basis element
sage: x
Sq^{4} Sq^{1} + Sq^{5}
sage: y = Sq(0,1)    # unadorned Sq defines elements w.r.t. Milnor basis
sage: y
Sq(0,1)
sage: adem(y)
Sq^{2} Sq^{1} + Sq^{3}
sage: adem5 = SteenrodAlgebra(5, 'serre-cartan')
sage: adem5.P(0,2)
P^{10} P^{2} + 4 P^{11} P^{1} + P^{12}

You can get a list of basis elements in a given dimension:

sage: A3 = SteenrodAlgebra(3, 'milnor')
sage: A3.basis(13)
(Q_1 P(2), Q_0 P(3))

As noted above, several of the bases (‘arnon_a’, ‘wall’, ‘comm’) have alternate, longer, representations. These provide ways of expressing elements of the Steenrod algebra in terms of the \text{Sq}^{2^n}.

sage: A_long = SteenrodAlgebra(2, 'arnon_a_long')
sage: A_long(Sq(6))
Sq^{1} Sq^{2} Sq^{1} Sq^{2} + Sq^{2} Sq^{4}
sage: SteenrodAlgebra(2, 'wall_long')(Sq(6))
Sq^{2} Sq^{1} Sq^{2} Sq^{1} + Sq^{2} Sq^{4}
sage: SteenrodAlgebra(2, 'comm_deg_long')(Sq(6))
s_{1} s_{2} s_{12} + s_{2} s_{4}

Testing unique parents:

sage: S0 = SteenrodAlgebra(2)
sage: S1 = SteenrodAlgebra(2)
sage: S0 is S1
True
create_key(p=2, basis='milnor')

This is an internal function that is used to ensure unique parents. Not for public consumption.

EXAMPLES:

sage: SteenrodAlgebra.create_key()
(2, 'milnor')
create_object(version, key, **extra_args)

This is an internal function that is used to ensure unique parents. Not for public consumption.

EXAMPLES:

sage: SteenrodAlgebra.create_object(1,(11,'milnor'))
mod 11 Steenrod algebra
class sage.algebras.steenrod_algebra.SteenrodAlgebra_generic(p=2, basis='milnor')

Bases: sage.rings.ring.Algebra

The mod p Steenrod algebra.

Users should not call this, but use the function ‘SteenrodAlgebra’ instead. See that function for extensive documentation.

EXAMPLES:

sage: sage.algebras.steenrod_algebra.SteenrodAlgebra_generic()
mod 2 Steenrod algebra
sage: sage.algebras.steenrod_algebra.SteenrodAlgebra_generic(5)
mod 5 Steenrod algebra
sage: sage.algebras.steenrod_algebra.SteenrodAlgebra_generic(5, 'adem')
mod 5 Steenrod algebra
P(*nums)

The element P(a, b, c, ...)

INPUT:

  • a, b, c, ... - non-negative integers

OUTPUT: element of the Steenrod algebra given by the single basis element P(a, b, c, ...)

Note that at the prime 2, this is the same element as \text{Sq}(a, b, c, ...).

EXAMPLES:

sage: A = SteenrodAlgebra(2)
sage: A.P(5)
Sq(5)
sage: B = SteenrodAlgebra(3)
sage: B.P(5,1,1)
P(5,1,1)
Q(*nums)

The element Q_{n0} Q_{n1} ... , given by specifying the subscripts.

INPUT:

  • n0, n1, ... - non-negative integers

OUTPUT: The element Q_{n0} Q_{n1} ...

Note that at the prime 2, Q_n is the element \text{Sq}(0,0,...,1) , where the 1 is in the (n+1)^{st} position.

Compare this to the method ‘Q_exp’, which defines a similar element, but by specifying the tuple of exponents.

EXAMPLES:

sage: A2 = SteenrodAlgebra(2)
sage: A5 = SteenrodAlgebra(5)
sage: A2.Q(2,3)
Sq(0,0,1,1)
sage: A5.Q(1,4)
Q_1 Q_4
sage: A5.Q(1,4) == A5.Q_exp(0,1,0,0,1)
True
Q_exp(*nums)

The element Q_0^{e_0} Q_1^{e_1} ... , given by specifying the exponents.

INPUT:

  • e0, e1, ... - 0s and 1s

OUTPUT: The element Q_0^{e_0} Q_1^{e_1} ...

Note that at the prime 2, Q_n is the element \text{Sq}(0,0,...,1) , where the 1 is in the (n+1)^{st} position.

Compare this to the method ‘Q’, which defines a similar element, but by specifying the tuple of subscripts of terms with exponent 1.

EXAMPLES:

sage: A2 = SteenrodAlgebra(2)
sage: A5 = SteenrodAlgebra(5)
sage: A2.Q_exp(0,0,1,1,0)
Sq(0,0,1,1)
sage: A5.Q_exp(0,0,1,1,0)
Q_2 Q_3
sage: A5.Q(2,3)
Q_2 Q_3
sage: A5.Q_exp(0,0,1,1,0) == A5.Q(2,3)
True
basis(n)

Basis for self in dimension n

INPUT:

  • n - non-negative integer

OUTPUT:

  • basis - tuple of Steenrod algebra elements

EXAMPLES:

sage: A3 = SteenrodAlgebra(3)
sage: A3.basis(13)
(Q_1 P(2), Q_0 P(3))
sage: SteenrodAlgebra(2, 'adem').basis(12)
(Sq^{12},
Sq^{11} Sq^{1},
Sq^{9} Sq^{2} Sq^{1},
Sq^{8} Sq^{3} Sq^{1},
Sq^{10} Sq^{2},
Sq^{9} Sq^{3},
Sq^{8} Sq^{4})
gen(i=0)

The ith generator of the Steenrod algebra.

INPUT:

  • i - non-negative integer

OUTPUT: the ith generator of the Steenrod algebra

The i^{th} generator is Sq(2^i) at the prime 2; when p is odd, the 0th generator is \beta = Q(0), and for i>0, the i^{th} generator is P(p^{i-1}).

EXAMPLES:

sage: A = SteenrodAlgebra(2)
sage: A.gen(4)
Sq(16)
sage: A.gen(200)
Sq(1606938044258990275541962092341162602522202993782792835301376)
sage: B = SteenrodAlgebra(5)
sage: B.gen(0)
Q_0
sage: B.gen(2)
P(5)
gens()

List of generators for the Steenrod algebra. Not implemented (mainly because the list of generators is infinite).

EXAMPLES:

sage: A3 = SteenrodAlgebra(3, 'adem')
sage: A3.gens()
...
NotImplementedError: 'gens' is not implemented for the Steenrod algebra.
is_commutative()

The Steenrod algebra is not commutative.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_commutative()
False
is_division_algebra()

The Steenrod algebra is not a division algebra.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_division_algebra()
False
is_field(proof=True)

The Steenrod algebra is not a field.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_field()
False
is_finite()

The Steenrod algebra is not finite.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_finite()
False
is_integral_domain(proof=True)

The Steenrod algebra is not an integral domain.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_integral_domain()
False
is_noetherian()

The Steenrod algebra is not noetherian.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.is_noetherian()
False
ngens()

Number of generators of the Steenrod algebra.

This returns infinity, since the Steenrod algebra is infinitely generated.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.ngens()
+Infinity
order()

The Steenrod algebra has infinite order.

EXAMPLES:

sage: A = SteenrodAlgebra(3)
sage: A.order()
+Infinity
pst(s, t)

The Margolis element P^s_t.

INPUT:

  • s - non-negative integer
  • t - positive integer
  • p - positive prime number

OUTPUT: element of the Steenrod algebra

This returns the Margolis element P^s_t of the mod p Steenrod algebra: the element equal to P(0,0,...,0,p^s), where the p^s is in position t.

EXAMPLES:

sage: A2 = SteenrodAlgebra(2)
sage: A2.pst(3,5)
Sq(0,0,0,0,8)
sage: A2.pst(1,2) == Sq(4)*Sq(2) + Sq(2)*Sq(4)
True
sage: SteenrodAlgebra(5).pst(3,5)
P(0,0,0,0,125)
class sage.algebras.steenrod_algebra.SteenrodAlgebra_mod_two(p=2, basis='milnor')

Bases: sage.algebras.steenrod_algebra.SteenrodAlgebra_generic

The mod 2 Steenrod algebra.

Users should not call this, but use the function ‘SteenrodAlgebra’ instead. See that function for extensive documentation. (This differs from SteenrodAlgebra_generic only in that it has a method ‘Sq’ for defining elements.)

Sq(*nums)

Milnor element \text{Sq}(a,b,c,...).

INPUT:

  • a, b, c, ... - non-negative integers

OUTPUT: element of the Steenrod algebra

This returns the Milnor basis element \text{Sq}(a, b, c, ...).

EXAMPLES:

sage: A = SteenrodAlgebra(2)
sage: A.Sq(5)
Sq(5)
sage: A.Sq(5,0,2)
Sq(5,0,2)

Entries must be non-negative integers; otherwise, an error results.

sage.algebras.steenrod_algebra.get_basis_name(basis, p)

Return canonical basis named by string basis at the prime p.

INPUT:

  • basis - string
  • p - positive prime number

OUTPUT:

  • basis_name - string

EXAMPLES:

sage: sage.algebras.steenrod_algebra.get_basis_name('adem', 2)
'serre-cartan'
sage: sage.algebras.steenrod_algebra.get_basis_name('milnor', 2)
'milnor'
sage: sage.algebras.steenrod_algebra.get_basis_name('MiLNoR', 5)
'milnor'
sage: sage.algebras.steenrod_algebra.get_basis_name('pst-llex', 2)
'pst_llex'

Previous topic

Free algebra quotient elements

Next topic

Steenrod algebra elements

This Page