{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Steenrod squares\n", "\n", "\n", "In 1947, Steenrod introduced by means of formulae the cup-$i$ coproducts on the cochains of spaces. These bilinear maps give rise to the natural cohomology operations \n", "\\begin{equation*}\n", "Sq^k \\colon H^\\bullet(X; \\mathbb F_2) \\to H^\\bullet(X; \\mathbb F_2)\n", "\\end{equation*} \n", "\n", "going beyond betti numbers and laying at the heart of homotopy theory.\n", "\n", "As motivation for the practical use of Steenrod squares $Sq^k$ here are a few situations where they are a convenient distinguishing tool.\n", "\n", "1. The real projective plane (sphere with antipodal points identified) and the wedge of a circle and a sphere (their union with a point from each identified together) have, with $\\mathbb F_2$-coefficients, the same betti numbers, yet the rank of $Sq^1$ tells them apart.\n", "\n", "\n", "2. Similarly, the complex projective plane and the wedge of a 2-sphere and a 4-sphere have the same betti numbers with any coefficients, yet the rank of $Sq^2$ tells them apart.\n", "\n", "\n", "3. The suspensions (join with two points) of the two spaces above have the same betti numbers and also isomorphic cohomology rings (cup product), yet $Sq^2$ tells them apart.\n", "\n", "The cup-$i$ coproducts $\\Delta_i \\colon C_\\bullet(X; \\mathbb F_2) \\to C_\\bullet(X; \\mathbb F_2) \\otimes C_\\bullet(X; \\mathbb F_2)$ extend the Alexander-Whitney diagonal $\\Delta_0$, and the higher cup-$i$ coproducts can be interpreted as coherent homotopies witnessing at the chain level the symmetry of $\\Delta_0$ at the homology level.\n", "The Steenrod squares are defined by\n", "\n", "\\begin{equation}\n", "Sq^k \\big( [\\alpha] \\big) = \\big[ (\\alpha \\otimes \\alpha) \\Delta_{|\\alpha|-k}\\big].\n", "\\end{equation}\n", "\n", "Let us review their description as presented in [MM22a] proven to be equivalent to Steenrod's original in [MM22b].\n", "\n", "Let $X$ be a simplicial complex and $x \\in X_n$.\n", "For a set\n", "\\begin{equation*}\n", "U = \\{u_1 < \\dots < u_r\\} \\subseteq \\{0, \\dots, n\\}\n", "\\end{equation*}\n", "\n", "we write $d_U(x) = d_{u_1}\\! \\dotsm \\, d_{u_r}(x)$, with $d_{\\emptyset}(x) = x$ and $d_u [v_0, \\dots, v_n] = [v_0, \\dots, \\widehat v_u, \\dots, v_n]$.\n", "\n", "For any simplicial complex $X$ and integer $i$\n", "\\begin{equation*}\n", "\\Delta_i \\colon C_\\bullet(X; \\mathbb F_2) \\to C_\\bullet(X; \\mathbb F_2) \\otimes C_\\bullet(X; \\mathbb F_2)\n", "\\end{equation*}\n", "\n", "is the linear map defined on a simplex $x \\in X_n$ to be $0$ if $i \\not\\in \\{0, \\dots, n\\}$ and is otherwise given by\n", "\n", "\\begin{equation}\n", "\\Delta_i(x) = \\sum d_{U^0}(x) \\otimes d_{U^1}(x)\n", "\\end{equation}\n", "\n", "where the sum is taken over all subsets $U = \\{u_1 < \\cdots < u_{n-i}\\} \\subseteq \\{0, \\dots, n\\}$ and\n", "\n", "\\begin{equation} \\label{e:partition subsets}\n", "U^0 = \\{u_j \\in U\\mid u_j \\equiv j \\text{ mod } 2\\}, \\qquad\n", "U^1 = \\{u_j \\in U\\mid u_j \\not\\equiv j \\text{ mod } 2\\}.\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2022-05-29T19:46:12.778208Z", "iopub.status.busy": "2022-05-29T19:46:12.777713Z", "iopub.status.idle": "2022-05-29T19:46:12.788286Z", "shell.execute_reply": "2022-05-29T19:46:12.787748Z" } }, "outputs": [], "source": [ "from itertools import combinations\n", "\n", "def steenrod_diagonal(i, spx):\n", " '''Returns the image of applying the ith Steenrod coproduct to spx.'''\n", " answer = []\n", " n = len(spx)-1\n", " for U in combinations(range(n+1), n-i):\n", " left, right = list(spx), list(spx)\n", " for u in U:\n", " if (U.index(u) + u) % 2 == 1:\n", " left.remove(spx[u])\n", " else:\n", " right.remove(spx[u])\n", " answer.append((tuple(left), tuple(right))) \n", " return answer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us consider a simplicial complex modeling the real projective plane $\\mathbb RP^2$ whose cohomology is (additively) given by\n", "\n", "\\begin{equation}\n", "H^n(\\mathbb RP^2; \\mathbb F_2) \\cong\n", "\\begin{cases}\n", "\\mathbb F_2, & n=0,1,2 \\\\\n", "0, & \\text{otherwise}.\n", "\\end{cases}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-05-29T19:46:12.792441Z", "iopub.status.busy": "2022-05-29T19:46:12.791354Z", "iopub.status.idle": "2022-05-29T19:46:12.797916Z", "shell.execute_reply": "2022-05-29T19:46:12.797412Z" } }, "outputs": [], "source": [ "rp2 = (\n", " (0,), \n", " (1,), (0,1), \n", " (2,), (0,2), (1,2), (0,1,2),\n", " (3,), (0,3), (1,3), (0,1,3), (2,3),\n", " (4,), (0,4), (1,4), (2,4), (1,2,4), (3,4), (0,3,4), (2,3,4),\n", " (5,), (0,5), (1,5), (2,5), (0,2,5), (3,5), (1,3,5), (2,3,5), (4,5), (0,4,5), (1,4,5)\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As computed in the notebook *barcode*, a cocycle representative $\\alpha$ for the generator of $H^n(\\mathbb RP^2; \\mathbb F_2)$ is the following:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-05-29T19:46:12.801855Z", "iopub.status.busy": "2022-05-29T19:46:12.800787Z", "iopub.status.idle": "2022-05-29T19:46:12.805438Z", "shell.execute_reply": "2022-05-29T19:46:12.804934Z" } }, "outputs": [], "source": [ "coho_rep = [(2, 4), (1, 5), (1, 4), (2, 3), (3, 5)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now use the linearity of the tensor product to compute by brute force a representative of $Sq^1\\big( [\\alpha] \\big)$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-05-29T19:46:12.809361Z", "iopub.status.busy": "2022-05-29T19:46:12.808297Z", "iopub.status.idle": "2022-05-29T19:46:12.822354Z", "shell.execute_reply": "2022-05-29T19:46:12.821830Z" } }, "outputs": [ { "data": { "text/plain": [ "[(2, 3, 5)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from itertools import permutations\n", "\n", "sq_rep = []\n", "for pair in permutations(coho_rep, 2):\n", " for spx in (s for s in rp2 if len(s) == 3):\n", " if pair in steenrod_diagonal(0, spx):\n", " sq_rep.append(spx)\n", "\n", "sq_rep" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this cocycle represents the generator of $H^2(\\mathbb RP^2; \\mathbb F_2)$, we have that $\\mathrm{rank}(Sq^1) = 1$." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 2 }