I'm trying to understand the (pretty undocumented) method .sigma()
method for formal groups of elliptic curves, as listed here. The source code looks like this:
def sigma(self, prec=10):
"""
EXAMPLES::
sage: E = EllipticCurve('14a')
sage: F = E.formal_group()
sage: F.sigma(5)
t + 1/2*t^2 + (1/2*c + 1/3)*t^3 + (3/4*c + 3/4)*t^4 + O(t^5)
"""
a1,a2,a3,a4,a6 = self.curve().ainvs()
k = self.curve().base_ring()
fl = self.log(prec)
R = rings.PolynomialRing(k,'c'); c = R.gen()
F = fl.reverse()
S = rings.LaurentSeriesRing(R,'z')
c = S(c)
z = S.gen()
F = F(z + O(z**prec))
wp = self.x()(F)
e2 = 12*c - a1**2 - 4*a2
g = (1/z**2 - wp + e2/12).power_series()
h = g.integral().integral()
sigma_of_z = z.power_series() * h.exp()
T = rings.PowerSeriesRing(R,'t')
fl = fl(T.gen()+O(T.gen()**prec))
sigma_of_t = sigma_of_z(fl)
return sigma_of_t
For context, an elliptic curve object in Sage is specified by an actual Weierstrass form $$y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6$$ with paramaters $[a_1,a_2,\ldots, a_6]$, and not just an isomorphism class. The only really important part of the above code is the second to last stanza, as the rest is just converting between the parameter $z$ (from the complex uniformization) and the customary formal group parameter $t=-x/y$.
Mathematical context
Anyway, this code is apparently supposed to return some form of the Weierstrass $\sigma$-function, or more accurately I think it's supposed to return something like the $p$-adic $\sigma$-function as studied by Mazur and Tate in their paper of that name (and many others since). Recall that the classical Weierstrass $\sigma$-function satisfies (among many other identities) $$d(d\log \sigma(z;\Lambda)) = - \wp(z;\Lambda).$$ where $\Lambda$ is the (fixed, for our purposes) auxiliary data of a lattice in $\mathbb{C}$, equivalently a rigidified elliptic curve.
The $p$-adic $\sigma$-function according to Mazur and Tate is usually put in terms of the formal parameter $t$, but for our purposes, we'll just write it in terms of $z$. In that case it can be given by $$\sigma_p(z;\Lambda) := \exp(-E^{(p)}_2(\Lambda)z^2/24)\sigma(z;\Lambda)$$ where $E^{(p)}$ is the $p$-stabilized Eisenstein series of weight $2$, normalized to have residue $1$ at the cusp at infinity. In particular, by taking the second log derivative of both sides we get $d(d\log\sigma_p(z)) = -\wp -E^{(p)}_2(\Lambda)/12$.
(Compare this to the formula $X-\wp = E^{(p)}_2(\Lambda)/12$ on page 2 of the Mazur-Tate article.)
The source of my confusion
The code above almost, but not quite, looks like it does this. Indeed, we have the Weierstrass $\wp$-function initialized as its power series in terms of $z$
wp = self.x()(F)
using the fact that the $x$-coordinate in Weierstrass form is said function. This is followed by this mysterious line:
e2 = 12*c - a1**2 - 4*a2
which appears to say that we should have something like "$E_2^{(p)}(\Lambda) = 12c -a_1^2-4a_2$" (probably up to a scalar since e2 might be normalized differently), where $c$ is a free variable whose "meaning" is not clear to me.
The rest of the relevant code does this:
g = (1/z**2 - wp + e2/12).power_series()
h = g.integral().integral()
sigma_of_z = z.power_series() * h.exp()
which is all very much as expected: indeed, if we apply $d\circ d\log$ to the equation in the last line, we get
$$ d(d\log \text{"sigma of z"}(z)) = -\frac{1}{z^2}+ d(d\text{"h"}) = -\frac{1}{z^2}+\text{"g"} = -\wp + \frac{\text{"e2"}}{12}$$
This makes it indeed look like e2
is some form of $E_2^{(p)}$, but it appears to be off by a factor of $-2$. Could just be a weird normalization, or (as likely) a mistake on my part.
(One thing which suggests that it's not a mistake and in fact is just a different of a factor of $-2$ is that in the case that $a_1=a_2=0$, e.g. reduced Weierstrass form), c
is then $-\frac{1}{24}E_2^{(p)}$, which is a pretty standard normalization often denoted $G_2^{(p)}$.)
So my question generally is, what's going on here? More specifically,
Am I correct that this is supposed to be something like the $p$-adic $\sigma$-function? (It has to be somewhat more subtle that that, I guess, since it's not like it can be all of them for different $p$ at the same time, but I'm failing to see how it works.)
What's going on with the
e2
variable and its relationship to thec
variable? What precise relationship is the former supposed to have to $E_2^{(p)}$ as above? What are you supposed to ``plug in'' forc
to actually get particular values of $\sigma_p$ for different $p$? Can you use this variable to evaluate it at a different rigidification (i.e. choice of invariant differential) without changing the isomorphism class of the elliptic curve? And how does this relate to the weird equatione2 = 12*c - a1**2 - 4*a2
?