Let be a new modular eigenform of level
, and
a prime
dividing
, with
(
coprime to
). Suppose the power of
dividing the conductor of the character of
is
(so
).
Then there is an integer , which is
, such
that any twist of
by a character mod
also has level
. The type
space of
is the span of the modular eigensymbols corresponding to all of
these twists, which lie in a space of modular symbols for a suitable
subgroup. This space is the key to computing the isomorphism class of the local
component of the newform at
.
Bases: sage.structure.sage_object.SageObject
The modular symbol type space associated to a newform, at a prime dividing the level.
Exponent of dividing the conductor of the character of the form.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().character_conductor()
0
Exponent of dividing the level of the form.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().conductor()
2
Return the subspace of self corresponding to the plus eigensymbols of
and its Galois conjugates (as a subspace of the vector space
returned by free_module()).
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: T = example_type_space(); T.eigensymbol_subspace()
Vector space of degree 6 and dimension 1 over Number Field in a1 with defining polynomial ...
Basis matrix:
[...]
sage: T.eigensymbol_subspace().is_submodule(T.free_module())
True
The newform of which this is the type space.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().form()
q + q^2 + (-1/2*a1 + 1/2)*q^3 + q^4 + (a1 - 1)*q^5 + O(q^6)
Return the underlying vector space of this type space.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().free_module()
Vector space of dimension 6 over Number Field in a1 with defining polynomial ...
Return a group which is the level of all of the relevant
twists of
.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().group()
Congruence Subgroup Gamma_H(98) with H generated by [57]
Return True if there exists a newform of level strictly smaller
than
, and a Dirichlet character
of
-power conductor, such
that
where
is the form of which this is the
type space. To find such a form, use minimal_twist().
The result is cached.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().is_minimal()
True
sage: example_type_space(1).is_minimal()
False
Return a newform (not necessarily unique) which is a twist of the
original form by a Dirichlet character of
-power conductor, and
which has minimal level among such twists of
.
An error will be raised if is already minimal.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import TypeSpace, example_type_space
sage: T = example_type_space(1)
sage: T.form().q_expansion(12)
q - q^2 + 2*q^3 + q^4 - 2*q^6 - q^8 + q^9 + O(q^12)
sage: g = T.minimal_twist()
sage: g.q_expansion(12)
q - q^2 - 2*q^3 + q^4 + 2*q^6 + q^7 - q^8 + q^9 + O(q^12)
sage: g.level()
14
sage: TypeSpace(g, 7).is_minimal()
True
Return the prime .
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().prime()
7
Calculate the action of the group element on the type space.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: T = example_type_space(2)
sage: m = T.rho([2,0,0,1]); m
[ 1 -2 1 0]
[ 1 -1 0 1]
[ 1 0 -1 1]
[ 0 1 -2 1]
sage: v = T.eigensymbol_subspace().basis()[0]
sage: m * v == v
True
We test that it is a left action:
sage: T = example_type_space(0)
sage: a = [0,5,4,3]; b = [0,2,3,5]; ab = [1,4,2,2]
sage: T.rho(ab) == T.rho(a) * T.rho(b)
True
An odd level example:
sage: from sage.modular.local_comp.type_space import TypeSpace
sage: T = TypeSpace(Newform('54a'), 3)
sage: a = [0,1,3,0]; b = [2,1,0,1]; ab = [0,1,6,3]
sage: T.rho(ab) == T.rho(a) * T.rho(b)
True
The level away from .
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().tame_level()
2
Largest integer such that level of
= level of
for all
Dirichlet characters
modulo
.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space().u()
1
sage: from sage.modular.local_comp.type_space import TypeSpace
sage: f = Newforms(Gamma1(5), 5, names='a')[0]
sage: TypeSpace(f, 5).u()
0
Quickly return an example of a type space. Used mainly to speed up doctesting.
EXAMPLE:
sage: from sage.modular.local_comp.type_space import example_type_space
sage: example_type_space() # takes a while but caches stuff (21s on sage.math, 2012)
6-dimensional type space at prime 7 of form q + q^2 + (-1/2*a1 + 1/2)*q^3 + q^4 + (a1 - 1)*q^5 + O(q^6)
The above test takes a long time, but it precomputes and caches various things such that subsequent doctests can be very quick. So we don’t want to mark it # long time.
Given a Newform object , and a space
of modular symbols of the same
weight and level, find the subspace of
which corresponds to the Hecke
eigenvalues of
.
If base_extend = True, this will return a 2-dimensional space generated
by the plus and minus eigensymbols of . If base_extend = False it
will return a larger space spanned by the eigensymbols of
and its
Galois conjugates.
(NB: “Galois conjugates” needs to be interpreted carefully – see the last example below.)
should be an ambient space (because non-ambient spaces don’t implement
base_extend).
EXAMPLES:
sage: from sage.modular.local_comp.type_space import find_in_space
Easy case ( has rational coefficients):
sage: f = Newform('99a'); f
q - q^2 - q^4 - 4*q^5 + O(q^6)
sage: A = ModularSymbols(GammaH(99, [13]))
sage: find_in_space(f, A)
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 25 for Congruence Subgroup Gamma_H(99) with H generated by [13] of weight 2 with sign 0 and over Rational Field
Harder case:
sage: f = Newforms(23, names='a')[0]
sage: A = ModularSymbols(Gamma1(23))
sage: find_in_space(f, A, base_extend=True)
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 45 for Gamma_1(23) of weight 2 with sign 0 and over Number Field in a0 with defining polynomial x^2 + x - 1
sage: find_in_space(f, A, base_extend=False)
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 45 for Gamma_1(23) of weight 2 with sign 0 and over Rational Field
An example with character, indicating the rather subtle behaviour of base_extend:
sage: chi = DirichletGroup(5).0
sage: f = Newforms(chi, 7, names='c')[0]; f # long time (4s on sage.math, 2012)
q + c0*q^2 + (zeta4*c0 - 5*zeta4 + 5)*q^3 + ((-5*zeta4 - 5)*c0 + 24*zeta4)*q^4 + ((10*zeta4 - 5)*c0 - 40*zeta4 - 55)*q^5 + O(q^6)
sage: find_in_space(f, ModularSymbols(Gamma1(5), 7), base_extend=True) # long time
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 12 for Gamma_1(5) of weight 7 with sign 0 and over Number Field in c0 with defining polynomial x^2 + (5*zeta4 + 5)*x - 88*zeta4 over its base field
sage: find_in_space(f, ModularSymbols(Gamma1(5), 7), base_extend=False) # long time (27s on sage.math, 2012)
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 12 for Gamma_1(5) of weight 7 with sign 0 and over Cyclotomic Field of order 4 and degree 2
Note that the base ring in the second example is (the base
ring of the character of
), not
.