Skip to content

Commit 01d620d

Browse files
committed
enhance documentation of logarithm
1 parent bfe9a0c commit 01d620d

File tree

1 file changed

+40
-10
lines changed

1 file changed

+40
-10
lines changed

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

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,6 +1051,19 @@ def exponential(self, name='z'):
10511051
sage: log.compose(exp)
10521052
z + O(z^8)
10531053
1054+
TESTS::
1055+
1056+
sage: A = GF(2)['T']
1057+
sage: K.<T> = Frac(A)
1058+
sage: phi = DrinfeldModule(A, [T, 1])
1059+
sage: exp = phi.exponential()
1060+
sage: exp[2] == 1/(T**q - T) # expected value
1061+
True
1062+
sage: exp[2^2] == 1/((T**(q**2) - T)*(T**q - T)**q) # expected value
1063+
True
1064+
sage: exp[2^3] == 1/((T**(q**3) - T)*(T**(q**2) - T)**q*(T**q - T)**(q**2)) # expected value
1065+
True
1066+
10541067
REFERENCE:
10551068
10561069
See section 4.6 of [Gos1998]_ for the definition of the exponential.
@@ -1251,28 +1264,45 @@ def logarithm(self, name='z'):
12511264
r"""
12521265
Return the logarithm of the given Drinfeld module.
12531266
1267+
By definition, the logarithm is the compositional inverse of the
1268+
exponential (see :meth:`exponential`).
1269+
12541270
EXAMPLES::
12551271
12561272
sage: A = GF(2)['T']
12571273
sage: K.<T> = Frac(A)
12581274
sage: phi = DrinfeldModule(A, [T, 1])
1259-
sage: q = A.base_ring().cardinality()
12601275
sage: log = phi.logarithm(); log
1261-
z + ((1/(T^2+T))*z^2) + ((1/(T^6+T^5+T^3+T^2))*z^4) + O(z^7)
1262-
sage: log[q] == -1/((T**q - T))
1263-
True
1264-
sage: log[q**2] == 1/((T**q - T)*(T**(q**2) - T))
1265-
True
1266-
sage: log[q**3] == -1/((T**q - T)*(T**(q**2) - T)*(T**(q**3) - T))
1267-
True
1276+
z + ((1/(T^2+T))*z^2) + ((1/(T^6+T^5+T^3+T^2))*z^4) + O(z^8)
12681277
1269-
::
1278+
The logarithm is returned as a lazy power series, meaning that any of
1279+
its coefficients can be computed on demands::
1280+
1281+
sage: log[2^4]
1282+
1/(T^30 + T^29 + T^27 + T^26 + T^23 + T^22 + T^20 + T^19 + T^15 + T^14 + T^12 + T^11 + T^8 + T^7 + T^5 + T^4)
1283+
sage: log[2^5]
1284+
1/(T^62 + T^61 + T^59 + T^58 + T^55 + T^54 + T^52 + T^51 + T^47 + T^46 + T^44 + T^43 + T^40 + T^39 + T^37 + T^36 + T^31 + T^30 + T^28 + T^27 + T^24 + T^23 + T^21 + T^20 + T^16 + T^15 + T^13 + T^12 + T^9 + T^8 + T^6 + T^5)
1285+
1286+
Example in higher rank::
12701287
12711288
sage: A = GF(5)['T']
12721289
sage: K.<T> = Frac(A)
12731290
sage: phi = DrinfeldModule(A, [T, T^2, T + T^2 + T^4, 1])
12741291
sage: phi.logarithm()
1275-
z + ((4*T/(T^4+4))*z^5) + O(z^7)
1292+
z + ((4*T/(T^4+4))*z^5) + O(z^8)
1293+
1294+
TESTS::
1295+
1296+
sage: A = GF(2)['T']
1297+
sage: K.<T> = Frac(A)
1298+
sage: phi = DrinfeldModule(A, [T, 1])
1299+
sage: q = 2
1300+
sage: log[2] == -1/((T**q - T)) # expected value
1301+
True
1302+
sage: log[2**2] == 1/((T**q - T)*(T**(q**2) - T)) # expected value
1303+
True
1304+
sage: log[2**3] == -1/((T**q - T)*(T**(q**2) - T)*(T**(q**3) - T)) # expected value
1305+
True
12761306
"""
12771307
L = LazyPowerSeriesRing(self._base, name)
12781308
return L(self._compute_coefficient_log, valuation=1)

0 commit comments

Comments
 (0)