def teichmuller(self, n): AS = self.curve return as_witt([self] + n*[0*AS.x]) as_function.teichmuller = teichmuller def Vd(self, n, m = 1): '''Return V^m([f] d[x]) in W_n Omega''' AS = self.curve if m == 0: return as_witt_form([self] + n*[0*AS.x], (n+1)*[0*AS.x]) return as_witt_form(m*[0*AS.x] + [self] + (n-m)*[0*AS.x], (n+1)*[0*AS.x]) as_function.Vd = Vd def dV(self, n, m = 1): '''Return dV^m([f] d[x]) in W_n Omega''' AS = self.curve return as_witt_form((n+1)*[0*AS.x], m*[0*AS.x] + [self] + (n-m)*[0*AS.x]) as_function.dV = dV def witt_diffn(self, n): RxyzQ, Rxyz, x, y, z = AS.fct_field F = Rxyz.base_ring Rx. = PolynomialRing(F) return 0 as_function.witt_diffn = witt_diffn def auxilliary_multiplication(fct, i, form_fct, j, n): '''Return V^i(fct)*V^j(form_fct dx) in W_n Omega''' AS = fct.curve p = AS.base_ring.characteristic() if i == 0: return as_witt_form(j*[0*AS.x] + [fct^(p^j) * form_fct] + (n-j)*[0*AS.x], (n+1)*[0*AS.x]) if j == 0: return auxilliary_multiplication(fct, i-1, form_fct^p * AS.x^(p-1), j, n).verschiebung() return p*auxilliary_multiplication(fct, i-1, form_fct, j-1, n).verschiebung() def auxilliary_multiplication2(fct1, i, fct2, j, n): '''Return V^i(fct1)*dV^j(fct2) in W_n Omega''' AS = fct.curve p = AS.base_ring.characteristic() if i > 0 and j > 0: return auxilliary_multiplication2(fct1, i, fct2, j, n).verschiebung() if i == 0: aux_Vs = j*[0*AS.x] * [fct2 * fct1^(p^j - 1) * fct1.diffn()/AS.dx] + (n - j)*[0*AS.x] aux = as_witt_form(aux_Vs, (n+1)*[0*AS.x]) return as_witt_form((n+1)*[0*AS.x], j*[0*AS.x] + [fct1^(p^j) * fct2] + (n-j)*[0*AS.x]) - aux if j == 0: aux_Vs = j*[0*AS.x] * [fct1 * fct2^(p^j - 1) * fct2.diffn()/AS.dx] + (n - j)*[0*AS.x] aux = as_witt_form(aux_Vs, (n+1)*[0*AS.x]) return aux