From 3ded25e39d395b60130882c7fbdaf3f80ed95f49 Mon Sep 17 00:00:00 2001 From: jgarnek Date: Wed, 10 Jan 2024 12:40:09 +0000 Subject: [PATCH] nie dziala ani de rham, ani crystalline --- as_covers/as_cech_class.sage | 5 ++-- superelliptic/superelliptic_form_class.sage | 7 ++++++ .../superelliptic_drw_auxilliaries.sage | 22 ++++++++++++++-- superelliptic_drw/superelliptic_drw_cech.sage | 9 ++++++- superelliptic_drw/superelliptic_drw_form.sage | 2 +- superelliptic_drw/superelliptic_witt.sage | 25 +++++++++++++------ 6 files changed, 57 insertions(+), 13 deletions(-) diff --git a/as_covers/as_cech_class.sage b/as_covers/as_cech_class.sage index fafe8f2..ee12e83 100644 --- a/as_covers/as_cech_class.sage +++ b/as_covers/as_cech_class.sage @@ -13,8 +13,9 @@ class as_cech: self.omega0 = omega self.f = f self.omega8 = self.omega0 - self.f.diffn() - if self.omega0.form not in Rxyz or self.omega8.valuation() < 0: - raise ValueError('cech cocycle not regular') + print(self.omega0.form, self.omega8.valuation()) + #if self.omega0.form not in Rxyz or self.omega8.valuation() < 0: + # raise ValueError('cech cocycle not regular') def __repr__(self): return "( " + str(self.omega0)+", " + str(self.f) + " )" diff --git a/superelliptic/superelliptic_form_class.sage b/superelliptic/superelliptic_form_class.sage index c6bb9b2..11ee840 100644 --- a/superelliptic/superelliptic_form_class.sage +++ b/superelliptic/superelliptic_form_class.sage @@ -45,6 +45,11 @@ class superelliptic_form: return superelliptic_form(C, other*omega) return superelliptic_form(C, other.function*omega) + def __truediv__(self, other): + ''' f dx/g dx = f/g''' + C = self.curve + return superelliptic_function(C, self.form/other.form) + 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), M = (p^r - 1)/m. Thus h(x)/y^j dx = h(x) f(x)^(M*j)/y^(p^r * j) dx. Thus C(h(x)/y^j dx) = 1/y^(p^(r-1)*j) C(h(x) f(x)^(M*j) dx).''' @@ -86,6 +91,7 @@ class superelliptic_form: return -result def coordinates(self, basis = 0): + print('start', self) """Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo.""" C = self.curve if basis == 0: @@ -96,6 +102,7 @@ class superelliptic_form: denom = LCM([denominator(omega.form) for omega in basis]) basis = [denom*omega.form for omega in basis] self_with_no_denominator = denom*self.form + print('stop', self_with_no_denominator) return linear_representation_polynomials(Rxy(self_with_no_denominator), [Rxy(omega) for omega in basis]) def jth_component(self, j): diff --git a/superelliptic_drw/superelliptic_drw_auxilliaries.sage b/superelliptic_drw/superelliptic_drw_auxilliaries.sage index c6dafc7..e927c87 100644 --- a/superelliptic_drw/superelliptic_drw_auxilliaries.sage +++ b/superelliptic_drw/superelliptic_drw_auxilliaries.sage @@ -18,14 +18,29 @@ def decomposition_g0_p2th_power(fct): 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. + '''Decompose omega = (regular on U0) + h^(p-1) dh + d(smth), so that Cartier(omega) = (regular on U0) + dh. Result: (regular on U0, h)''' + print('decomp!!', omega) C = omega.curve + F = C.base_ring + p = F.characteristic() if omega.is_regular_on_U0(): return (omega, 0*C.x) omega1 = omega.cartier().cartier() omega1 = omega1.inv_cartier().inv_cartier() + print('do scalkowania', omega.cartier() - omega1.cartier()) fct = (omega.cartier() - omega1.cartier()).integral() + #dfct = omega.cartier() - omega1.cartier() #this is dh + #print('dfct.cartier = 0?', dfct.cartier()) + #omegas_by_dh = (omega - omega1)/dfct + #d_omegas_by_dh = omegas_by_dh.diffn() + #fct = - (omega - omega1)/d_omegas_by_dh + + #fct = (omega.cartier() - omega1.cartier()).integral() + #h = (omega - omega0)/(d((omega - omega0)/dh)) + + print('decomposition_omega0_hpdh', omega, omega1, fct) + print('??', omega.verschiebung() == omega1.verschiebung()) return (omega1, fct) def decomposition_omega8_hpdh(omega, prec = 50): @@ -36,7 +51,6 @@ def decomposition_omega8_hpdh(omega, prec = 50): Fxy, Rxy, x, y = C.fct_field F = C.base_ring p = C.characteristic - C = omega.curve if omega.is_regular_on_Uinfty(): return (omega, 0*C.x) Rt. = LaurentSeriesRing(F) @@ -54,6 +68,7 @@ def decomposition_g8_pth_power(fct, prec = 50): '''Decompose fct as g8 + A^p, if possible. Output: (g8, A).''' C = fct.curve F = C.base_ring + p = F.characteristic() Rt. = LaurentSeriesRing(F) Fxy, Rxy, x, y = C.fct_field if fct.expansion_at_infty().valuation() >= 0: @@ -69,6 +84,9 @@ def decomposition_g8_pth_power(fct, prec = 50): def decomposition_g8_p2th_power(fct): '''Decompose fct as g8 + A^(p^2), if possible. Output: (g8, A).''' + C = fct.curve + F = C.base_ring + p = F.characteristic() g0, A = decomposition_g8_pth_power(fct) A0, A1 = decomposition_g8_pth_power(A) return (g0 + A0^p, A1) \ No newline at end of file diff --git a/superelliptic_drw/superelliptic_drw_cech.sage b/superelliptic_drw/superelliptic_drw_cech.sage index 23b257b..10d5ab7 100644 --- a/superelliptic_drw/superelliptic_drw_cech.sage +++ b/superelliptic_drw/superelliptic_drw_cech.sage @@ -66,6 +66,8 @@ class superelliptic_drw_cech: if info: print("Computing " + str(self) + " divided by p.") # C = self.curve + F = C.base_ring + p = F.characteristic() aux = self Fxy, Rxy, x, y = C.fct_field aux_f_t_0 = decomposition_g0_g8(aux.f.t, prec=50)[0] @@ -80,7 +82,7 @@ class superelliptic_drw_cech: # We replace omega by regular on U0 omega = aux.omega0.omega aux.omega0.omega, fct = decomposition_omega0_hpdh(aux.omega0.omega) - aux.omega0.h2 += fct^p + #aux.omega0.h2 += fct^p #WRONG I think # if info: print("Computed decomposition_omega0_hpdh of self.omega0.omega.") # @@ -107,6 +109,8 @@ class superelliptic_drw_cech: def coordinates(self, basis = 0, prec = 50, info = 0): if info: print("Computing coordinates of " + str(self)) C = self.curve + F = C.base_ring + p = F.characteristic() g = C.genus() coord_mod_p = self.r().coordinates() if info: print("Computed coordinates mod p.") @@ -116,7 +120,10 @@ class superelliptic_drw_cech: aux = self for i, a in enumerate(basis): aux -= coord_lifted[i]*a + print("aux!!!", aux) aux_divided_by_p = aux.div_by_p(info = info) + print("aux by p!!!", aux_divided_by_p) + print("check", mult_by_p(aux_divided_by_p)-aux) coord_aux_divided_by_p = aux_divided_by_p.coordinates() if info: print("Computed coordinates mod p of (self - lift)/p.") coord_aux_divided_by_p = [ZZ(a) for a in coord_aux_divided_by_p] diff --git a/superelliptic_drw/superelliptic_drw_form.sage b/superelliptic_drw/superelliptic_drw_form.sage index 010f36f..b7cb350 100644 --- a/superelliptic_drw/superelliptic_drw_form.sage +++ b/superelliptic_drw/superelliptic_drw_form.sage @@ -1,6 +1,6 @@ class superelliptic_drw_form: def __init__(self, h1, omega, h2): - '''Form [h1] d[x] + V(omega) + dV([h])''' + '''Form [h1] d[x] + V(omega) + dV([h2])''' self.curve = h1.curve self.h1 = h1 self.omega = omega diff --git a/superelliptic_drw/superelliptic_witt.sage b/superelliptic_drw/superelliptic_witt.sage index 02e8d2f..bfa2a0f 100644 --- a/superelliptic_drw/superelliptic_witt.sage +++ b/superelliptic_drw/superelliptic_witt.sage @@ -26,6 +26,8 @@ class superelliptic_witt: second_coor = 0*C.x X = self.t Y = other.t + F = C.base_ring + p = F.characteristic() for i in range(1, p): second_coor -= binomial_prim(p, i)*X^i*Y^(p-i) return superelliptic_witt(self.t + other.t, self.f + other.f + second_coor) @@ -149,13 +151,22 @@ def auxilliary_derivative(P): -def mult_by_p(omega): - C = omega.curve - fct = omega.form - Fxy, Rxy, x, y = C.fct_field - omega = superelliptic_form(C, fct^p * x^(p-1)) - result = superelliptic_drw_form(0*C.x, omega, 0*C.x) - return result +def mult_by_p(elt): + C = elt.curve + F = C.base_ring + p = F.characteristic() + if isinstance(elt, superelliptic_form): + fct = elt.form + Fxy, Rxy, x, y = C.fct_field + omega = superelliptic_form(C, fct^p * x^(p-1)) + result = superelliptic_drw_form(0*C.x, elt, 0*C.x) + return result + if isinstance(elt, superelliptic_function): + return superelliptic_witt(0*C.x, elt^p) + if isinstance(elt, superelliptic_cech): + om0 = elt.omega0 + f = elt.f + return superelliptic_drw_cech(mult_by_p(om0), mult_by_p(f)) def verschiebung(elt): C = elt.curve