49 lines
2.1 KiB
Python
49 lines
2.1 KiB
Python
|
def decomposition_g0_pth_power(fct):
|
||
|
'''Decompose fct as g0 + A^p, if possible. Output: (g0, A).'''
|
||
|
omega = fct.diffn().regular_form()
|
||
|
g0 = omega.int()
|
||
|
A = (fct - g0).pth_root()
|
||
|
return (g0, A)
|
||
|
|
||
|
def decomposition_g0_p2th_power(fct):
|
||
|
'''Decompose fct as g0 + A^(p^2), if possible. Output: (g0, A).'''
|
||
|
g0, A = decomposition_g0_pth_power(fct)
|
||
|
A0, A1 = decomposition_g0_pth_power(A)
|
||
|
return (g0 + A0^p, A1)
|
||
|
|
||
|
def decomposition_omega0_hpdh(omega):
|
||
|
'''Decompose omega = (regular on U0) + h^(p-1) dh, so that Cartier(omega) = (regular on U0) + dh.
|
||
|
Result: (regular on U0, h)'''
|
||
|
omega1 = omega.cartier().cartier()
|
||
|
omega1 = omega1.inv_cartier().inv_cartier()
|
||
|
fct = (omega.cartier() - omega1.cartier()).int()
|
||
|
return (omega1, fct)
|
||
|
|
||
|
def decomposition_omega8_hpdh(omega, prec = 50):
|
||
|
'''Decompose omega = (regular on U8) + h^(p-1) dh, so that Cartier(omega) = (regular on U8) + dh.
|
||
|
Result: (regular on U8, h)'''
|
||
|
C = omega.curve
|
||
|
g = C.genus()
|
||
|
Fxy, Rxy, x, y = C.fct_field
|
||
|
F = C.base_ring
|
||
|
p = C.characteristic
|
||
|
Rt.<t> = LaurentSeriesRing(F)
|
||
|
RT.<T> = PolynomialRing(F)
|
||
|
FT = FractionField(RT)
|
||
|
omega_analytic = FT(laurent_analytic_part(omega.expansion_at_infty(prec = prec))(t = T))
|
||
|
print('omega_analytic', omega_analytic)
|
||
|
Cv = C.uniformizer()
|
||
|
v = Fxy(Cv.function)
|
||
|
omega_analytic = Fxy(omega_analytic(T = v))
|
||
|
print('expansions', superelliptic_function(C, omega_analytic).expansion_at_infty(prec = prec), '\n', Cv.diffn().expansion_at_infty(prec = prec),
|
||
|
'\n', (superelliptic_function(C, omega_analytic)*Cv.diffn()).expansion_at_infty(prec = prec))
|
||
|
omega_analytic = superelliptic_function(C, omega_analytic)*Cv.diffn()
|
||
|
print('omega_analytic.expansion_at_infty()', omega_analytic.expansion_at_infty(prec = prec))
|
||
|
print('omega_analytic', omega_analytic)
|
||
|
omega8 = omega - omega_analytic
|
||
|
print('omega8', omega8)
|
||
|
dh = omega.cartier() - omega8.cartier()
|
||
|
print('dh', dh)
|
||
|
h = dh.int()
|
||
|
print('omega8.expansion_at_infty()', omega8.expansion_at_infty(prec = prec))
|
||
|
return (omega8, h)
|