@@ -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