Skip to content

Commit b206797

Browse files
author
Xavier Caruso
committed
comment code
1 parent 8930bde commit b206797

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -572,18 +572,28 @@ def class_polynomial(self):
572572
...
573573
ValueError: coefficients are not polynomials
574574
"""
575+
# The algorithm is based on the following remark:
576+
# writing phi_T = g_0 + g_1*tau + ... + g_r*tau^r,
577+
# if s > deg(g_i/(q^i - 1)) - 1 for all i, then the
578+
# class module is equal to
579+
# H := E(Kinfty/A) / < T^(-s), T^(-s-1), ... >
580+
# where E(Kinfty/A) is Kinfty/A equipped with the
581+
# A-module structure coming from phi.
582+
575583
A = self.function_ring()
576584
Fq = A.base_ring()
577585
q = Fq.cardinality()
578586
r = self.rank()
579587

588+
# We compute the bound s
580589
gs = self.coefficients_in_function_ring(sparse=False)
581-
582590
s = max(gs[i].degree() // (q**i - 1) for i in range(1, r+1))
583591
if s == 0:
584-
# small case
585592
return A.one()
586593

594+
# We compute the matrix of phi_T acting on the quotient
595+
# M := (Kinfty/A) / < T^(-s), T^(-s-1), ... >
596+
# (for the standard structure of A-module!)
587597
M = matrix(Fq, s)
588598
qk = 1
589599
for k in range(r+1):
@@ -596,6 +606,12 @@ def class_polynomial(self):
596606
M[i, j] += gs[k][e]
597607
qk *= q
598608

609+
# We compute the subspace of E(Kinfty/A) (for the twisted
610+
# structure of A-module!)
611+
# V = < T^(-s), T^(-s+1), ... >
612+
# It is also the phi_T-saturation of T^(-s+1) in M, i.e.
613+
# the Fq-vector space generated by the phi_T^i(T^(-s+1))
614+
# for i varying in NN.
599615
v = vector(Fq, s)
600616
v[s-1] = 1
601617
vs = [v]
@@ -605,6 +621,8 @@ def class_polynomial(self):
605621
V = matrix(vs)
606622
V.echelonize()
607623

624+
# We compute the action of phi_T on H = M/V
625+
# as an Fq-linear map (encoded in the matrix N)
608626
dim = V.rank()
609627
pivots = V.pivots()
610628
j = ip = 0
@@ -613,6 +631,10 @@ def class_polynomial(self):
613631
j += 1
614632
ip += 1
615633
V[i,j] = 1
616-
617634
N = (V * M * ~V).submatrix(dim, dim)
635+
636+
# The class module is now H where the action of T
637+
# is given by the matrix N
638+
# The class polynomial is then the characteristic
639+
# polynomial of N
618640
return A(N.charpoly())

0 commit comments

Comments
 (0)