new nth_root procedure for power series

This commit is contained in:
jgarnek 2024-01-03 09:06:35 +00:00
parent 29118d0783
commit 49cc75320d
6 changed files with 42 additions and 34 deletions

View File

@ -97,7 +97,6 @@ class as_form:
RxyzQ, Rxyz, x, y, z = C.fct_field
# We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials,
# and sometimes basis elements have denominators. Thus we multiply by them.
print([denominator(omega.form) for omega in basis])
denom = LCM([denominator(omega.form) for omega in basis])
basis = [denom*omega for omega in basis]
self_with_no_denominator = denom*self
@ -194,12 +193,12 @@ def artin_schreier_transform(power_series, prec = 10):
power_series = power_series - (coeff*t^(-p*M) - coeff.nth_root(p)*t^(-M))
jump = max(-(power_series.valuation()), 0)
try:
T = ((power_series)^(-1)).nth_root(jump) #T is defined by power_series = 1/T^m
T = nth_root2((power_series)^(-1), jump, prec=prec) #T is defined by power_series = 1/T^m
except:
print("no ", str(jump), "-th root; divide by", power_series.list()[0])
return (jump, power_series.list()[0])
T_rev = new_reverse(T, prec = prec)
t_old = T_rev(t^p/(1 - t^((p-1)*jump)).nth_root(jump))
t_old = T_rev(t^p/nth_root2(1 - t^((p-1)*jump), jump, prec=prec))
z = 1/t^(jump) + Rt(correction)(t = t_old)
return(jump, correction, t_old, z)

View File

@ -27,7 +27,7 @@ def group_action_matrices_dR(AS, threshold=8):
ei = n*[0]
ei[i] = 1
generators += [ei]
basis = [AS.holomorphic_differentials_basis(), AS.cohomology_of_structure_sheaf_basis(), AS.de_rham_basis(threshold=threshold)]
basis = [AS.holomorphic_differentials_basis(threshold = threshold), AS.cohomology_of_structure_sheaf_basis(threshold = threshold), AS.de_rham_basis(threshold=threshold)]
return group_action_matrices(basis[2], generators, basis = basis)
def group_action_matrices_old(C_AS):

View File

@ -9,4 +9,4 @@ Rxy.<x, y> = PolynomialRing(F, 2)
f1 = superelliptic_function(C_super, x^7)
f2 = superelliptic_function(C_super, x^4)
AS = as_cover(C_super, [f1, f2], prec=1000)
print(AS.unifomizer().valuation() == 1)
print(AS.uniformizer().valuation() == 1)

View File

@ -16,4 +16,16 @@ def naive_hensel(fct, F, start = 1, prec=10):
while(i < prec):
w0 = w0 - fct(W = w0)/alpha + O(t^(prec))
i += 1
return w0
return w0
def nth_root2(fct, n, prec=10):
'''Given power series in F((t)), find its n-th root up to precision prec.'''
F= parent(fct).base_ring()
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
RW.<W> = PolynomialRing(Rt)
v = fct.valuation()
fct1 = Rt(fct*t^(-v))
a0 = fct1[0]
if v%n != 0:
raise ValueError('The valuation of the power series is not divisible by n.')
return t^(v//n)*naive_hensel(W^n - fct1, F, start = a0.nth_root(n), prec=prec)

View File

@ -1,18 +1,15 @@
def reduction(g):
F = g.parent().base()
x, y = g.parent().gens()
Rxy.<x, y> = PolynomialRing(F, 2)
Fxy = FractionField(Rxy)
Rx.<x> = PolynomialRing(F)
Fx = FractionField(Rx)
FxRy.<y> = PolynomialRing(Fx)
g = Fxy(g)
g1 = g.numerator()
g2 = g.denominator()
print('aa', FxRy(g2))
F = GF(3).algebraic_closure()
R.<x, y> = PolynomialRing(F, 2)
g = x
reduction(g)
p = 5
#F.<a> = GF(p^2, 'a')
F.<a> = GF(p^8, 'a')
#F = GF(p).algebraic_closure()
#a = F.gen(2)
Rx.<x> = PolynomialRing(F)
P1 = superelliptic(x, 1)
m = 4
s = (p^8 - 1)/(p^2 - 1)
b = a^s
C = as_cover(P1, [(P1.x)^(m), b*(P1.x)^(m)], prec=300)
print(C)
A, B = group_action_matrices_dR(C)
print('matrices')
print(magma_module_decomposition(A, B, matrices=False))

View File

@ -1,16 +1,16 @@
#load('init.sage')
print("Expansion at infty test:")
load('superelliptic/tests/expansion_at_infty.sage')
print("superelliptic form coordinates test:")
load('superelliptic/tests/form_coordinates_test.sage')
print("p-th root test:")
load('superelliptic/tests/pth_root_test.sage')
#print("Expansion at infty test:")
#load('superelliptic/tests/expansion_at_infty.sage')
#print("superelliptic form coordinates test:")
#load('superelliptic/tests/form_coordinates_test.sage')
#print("p-th root test:")
#load('superelliptic/tests/pth_root_test.sage')
#print("not working! superelliptic p rank test:")
#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("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:")