Beispiel #1
0
    def characters(self):
        r"""
        Return the two characters `(\chi_1, \chi_2)` such this representation
        `\pi_{f, p}` is equal to the principal series `\pi(\chi_1, \chi_2)`.
        These are the unramified characters mapping `p` to the roots of the Satake polynomial,
        so in most cases (but not always) they will be defined over an
        extension of the coefficient field of self.

        EXAMPLES::

            sage: LocalComponent(Newform('11a'), 17).characters()
            [
            Character of Q_17*, of level 0, mapping 17 |--> d,
            Character of Q_17*, of level 0, mapping 17 |--> -d - 2
            ]
            sage: LocalComponent(Newforms(Gamma1(5), 6, names='a')[1], 3).characters()
            [
            Character of Q_3*, of level 0, mapping 3 |--> -3/2*a1 + 12,
            Character of Q_3*, of level 0, mapping 3 |--> -3/2*a1 - 12
            ]
        """
        f = self.satake_polynomial()
        if not f.is_irreducible():
            # This can happen; see the second example above
            d = f.roots()[0][0]
        else:
            d = self.coefficient_field().extension(f, 'd').gen()
        G = SmoothCharacterGroupQp(self.prime(), d.parent())
        return Sequence([
            G.character(0, [d]),
            G.character(0, [self.newform()[self.prime()] - d])
        ],
                        cr=True,
                        universe=G)
Beispiel #2
0
 def characters(self):
     r"""
     Return the two characters `(\chi_1, \chi_2)` such this representation
     `\pi_{f, p}` is equal to the principal series `\pi(\chi_1, \chi_2)`. 
     These are the unramified characters mapping `p` to the roots of the Satake polynomial, 
     so in most cases (but not always) they will be defined over an
     extension of the coefficient field of self.
     
     EXAMPLES::
     
         sage: LocalComponent(Newform('11a'), 17).characters()
         [
         Character of Q_17*, of level 0, mapping 17 |--> d,
         Character of Q_17*, of level 0, mapping 17 |--> -d - 2
         ]
         sage: LocalComponent(Newforms(Gamma1(5), 6, names='a')[1], 3).characters()
         [
         Character of Q_3*, of level 0, mapping 3 |--> -3/2*a1 + 12,
         Character of Q_3*, of level 0, mapping 3 |--> -3/2*a1 - 12
         ]
     """
     f = self.satake_polynomial()
     if not f.is_irreducible():
         # This can happen; see the second example above
         d = f.roots()[0][0]
     else:
         d = self.coefficient_field().extension(f, 'd').gen()
     G = SmoothCharacterGroupQp(self.prime(), d.parent())
     return Sequence([G.character(0, [d]), G.character(0, [self.newform()[self.prime()] - d])], cr=True, universe=G)
Beispiel #3
0
    def characters(self):
        r"""
        Return the two characters `(\chi_1, \chi_2)` such that the local component `\pi_{f, p}` is the induction of the character `\chi_1 \times \chi_2` of the Borel subgroup.

        EXAMPLE::

            sage: LocalComponent(Newforms(Gamma1(13), 2, names='a')[0], 13).characters()
            [
            Character of Q_13*, of level 0, mapping 13 |--> 3*a0 + 2,
            Character of Q_13*, of level 1, mapping 2 |--> a0 + 2, 13 |--> -3*a0 - 7
            ]
        """
        G = SmoothCharacterGroupQp(self.prime(), self.coefficient_field())
        chi1 = G.character(0, [self.newform()[self.prime()]])
        chi2 = G.character(0, [self.prime()]) * self.central_character() / chi1
        return Sequence([chi1, chi2], cr=True, universe=G)
Beispiel #4
0
 def characters(self):
     r"""
     Return the two characters `(\chi_1, \chi_2)` such that the local component `\pi_{f, p}` is the induction of the character `\chi_1 \times \chi_2` of the Borel subgroup.
     
     EXAMPLE::
         
         sage: LocalComponent(Newforms(Gamma1(13), 2, names='a')[0], 13).characters()
         [
         Character of Q_13*, of level 0, mapping 13 |--> 3*a0 + 2,
         Character of Q_13*, of level 1, mapping 2 |--> a0 + 2, 13 |--> -3*a0 - 7
         ]
     """
     G = SmoothCharacterGroupQp(self.prime(), self.coefficient_field())
     chi1 = G.character(0, [self.newform()[self.prime()]])
     chi2 = G.character(0, [self.prime()]) * self.central_character() / chi1
     return Sequence([chi1, chi2], cr=True, universe=G)
Beispiel #5
0
    def central_character(self):
        r"""
        Return the central character of this representation. This is the
        restriction to `\QQ_p^\times` of the unique smooth character `\omega`
        of `\mathbf{A}^\times / \QQ^\times` such that `\omega(\varpi_\ell) =
        \ell^j \varepsilon(\ell)` for all primes `\ell \nmid Np`, where
        `\varpi_\ell` is a uniformiser at `\ell`, `\varepsilon` is the
        Nebentypus character of the newform `f`, and `j` is the twist factor
        (see the documentation for :func:`~LocalComponent`).

        EXAMPLES::

            sage: LocalComponent(Newform('27a'), 3).central_character()
            Character of Q_3*, of level 0, mapping 3 |--> 1

            sage: LocalComponent(Newforms(Gamma1(5), 5, names='c')[0], 5).central_character()
            Character of Q_5*, of level 1, mapping 2 |--> c0 + 1, 5 |--> 125

            sage: LocalComponent(Newforms(DirichletGroup(24)([1, -1,-1]), 3, names='a')[0], 2).central_character()
            Character of Q_2*, of level 3, mapping 7 |--> 1, 5 |--> -1, 2 |--> -2
        """
        from sage.arith.all import crt
        chi = self.newform().character()
        f = self.prime()**self.conductor()
        N = self.newform().level() // f
        G = DirichletGroup(f, self.coefficient_field())
        chip = G([chi(crt(ZZ(x), 1, f, N))
                  for x in G.unit_gens()]).primitive_character()
        a = crt(1, self.prime(), f, N)

        if chip.conductor() == 1:
            return SmoothCharacterGroupQp(
                self.prime(), self.coefficient_field()).character(
                    0, [chi(a) * self.prime()**self.twist_factor()])
        else:
            return SmoothCharacterGroupQp(
                self.prime(), self.coefficient_field()).character(
                    chip.conductor().valuation(self.prime()),
                    list((~chip).values_on_gens()) +
                    [chi(a) * self.prime()**self.twist_factor()])
Beispiel #6
0
    def characters(self):
        r"""
        Return the defining characters of this representation. In this case, it
        will return the unique unramified character `\chi` of `\QQ_p^\times`
        such that this representation is equal to `\mathrm{St} \otimes \chi`,
        where `\mathrm{St}` is the Steinberg representation (defined as the
        quotient of the parabolic induction of the trivial character by its
        trivial subrepresentation).

        EXAMPLES:

        Our first example is the newform corresponding to an elliptic curve of
        conductor `37`. This is the nontrivial quadratic twist of Steinberg,
        corresponding to the fact that the elliptic curve has non-split
        multiplicative reduction at 37::

            sage: LocalComponent(Newform('37a'), 37).characters()
            [Character of Q_37*, of level 0, mapping 37 |--> -1]

        We try an example in odd weight, where the central character isn't
        trivial::

            sage: Pi = LocalComponent(Newforms(DirichletGroup(21)([-1, 1]), 3, names='j')[0], 7); Pi.characters()
            [Character of Q_7*, of level 0, mapping 7 |--> -1/2*j0^2 - 7/2]
            sage: Pi.characters()[0] ^2 == Pi.central_character()
            True

        An example using a non-standard twist factor::

            sage: Pi = LocalComponent(Newforms(DirichletGroup(21)([-1, 1]), 3, names='j')[0], 7, twist_factor=3); Pi.characters()
            [Character of Q_7*, of level 0, mapping 7 |--> -7/2*j0^2 - 49/2]
            sage: Pi.characters()[0]^2 == Pi.central_character()
            True
        """

        return [
            SmoothCharacterGroupQp(
                self.prime(),
                self.coefficient_field()).character(0, [
                    self.newform()[self.prime()] * self.prime()
                    **((self.twist_factor() - self.newform().weight() + 2) / 2)
                ])
        ]