-
-
Notifications
You must be signed in to change notification settings - Fork 674
Description
If K
is a number field and S
a finite set of primes of K
, then for any m > 1
there is a finite multiplicative abelian group of exponent at most m
called the m
-Selmer group, denoted K(S, m)
, a subgroup of K<sup>*/(K</sup>*)^m
.
The existing method K.selmer_group(m)
returns a list of elements of K^*
which generate K(S, m)
, with no access to the group structure. There is also a utility method K.selmer_group_iterator(m)
which I wrote ages ago to make it easy to iterate through all the elements of the group. There is no method to determine whether a given element of K^*
represents an element of K(S, m)
and if so express it in terms of the generators.
For many applications of mine I have needed something better, and for m = p
prime I have code for a function pSelmerGroup(K, S, p)
which returns a quadruple (KSp, KSp_gens, from_KSp, to_KS_p)
where KSp
is an abstract vector space over GF(p)
, KSp_gens
is a set of elements of K^*
which generate K(S, p)
(similar to K.selmer_group(S, p)
), from_KSp
is a map from the abstract KSp
to K^*
(the easy one) and to_KSp
is the harder map from a subset of K^*
to the vector space.
Together with some utilities this is about 560 lines of code, with docstrings but no doctest yet. I intend to add this to Sage.
There are two issues: (1) it would make sense to have K.selmer_group(S, p)
return the quadruple as above, but this would not be backwards compatible; (2) the new functionality is only for prime p
, not general m
. I have no plans for a general version, giving a finite abelian group rather than a vector space, though for elliptic curve applications the cases m = 4
, m = 6
, m = 12
are all useful. There's a version of the Chinese Remainder Theorem at play here so m = 6
is easy using m = 2
and m = 3
, and m = 12
is easy given m = 3
and m = 4
, while m = 4
requires real work. I implemented these cases some time ago in Magma, where I also implemented the prime case, so it is possible.
I am not sure how to solve the backwards compatibility issue. Places in Sage itself will be easy to handle (there are not many), but to avoid breaking user code will be harder unless I use a new name for the new method, perhaps K.selmer_space(S, p)
, though "Selmer space" is not standard terminology. I'll think of something by the time I have a patch ready for review.
Component: number fields
Author: John Cremona
Branch/Commit: 257a47d
Reviewer: David Roe
Issue created by migration from https://trac.sagemath.org/ticket/31345