def de_rham_witt_lift_form0(omega): C = omega.curve omega_regular = omega.regular_form() #Present omega0 in the form P dx + Q dy #Now the obvious lift of omega0 = P dx + Q dy to de Rham-Witt is [P] d[x] + [Q] d[y] return omega_regular.dx.teichmuller()*(C.x.teichmuller().diffn()) + omega_regular.dy.teichmuller()*(C.y.teichmuller().diffn()) def de_rham_witt_lift_form8(omega): C = omega.curve g = C.genus() omega_regular = second_patch(omega).regular_form() omega_regular = (second_patch(omega_regular.dx), second_patch(omega_regular.dy)) u = (C.x)^(-1) v = (C.y)/(C.x)^(g+1) omega_lift = omega_regular[0].teichmuller()*(u.teichmuller().diffn()) + omega_regular[1].teichmuller()*(v.teichmuller().diffn()) return omega_lift def de_rham_witt_lift(cech_class, prec = 50): C = cech_class.curve g = C.genus() omega0 = cech_class.omega0 omega8 = cech_class.omega8 fct = cech_class.f omega0_lift = de_rham_witt_lift_form0(omega0) omega8_lift = de_rham_witt_lift_form8(omega8) print('omega0_lift, omega8_lift', omega0_lift, omega8_lift) aux = omega0_lift - omega8_lift - fct.teichmuller().diffn() # now aux is of the form (V(smth) + dV(smth), V(smth)) #return aux if aux.h1.function != 0: raise ValueError('Something went wrong - aux is not of the form (V(smth) + dV(smth), V(smth)).') decom_aux_h2 = decomposition_g0_g8(aux.h2, prec=prec) #decompose dV(smth) in aux as smth regular on U0 - smth regular on U8. aux_h2 = decom_aux_h2[0] aux_f = decom_aux_h2[2] aux_omega0 = decomposition_omega0_omega8(aux.omega, prec=prec)[0] result = superelliptic_drw_cech(omega0_lift - aux_omega0.verschiebung(), fct.teichmuller() + aux_h2.verschiebung() + aux_f.verschiebung()) compare = omega8_lift-decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung() print("result.omega8 == compare", result.omega8 == compare) print("result.omega8 - compare", result.omega8 - compare) #print('test:', omega0_lift - omega8_lift - fct.teichmuller().diffn() == decom_aux_h2[0].verschiebung().diffn() - decom_aux_h2[1].verschiebung().diffn() + decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()) #print('test 1:', omega0_lift - decom_aux_h2[0].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() - fct.teichmuller().diffn() == omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung()) #A = omega0_lift - decomposition_omega0_omega8(aux.omega, prec=prec)[0].verschiebung() #B = decom_aux_h2[0].verschiebung() + fct.teichmuller() #C = omega8_lift - decom_aux_h2[1].verschiebung().diffn() - decomposition_omega0_omega8(aux.omega, prec=prec)[1].verschiebung() #print('test 2:', A - B.diffn() == C) #print('test 3:', result.omega0 == A, result.f == B, result.omega8 == C) #print(result.omega8, '\n \n', compare, '\n \n', aux_f, '\n \n') return result#.reduce() def crystalline_cohomology_basis(self, prec = 50): result = [] for a in self.de_rham_basis(): result += [de_rham_witt_lift(a, prec = prec)] return result superelliptic.crystalline_cohomology_basis = crystalline_cohomology_basis