poprawa bledow w drw

This commit is contained in:
jgarnek 2024-01-09 09:48:05 +00:00
parent d480dda08b
commit 64314f8011
8 changed files with 50 additions and 35 deletions

View File

@ -288,7 +288,7 @@ def reduction_form(C, g):
g = FxRy(g(x = x1, y=y1))
for j in range(0, m):
if j==0:
G = Rx(coff(g, 0))
G = Fx(coff(g, 0))
g1 += FxRy(G)
else:
G = coff(g, j)

View File

@ -37,10 +37,13 @@ class superelliptic_form:
return str(g) + ' dx'
return '('+str(g) + ') dx'
def __rmul__(self, constant):
def __rmul__(self, other):
C = self.curve
F = C.base_ring
omega = self.form
return superelliptic_form(C, constant*omega)
if other in F:
return superelliptic_form(C, other*omega)
return superelliptic_form(C, other.function*omega)
def cartier(self):
'''Computes Cartier operator on the form. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m),
@ -175,7 +178,7 @@ class superelliptic_form:
fct = reduction(C, Fxy(y^m*fct))
return superelliptic_form(C, fct/y^m)
def int(self):
def integral(self):
'''Computes an "integral" of a form dg. Idea: y^m = f(x) -> y^(p^r - 1) = f(x)^M, where r = ord_p(m),
M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus int(h(x)/y^j dx) = 1/y^(p^(r-1)*j) int(h(x) f(x)^(M*j) dx).'''
C = self.curve

View File

@ -52,12 +52,13 @@ class superelliptic_function:
def __mul__(self, other):
C = self.curve
try:
F = C.base_ring
if isinstance(other, superelliptic_function):
g1 = self.function
g2 = other.function
g = reduction(C, g1 * g2)
return superelliptic_function(C, g)
except:
if isinstance(other, superelliptic_form):
g1 = self.function
g2 = other.form
g = reduction(C, g1 * g2)

View File

@ -15,7 +15,7 @@ class superelliptic_regular_form:
C = self.curve
return self.dx*C.dx + self.dy*C.y.diffn()
def int(self):
def integral(self):
'''Regular integral. Works only for hyperelliptics.'''
C = self.curve
f = C.polynomial
@ -23,15 +23,18 @@ class superelliptic_regular_form:
raise ValueError("Works only for hyperelliptics.")
F = C.base_ring
Rx.<x> = PolynomialRing(F)
Fx = FractionField(Rx)
Fxy, Rxy, x, y = C.fct_field
if self.dx == 0*C.x and self.dy == 0*C.x:
return 0*C.x
#which = random.choice([0, 1])
P = self.dx.function
Q = self.dy.function
RxRy.<y> = PolynomialRing(Rx)
P = RxRy(self.dx.function)
Q = RxRy(self.dy.function)
Py, Px = P.quo_rem(y) #P = y*Py + Px
Qy, Qx = Q.quo_rem(y)
result = superelliptic_function(C, Rx(Px + 1/2*Qy*f.derivative()).integral())
Py, Px, Qy, Qx, f = Rx(Py), Rx(Px), Rx(Qy), Rx(Qx), Rx(f)
result = superelliptic_function(C, Rx(Px + F(1/2)*Qy*f.derivative()).integral())
numerator = Rx(2*f*Py + f.derivative()*Qx)
# Now numerator = 2W' f + W f'. We are looking for W. Then result is W*y.
W = Rx(0)

View File

@ -5,7 +5,7 @@ def decomposition_g0_pth_power(fct):
return (fct, 0*C.x)
'''Decompose fct as g0 + A^p, if possible. Output: (g0, A).'''
omega = fct.diffn().regular_form()
g0 = omega.int()
g0 = omega.integral()
A = (fct - g0).pth_root()
return (g0, A)
@ -25,7 +25,7 @@ def decomposition_omega0_hpdh(omega):
return (omega, 0*C.x)
omega1 = omega.cartier().cartier()
omega1 = omega1.inv_cartier().inv_cartier()
fct = (omega.cartier() - omega1.cartier()).int()
fct = (omega.cartier() - omega1.cartier()).integral()
return (omega1, fct)
def decomposition_omega8_hpdh(omega, prec = 50):
@ -47,7 +47,7 @@ def decomposition_omega8_hpdh(omega, prec = 50):
omega_analytic = superelliptic_function(C, omega_analytic)*Cv.diffn()
omega8 = omega - omega_analytic
dh = omega.cartier() - omega8.cartier()
h = dh.int()
h = dh.integral()
return (omega8, h)
def decomposition_g8_pth_power(fct, prec = 50):

View File

@ -135,8 +135,8 @@ def auxilliary_derivative(P):
C = P.curve
F = C.base_ring
Rx.<x> = PolynomialRing(F)
P0 = Rx(P0)
P1 = Rx(P1)
P0 = Rx(P0.numerator())
P1 = Rx(P1.numerator())
if P0 == 0:
return superelliptic_drw_form(0*C.x, 0*C.dx, P.f)
M = P0.monomials()[0]

View File

@ -6,6 +6,8 @@ f = x^3 - x
C = superelliptic(f, m)
Rxy.<x, y> = PolynomialRing(F, 2)
omega = (((2*C.x^18 + 2*C.x^16 + 2*C.x^14 + 2*C.x^10 + 2*C.x^8 + 2*C.x^4 + 2*C.x^2 + 2*C.one)/(C.x^13 + C.x^11 + C.x^9))*C.y) * C.dx
print(decomposition_omega0_omega8(aux.omega)[0] - decomposition_omega0_omega8(aux.omega)[1] == omega and decomposition_omega0_omega8(aux.omega)[0].is_regular_on_U0() and decomposition_omega0_omega8(aux.omega)[1].is_regular_on_Uinfty())
print(decomposition_omega0_omega8(omega)[0] - decomposition_omega0_omega8(omega)[1] == omega and decomposition_omega0_omega8(omega)[0].is_regular_on_U0() and decomposition_omega0_omega8(omega)[1].is_regular_on_Uinfty())
h = ((C.x^10 + C.x^8 + C.x^6 + 2*C.x^4 + 2*C.x^2 + 2*C.one)/C.x^6)*C.y
print(decomposition_g0_g8(h))
print(decomposition_g0_g8(h)[0] - decomposition_g0_g8(h)[1] + decomposition_g0_g8(h)[2] == h and decomposition_g0_g8(h)[0].function in Rxy and decomposition_g0_g8(h)[1].expansion_at_infty().valuation() >= 0)

View File

@ -9,23 +9,29 @@
#load('superelliptic/tests/p_rank_test.sage')
#print("a-number test:")
#load('superelliptic/tests/a_number_test.sage')
print("as_cover_test:")
load('as_covers/tests/as_cover_test.sage')
print("group_action_matrices_test:")
load('as_covers/tests/group_action_matrices_test.sage')
print("dual_element_test:")
load('as_covers/tests/dual_element_test.sage')
print("ith_component_test:")
load('as_covers/tests/ith_component_test.sage')
print("ith ramification group test:")
load('as_covers/tests/ith_ramification_gp_test.sage')
print("uniformizer test:")
load('as_covers/tests/uniformizer_test.sage')
print("ramification jumps test:")
load('as_covers/tests/ramification_jumps_test.sage')
print("diffn_test:")
load('as_covers/tests/diffn_test.sage')
print("Cartier test:")
load('as_covers/tests/cartier_test.sage')
#print("as_cover_test:")
#load('as_covers/tests/as_cover_test.sage')
#print("group_action_matrices_test:")
#load('as_covers/tests/group_action_matrices_test.sage')
#print("dual_element_test:")
#load('as_covers/tests/dual_element_test.sage')
#print("ith_component_test:")
#load('as_covers/tests/ith_component_test.sage')
#print("ith ramification group test:")
#load('as_covers/tests/ith_ramification_gp_test.sage')
#print("uniformizer test:")
#load('as_covers/tests/uniformizer_test.sage')
#print("ramification jumps test:")
#load('as_covers/tests/ramification_jumps_test.sage')
#print("diffn_test:")
#load('as_covers/tests/diffn_test.sage')
#print("Cartier test:")
#load('as_covers/tests/cartier_test.sage')
print("Decomposition into g0, g8/ omega0, omega8 test:")
load('superelliptic_drw/tests/decomposition_into_g0_g8_tests.sage')
print("Auxilliary decomposition test:")
load('superelliptic_drw/tests/auxilliary_decompositions_test.sage')
print("Superelliptic de Rham-Witt test:")
load('superelliptic_drw/tests/superelliptic_drw_tests.sage')