def charpoly(self, g, var='x'): r""" Determines the characteristic polynomial `\det(I-gT)` """ if self.degree() == 0: return QQ.one() from sage.combinat.sf.sf import SymmetricFunctions S = SymmetricFunctions(QQ) p = S.powersum() e = S.elementary() deg = self.degree() traces = [self(g ** n) for n in range(1, deg+1)] x = PolynomialRing(QQ, var).gen() cp = x ** deg for n in range(deg): mc = p(e[n+1]).monomial_coefficients() cp += (-1) ** (n+1) * x ** (deg-1-n) * sum(mc[k] * prod(traces[j-1] for j in k) for k in mc.keys()) return cp
def charpoly_reverse(self, g, var='x'): r""" Determines the characteristic polynomial `\det(I-gT)` sage: from sage.rings.number_field.galois_group import GaloisGroup_v3 sage: from sage.rings.number_field.artin_representation import ArtinRepresentation sage: K = NumberField(x^3 - 2, 'a') sage: G = GaloisGroup_v3(K, names='b2') sage: chi = ArtinRepresentation(G, [2, 0, -1]) sage: L = G.splitting_field() sage: for p in prime_range(5, 50): ... print p, chi.charpoly_reverse(G.artin_symbol(L.primes_above(p)[0])) 5 -x^2 + 1 7 x^2 + x + 1 11 -x^2 + 1 13 x^2 + x + 1 17 -x^2 + 1 19 x^2 + x + 1 23 -x^2 + 1 29 -x^2 + 1 31 x^2 - 2*x + 1 37 x^2 + x + 1 41 -x^2 + 1 43 x^2 - 2*x + 1 47 -x^2 + 1 """ if self.degree() == 0: return QQ.one() from sage.combinat.sf.sf import SymmetricFunctions S = SymmetricFunctions(QQ) p = S.powersum() e = S.elementary() deg = self.degree() traces = [self(g ** n) for n in range(1, deg+1)] x = PolynomialRing(QQ, var).gen() cp = QQ.one() for n in range(deg): mc = p(e[n+1]).monomial_coefficients() cp += (-1) ** (n+1) * x ** (n+1) * sum(mc[k] * prod(traces[j-1] for j in k) for k in mc.keys()) return cp