name: inverse layout: true class: center, middle, inverse, nolist --- #Steenrod algebra cohomology with Yacop/Sage eCHT seminar on machine computation in homotopy theory Christian Nassau Oct 28 2021 --- # [Sage](https://www.sagemath.org) ### "Creating a viable free open source alternative to Magma, Maple, Mathematica, and Matlab" - General purpose computer algebra system based on Python. - Interfaces to many specialized computer algebra systems. - Covers a lot of mathematics. # [Yacop](https://github.com/cnassau/yacop-sage) ### ".underline[Y]et .underline[a]nother .underline[co]homology .underline[p]rogram" - Specialized library for Steenrod algebra cohomology. - Intended to be used through Sage. - Meant to be powerful and easy to use. --- class: inverse layout: false ## Sage .padded[+] Yacop glue code .padded[+] .yellow[Steenrod Tcl library] .left-column[ ### .emph[Overview] ### Capabilities ### GFR only ### Storage ] .right-column[ The "[Steenrod Tcl library](https://github.com/cnassau/steenrod)" is the computational work horse of the project. Mostly developed around 2004 and very stable. - Optimized code to compute minimal resolutions of subalgebras of the Steenrod algebra - Uses the [algorithm](https://doi.org/10.4418/2021.76.1.1) of the author's [PhD thesis](https://dx.doi.org/10.30819/881) - Supports the primes $p=2,3,5,7,11$ - Written in C to maximize speed - Comes with an interface to the [Tcl](https://www.tcl.tk/) programming language ] --- class: inverse layout: false ## Sage .padded[+] Yacop glue code .padded[+] .yellow[Steenrod Tcl library] .left-column[ ### Overview ### .emph[Capabilities] ### GFR only ### Storage ] .right-column[ The library is designed to do just a few things efficiently: - compute the matrix of (parts of) a map $$d\_s:C\_s \rightarrow C\_{s-1}$$ in a free resolution. - compute kernels, images and lifts of such matrices These are the steps that are needed to compute a minimal resolution and also to work with it (e.g. solve lifting problems to compute chain maps). Currently everything is computed on the CPU. Planned: delegate the computation of the $d_s$ to the graphics processing unit using [OpenCL](https://www.khronos.org/opencl/). ] --- class: inverse layout: false ## Sage .padded[+] Yacop glue code .padded[+] .yellow[Steenrod Tcl library] .left-column[ ### Overview ### Capabilities ### .emph[GFR only] ### Storage ] .right-column[ Our philosophy is to compute everything from **one fixed minimal resolution** $C\_\ast$ of the ground field: - for other modules $M$ one has a functorial free resolution $C\_\ast \land M$ - for small $M$ and $N$ this resolution can be used to compute $\operatorname{Ext}\_A(M,N)$ from the resolution $$C\_\ast \land M \land N^\ast$$ We don't claim that this is the best approach for all $M$: for modules that are close to free it clearly isn't. ] --- class: inverse layout: false ## Sage .padded[+] Yacop glue code .padded[+] .yellow[Steenrod Tcl library] .left-column[ ### Overview ### Capabilities ### GFR only ### .emph[Storage] ] .right-column[ Resolutions and chain maps are stored in an [SQLite](https://www.sqlite.org/index.html) database. - SQLite is a very robust and widely used database engine - A database is a single ordinary file - Can be accessed through the SQL "structured query language" - Support for SQLite exists in all popular programming languages. ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### .emph[Steenrod algebra] ### Modules ### Categories ### Resolutions ] .right-column[ The Sage project was started by William Stein in 2005. John Palmieri implemented support for Steenrod operations. ```python sage: A=SteenrodAlgebra(2,basis='adem') sage: A mod 2 Steenrod algebra, serre-cartan basis sage: A(Sq(3,2,1)) Sq^11 Sq^4 Sq^1 + Sq^11 Sq^5 + Sq^13 Sq^3 sage: B=SteenrodAlgebra(2,basis='milnor') sage: A.monomial((4,2,6,4)) Sq^4 Sq^2 Sq^6 Sq^4 sage: B(A.monomial((4,2,6,4))) Sq(3,2,1) + Sq(7,3) ``` ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### Steenrod algebra ### .emph[Modules] ### Categories ### Resolutions ] .right-column[ Yacop adds support for differential graded modules over the Steenrod algebra. Sage has a notion of "graded objects" but it's not quite suitable: - we need **three** gradings $(s,t,e)$: homological, internal, Bockstein - we want to **operate** on the gradings via suspensions & truncations - we want **introspection** capabilities: for example, a module/chain complex should know its bounding box. ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### Steenrod algebra ### .emph[Modules] ### Categories ### Resolutions ] .right-column[ Yacop adds support for differential graded modules over the Steenrod algebra. Sage has a notion of "module over an algebra" but we prefer something more tailor-made: Yacop modules can define their action through both $$(a,m) \mapsto a \cdot m$$ and/or $$(a,m) \mapsto \chi(a) \cdot m$$ An optimized computation of $\chi(a)\cdot m$ is desirable for the identification $$C\_\ast \land M \quad \cong\quad C\_\ast \otimes^L M$$ $$ag \land m \mapsto \sum a'g \otimes \chi(a'')m$$ ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### Steenrod algebra ### .emph[Modules] ### Categories ### Resolutions ] .right-column[ Yacop adds support for differential graded modules over the Steenrod algebra. Sage has a notion of "module over an algebra" but we prefer something more tailor-made: Yacop modules can define their action through both $$(a,m) \mapsto a \cdot m$$ and/or $$(a,m) \mapsto \chi(a) \cdot m$$ Example: projective space ${\mathbb R}P^\infty$: $$\operatorname{Sq}(R) x^m = \binom{m}{r_1\,\cdots\,r_n} x^{m+\vert R\vert}, \quad \chi\left(\operatorname{Sq}(R)\right) x^m = \binom{-1-m-\vert R\vert}{r_1\,\cdots\,r_n} x^{m+\vert R\vert}$$ ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### Steenrod algebra ### Modules ### .emph[Categories] ### Resolutions ] .right-column[ Sage organizes its mathematics in "categories". Yacop adds new categories and functors: ```python sage: from yacop.modules.projective_spaces import ComplexProjectiveSpace sage: ComplexProjectiveSpace().categories() [Category of yacop left module algebras over # Yacop mod 2 Steenrod algebra, milnor basis, Category of algebras with basis over Finite # Sage Field of size 2, ... Category of magmas, # Sage Category of yacop left modules over mod 2 Steenrod # Yacop algebra, milnor basis, Category of yacop differential modules over mod 2 # Yacop Steenrod algebra, milnor basis, Category of vector spaces with basis over Finite # Sage Field of size 2, ... Category of yacop graded objects, Category of yacop objects, Category of sets, Category of sets with partial maps, Category of objects] ``` ] --- class: inverse layout: false ## Sage .padded[+] .yellow[Yacop glue code] .padded[+] Steenrod Tcl library .left-column[ ### Steenrod algebra ### Modules ### Categories ### .emph[Resolutions] ] .right-column[ Yacop provides classes for ground field resolutions $C\_\ast$ and smash product resolutions $C\_\ast\land M$. It communicates with the Tcl Steenrod library through Python's "tkinter" package. ```python sage: A=SteenrodAlgebra(5) ; A # Python mod 5 Steenrod algebra, milnor basis # Python sage: C=A.resolution() ; C # Python minimal resolution of mod 5 Steenrod algebra, milnor basis # Python sage: C.compute(smax=10,nmax=100) # Python > Working on C1 up to ideg=101, edeg=1 # Tcl > Last completed internal degree was 44 # Tcl ... # Tcl > Reading generators for C10 # Tcl > 1 generators read # Tcl > Beginning with the computation # Tcl > Reading d9 # Tcl > Reading d10 # Tcl > 10/88/8 found 1 new generator in 0.00 seconds # Tcl > 10/89/9 found 1 new generator in 0.00 seconds # Tcl sage: C.differential(C.g(5,66)) # Python -> Tcl -> SQLite -> 2*Q_0 P(1)*g(4,57) + Q_1*g(4,57) + P(3)*g(4,42) # -> Tcl -> Python ``` ] --- class: inverse layout: false ## .yellow[Sage] .padded[+] Yacop glue code .padded[+] Steenrod Tcl library .left-column[ ### .emph[Running Sage] ### Docker ] .right-column[ You can run Sage in multiple ways: - download a binary package from the [Sage download site](https://www.sagemath.org/download.html) - download source and build yourself - use your Linux package manager (e.g. on Ubuntu) - use docker to run Sage without local installation Yacop can be combined with all these methods. ] --- class: inverse layout: false ## .yellow[Sage] .padded[+] Yacop glue code .padded[+] Steenrod Tcl library .left-column[ ### Running Sage ### .emph[Docker] ] .right-column[ [Docker](https://bit.ly/3asb6st) is the easiest way to get going: ```bash ~$ docker run -e SAGE_BANNER=NO --rm -it cnassau/yacop-sage Unable to find image 'cnassau/yacop-sage:latest' locally latest: Pulling from cnassau/yacop-sage 297061f60c36: Pull complete ... 496abbf4c991: Pull complete Digest: sha256:34f791d....e72ca886c5caf77 Status: Downloaded newer image for cnassau/yacop-sage:latest sage: C=SteenrodAlgebra(2).resolution() sage: C.differential(C.g(5,36)) Sq(1)*g(4,35) + Sq(14,1)*g(4,19) + Sq(32)*g(4,4) sage: ``` Docker is supported on all popular OS. For Windows you might need the "professional edition". [Podman](https://podman.io/whatis.html) is an interesting alternative on Linux. This is "rootless", hence less risky to allow for system administrators. ] --- class: center, middle, inverse # Intermission --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### .emph[Missing Features] ### $\psi$-map - Background - Problem - Ansatz - Applications ] .right-column[ Missing features that should be easy to add - chain maps $m\_g:C\_\ast \rightarrow C\_{\ast+s}$ corresponding to a $g\in\operatorname{Ext}_A^s(k,k)$ - comparison maps $C\_\ast \rightarrow D\_\ast$ for algebra inclusions $A\subset B$ Possibly more involved - support for motivic Ext computations over ${\mathbb C}$ and ${\mathbb R}$ - use the secondary Steenrod algebra of H. J. Baues to compute $d\_2$ differentials Also highly desirable - improve robustness of the code - documentation & tutorials ] --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### Missing Features ### .emph[$\psi$-map] - .emph[Background] - Problem - Ansatz - Applications ] .right-column[ Q: Let $A(n)\subset A$ be the usual subalgebra. Can you put a compatible $A$-module structure on $A(n)$, i.e. is there $$A\_n\in A-Mod \quad \text{such that}\quad A\_n\cong\_{A(n)} A(n) ?$$ A: Yes! | $n$ | | | --- | -- | | $-1$, $0$ | problem is trivial | | $1$ | $4$ easy solutions | | $2$ | $1600$ solutions (M. Roth) | | $\ge 3$ | at least one (highly symmetric) $A_n$ (Mitchell/Smith) | ] --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### Missing Features ### .emph[$\psi$-map] - Background - .emph[Problem] - Ansatz - Applications ] .right-column[ Q: Let $D\_\ast$ be the minimal free $A(n)$-resolution. Can you put a compatible $A$-module structure on $D\_\ast$, i.e. is there $$E\_\ast\in \partial A-Mod \quad \text{such that}\quad E\_\ast\cong\_{A(n)} D\_\ast ?$$ A: open problem! | $n$ | | | --- | -- | | $-1$, $0$ | problem is trivial | | $1$ | nice excercise | | $\ge 2$ | seems difficult | ] --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### Missing Features ### .emph[$\psi$-map] - Background - Problem - .emph[Ansatz] - Applications ] .right-column[ The $A\_n$ can be written as $A\_n = A\cdot p\subset A\_\ast$ with $p\in A\_\ast$. Example: $A\_2 = A\cdot p$ with $p = \xi\_{1}^{7}\xi\_{2}^{3}\xi\_{3} $ + $ \xi\_{1}^{2}\xi\_{2}^{7} $ + $ \xi\_{1}^{4}\xi\_{2}^{4}\xi\_{3} $ + $ \xi\_{1}^{5}\xi\_{2}^{6} $ + $ \xi\_{1}^{8}\xi\_{2}^{5} $ + $ \xi\_{1}^{10}\xi\_{2}^{2}\xi\_{3} $ + $ \xi\_{1}^{11}\xi\_{2}^{4} $ + $ \xi\_{1}^{13}\xi\_{2}\xi\_{3} $ + $ \xi\_{1}^{14}\xi\_{2}^{3} $ + $ \xi\_{1}^{17}\xi\_{2}^{2} $ + $ \xi\_{1}^{20}\xi\_{2} $ + $ \xi\_{1}^{23}$ Imagine an algorithm that 1. takes an approximate $p = \xi\_{1}^{7}\xi\_{2}^{3}\xi\_{3} + \cdots$ 2. decomposes all $Sq(8r,4s) p = \sum a\_{k,l}^{r,s} \left(\xi\_1^{8k}\xi\_2^{4l}\cdot p\right)$ with $a\_{k,l}^{r,s}\in A(2)$. 3. magically turns the error terms $a_{k,l}^{r,s}$ for $(k,l)\not=(0,0)$ into correction terms 4. adds correction terms to $p$ and goes back to 2. until errors are zero ] --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### Missing Features ### .emph[$\psi$-map] - Background - Problem - .emph[Ansatz] - Applications ] .right-column[ This algorithm could work for a resolution as well: - $p$ gets replaced by a chain map $$\psi: A\otimes\_{A(2)} D\_\ast \rightarrow A\_\ast\otimes\_{A(2)} D\_\ast$$ with $\psi(g) = \xi\_{1}^{7}\xi\_{2}^{3}\xi\_{3}\otimes g + \cdots$ for $A(2)$-generators $g$ of $D\_\ast$ - the image of the corrected $\psi$ would be $E\_\ast$ Remarks: - can replace $A\_\ast\otimes\_{A(2)} D\_\ast$ by $A^\infty \otimes\_{A(2)} D\_\ast$ with $A^\infty = {\mathbb F}_2[\xi\_1,\xi\_2]\otimes E(\xi\_3)$ - for $n=1$ every $\psi: A\otimes\_{A(1)} D\_\ast \rightarrow A^\infty\otimes\_{A(1)} D\_\ast$ seems to work. ] --- class: inverse layout: false ## Omissions, plans, hopes .left-column[ ### Missing Features ### .emph[$\psi$-map] - Background - Problem - Ansatz - .emph[Applications] ] .right-column[ ### Application 1 Compute $A\_2$-filtration of $\operatorname{Ext}\_A({\mathbb F}\_2)$ using that $E\_\ast$ is small(ish). This is a complement to the tmf-filtration. ### Application 2 Hope that the $A$ action on $E\_\ast$ is asymptotically compatible with $v\_2$ periodicity. Let $K\_n$ be the kernel of $d:E\_n \rightarrow E\_{n-1}$ and compute the limit $$M = \operatorname{lim}\limits\_{k \rightarrow\infty} \Sigma^{-48k} K\_{8k}$$ This $M$ would be $A(1)$-free and have the same $P\_3^0$-localization as ${\mathbb F}_2$ Finally, use Palmieri's "[Margolis Adams spectral sequence](https://doi.org/10.1090/conm/158/01459)" to compute Ext of the localization $M\langle P\_{3}^0\rangle$ = $\mathbb F\_2\langle P\_{3}^0\rangle$ ] --- class: center, middle, inverse # The End \( Slideshow created using [remark](http://github.com/gnab/remark). \)