In this page, I hope to collect information regarding the Hopf algeboid structure on (BP,BPBP)(BP_*, BP_*BP). The main point of this page is the maxima code at the end that gives explicit formulas. Recall that the structure of a Hopf algebroid involves maps

All of these maps are ring maps. Moreover, BPBPBP_*BP is a BPBP_*-bimodule via ηL\eta_L and ηR\eta_R, and Δ\Delta and ε\varepsilon are BPBP_*-bimodule maps. Recall also that

Choice of generators

The elements vnv_n are not "well-defined". There are two standard choicse. Our formulas below will be expressed in terms of auxiliary variables λn\lambda_n, and the two choices correspond to how λn\lambda_n is expressed in terms of vnv_n.

The Hazewinkel generators are defined by

pλn=0i<nλivnipi. p \lambda_n = \sum_{0 \leq i < n} \lambda_i v_{n-i}^{p^i}.

The Araki generators are defined by

pλn=0inλivnipi. p \lambda_n = \sum_{0 \leq i \leq n} \lambda_i v_{n-i}^{p^i}.


Explicit formulas for the Hopf algebroid structure are as follows:

ε(ti)=0,ε(vi)=viηL(vn)=vn.ηR(λn)=0inλitnipi.i,j0λiΔ(tj)pi=i,j,k0λitjpitkpi+j.i,j,k0λitjpic(tk)pi+j=i0λi. \begin{aligned}\varepsilon(t_i) &= 0, \varepsilon(v_i) = v_i \\ \eta_L(v_n) &= v_n. \\ \eta_R (\lambda_n) &= \sum_{0 \leq i \leq n} \lambda_i t_{n-i}^{p^i}. \\ \sum_{i, j \geq 0} \lambda_i \Delta(t_j)^{p^i} &= \sum_{i, j, k \geq 0} \lambda_i t_j^{p^i} \otimes t_k^{p^{i + j}}. \\ \sum_{i, j, k \geq 0} \lambda_i t_j^{p^i} c(t_k)^{p^{i + j}} &= \sum_{i \geq 0} \lambda_i .\end{aligned}

For the purposes of applying the last two formulas, it is useful to note that λiΔ(tj)pi\lambda_i \Delta(t_j)^{p^i} has degree 2(pi+j1)2(p^{i + j} - 1); and λitjpitkpi+j\lambda_i t_j^{p^i} \otimes t_k^{p^{i + j}} has degree 2(pi+j+k1)2(p^{i + j + k} - 1), etc.

Maxima code

The following contains code for computing ηR\eta_R, Δ\Delta and cc in maxima:

p : 3;

/* Define some edge cases */
t[0] : 1;
s[0] : 1;
c[0] : 1;
v[0] : p;

/* Hazewinkel */
l[n] := if is(equal(n, 0)) then 1 else 1/p * sum(l[i] * (v[n-i])^(p^i) ,i, 0, n-1);
m(n) := n-1;

/* Araki */
/* l[n] := if is(equal(n, 0)) then 1 else 1/(p - p^(p^n)) * sum(l[i] * (v[n-i])^(p^i) ,i, 0, n-1);
m(n) := n; */

/* Actual code */
etaRl[n] := sum(l[i] * t[n-i]^(p^i),i, 0, n);
etaR[n] := if is(equal(n, 0)) then p else expand(p * etaRl[n] - sum(etaRl[i] * (etaR[n-i]^(p^i)), i, 1, m(n)));

d[n] := expand(sum(sum(l[i] * t[j]^(p^i) * s[n-i-j]^(p^(i+j)), j, 0, n-i),i, 0, n) - sum(l[i] * d[n-i]^(p^i), i, 1, n));

c[n] := expand(l[n] - sum(sum(l[i] * t[n-k-i]^(p^i) * c[k]^(p^(n-k)), i, 0, n-k), k, 0, n-1));

To use this in maxima, Then import/paste in the above code. You can then type etaR[n] to compute ηR(vn)\eta_R(v_n), and d[n] and c[n] to compute Δ(tn)\Delta(t_n) and c(tn)c(t_n) respectively. Note that the computation time needed grows very quickly with n.

By default, this does calculations at the prime 3, which can be customized in the first line.

Also, by default, this uses the Hazewinkel generators. If you want to use the Araki generators, comment out the two lines following /* Hazewinkel */ and uncomment those following /* Araki */.