From f6830178550bda46ec36133931b71a4d14d67a64 Mon Sep 17 00:00:00 2001 From: jgarnek Date: Mon, 13 Feb 2023 17:11:13 +0000 Subject: [PATCH] cohomology of str sheaf dodany; zaczynamy zmieniac wspolrzedne w superelliptic holo --- sage/.run.term-0.term | 131 +++++++++++++++++- sage/init.sage | 2 +- sage/superelliptic/superelliptic_class.sage | 43 +++++- .../superelliptic_form_class.sage | 8 ++ .../superelliptic_function_class.sage | 14 +- 5 files changed, 194 insertions(+), 4 deletions(-) diff --git a/sage/.run.term-0.term b/sage/.run.term-0.term index 8ec445d..c885a45 100644 --- a/sage/.run.term-0.term +++ b/sage/.run.term-0.term @@ -26748,4 +26748,133 @@ Input In [81], in () ]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ git add draft/supsage/drafty/superelliptic_cohomology_class.sage  ]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ gid add -u bash: gid: command not found -]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ gid add -u \ No newline at end of file +]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ gid add -u[1@t +]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ git commit -m ""C"o"h"o"m"o"l"o"g"y" "o"f" "s"t"r"u"c"t"u"r"e" "s"h"e"a"f" "o"f" "s"u"p"e"r"e"l"l"i"p"t"i"c" +[master be66e7b] Cohomology of structure sheaf of superelliptic + 11 files changed, 7056 insertions(+), 82 deletions(-) + delete mode 100644 sage/as_covers/as_cover/uniformizer.sage + rewrite sage/drafty/draft3.sage (90%) + create mode 100644 sage/drafty/superelliptic_cohomology_class.sage +]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ git push +Username for 'https://git.wmi.amu.edu.pl': jgarnek +Password for 'https://jgarnek@git.wmi.amu.edu.pl': +Enumerating objects: 37, done. +Counting objects: 2% (1/37) Counting objects: 5% (2/37) Counting objects: 8% (3/37) Counting objects: 10% (4/37) Counting objects: 13% (5/37) Counting objects: 16% (6/37) Counting objects: 18% (7/37) Counting objects: 21% (8/37) Counting objects: 24% (9/37) Counting objects: 27% (10/37) Counting objects: 29% (11/37) Counting objects: 32% (12/37) Counting objects: 35% (13/37) Counting objects: 37% (14/37) Counting objects: 40% (15/37) Counting objects: 43% (16/37) Counting objects: 45% (17/37) Counting objects: 48% (18/37) Counting objects: 51% (19/37) Counting objects: 54% (20/37) Counting objects: 56% (21/37) Counting objects: 59% (22/37) Counting objects: 62% (23/37) Counting objects: 64% (24/37) Counting objects: 67% (25/37) Counting objects: 70% (26/37) Counting objects: 72% (27/37) Counting objects: 75% (28/37) Counting objects: 78% (29/37) Counting objects: 81% (30/37) Counting objects: 83% (31/37) Counting objects: 86% (32/37) Counting objects: 89% (33/37) Counting objects: 91% (34/37) Counting objects: 94% (35/37) Counting objects: 97% (36/37) Counting objects: 100% (37/37) Counting objects: 100% (37/37), done. +Delta compression using up to 4 threads +Compressing objects: 4% (1/23) Compressing objects: 8% (2/23) Compressing objects: 13% (3/23) Compressing objects: 17% (4/23) Compressing objects: 21% (5/23) Compressing objects: 26% (6/23) Compressing objects: 30% (7/23) Compressing objects: 34% (8/23) Compressing objects: 39% (9/23) Compressing objects: 43% (10/23) Compressing objects: 47% (11/23) Compressing objects: 52% (12/23) Compressing objects: 56% (13/23) Compressing objects: 60% (14/23) Compressing objects: 65% (15/23) Compressing objects: 69% (16/23) Compressing objects: 73% (17/23) Compressing objects: 78% (18/23) Compressing objects: 82% (19/23) Compressing objects: 86% (20/23) Compressing objects: 91% (21/23) Compressing objects: 95% (22/23) Compressing objects: 100% (23/23) Compressing objects: 100% (23/23), done. +Writing objects: 4% (1/23) Writing objects: 8% (2/23) Writing objects: 13% (3/23) Writing objects: 17% (4/23) Writing objects: 26% (6/23) Writing objects: 34% (8/23) Writing objects: 39% (9/23) Writing objects: 43% (10/23) Writing objects: 47% (11/23) Writing objects: 52% (12/23) Writing objects: 56% (13/23) Writing objects: 60% (14/23) Writing objects: 65% (15/23) Writing objects: 69% (16/23) Writing objects: 73% (17/23) Writing objects: 78% (18/23) Writing objects: 82% (19/23) Writing objects: 86% (20/23) Writing objects: 91% (21/23) Writing objects: 95% (22/23) Writing objects: 100% (23/23) Writing objects: 100% (23/23), 73.16 KiB | 337.00 KiB/s, done. +Total 23 (delta 15), reused 0 (delta 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To https://git.wmi.amu.edu.pl/jgarnek/DeRhamComputation.git + d77adde..be66e7b master -> master +]0;~/Research/2021 De Rham/DeRhamComputation~/Research/2021 De Rham/DeRhamComputation$ ]0;~/Research/2021 De Rham/DeRhamComputation/sage~/Research/2021 De Rham/DeRhamComputation/sage$ ]0;~/Research/2021 De Rham/DeRhamComputation/sage~/Research/2021 De Rham/DeRhamComputation/sage$ sage +┌────────────────────────────────────────────────────────────────────┐ +│ SageMath version 9.7, Release Date: 2022-09-19 │ +│ Using Python 3.10.5. Type "help()" for help. │ +└────────────────────────────────────────────────────────────────────┘ +]0;IPython: DeRhamComputation/sage[?2004h[?1l[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lload('init.sage')[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lad('init.sage')[?7h[?12l[?25h[?25l[?7lsage: load('init.sage') +[?7h[?12l[?25h[?2004l[5] +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.is_smooth()[?7h[?12l[?25h[?25l[?7lsage: C +[?7h[?12l[?25h[?2004l[?7hSuperelliptic curve with the equation y^4 = x^5 + x over Finite Field of size 3 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC[?7h[?12l[?25h[?25l[?7l.is_smooth()[?7h[?12l[?25h[?25l[?7lf[?7h[?12l[?25h[?25l[?7lr[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lbenius_matrix[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l([?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7lsage: C.frobenius_matrix() +[?7h[?12l[?25h[?2004l--------------------------------------------------------------------------- +TypeError Traceback (most recent call last) +Input In [3], in () +----> 1 C.frobenius_matrix() + +File :163, in frobenius_matrix(self, prec) + +TypeError: unsupported operand type(s) for ** or pow(): 'superelliptic_cohomology' and 'method' +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.frobenius_matrix()[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lload('init.sage')[?7h[?12l[?25h[?25l[?7lsage: load('init.sage') +[?7h[?12l[?25h[?2004l[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.frobenius_matrix()[?7h[?12l[?25h[?25l[?7l.[?7h[?12l[?25h[?25l[?7lf[?7h[?12l[?25h[?25l[?7lr[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lbenius_matrix()[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7lp)[?7h[?12l[?25h[?25l[?7lr)[?7h[?12l[?25h[?25l[?7le)[?7h[?12l[?25h[?25l[?7lc)[?7h[?12l[?25h[?25l[?7l-)[?7h[?12l[?25h[?25l[?7l5)[?7h[?12l[?25h[?25l[?7l0)[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l-)[?7h[?12l[?25h[?25l[?7l5)[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l=)[?7h[?12l[?25h[?25l[?7l5)[?7h[?12l[?25h[?25l[?7l0)[?7h[?12l[?25h[?25l[?7lsage: C.frobenius_matrix(prec=50) +[?7h[?12l[?25h[?2004l--------------------------------------------------------------------------- +TypeError Traceback (most recent call last) +Input In [5], in () +----> 1 C.frobenius_matrix(prec=Integer(50)) + +File :163, in frobenius_matrix(self, prec) + +TypeError: unsupported operand type(s) for ** or pow(): 'superelliptic_cohomology' and 'method' +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lload('init.sage')[?7h[?12l[?25h[?25l[?7load('init.sage')[?7h[?12l[?25h[?25l[?7lsage: load('init.sage') +[?7h[?12l[?25h[?2004l[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lload('init.sage')[?7h[?12l[?25h[?25l[?7lC.frobenius_matrix(prec=50)[?7h[?12l[?25h[?25l[?7lsage: C.frobenius_matrix(prec=50) +[?7h[?12l[?25h[?2004l--------------------------------------------------------------------------- +TypeError Traceback (most recent call last) +File /ext/sage/9.7/src/sage/rings/polynomial/polynomial_element.pyx:2441, in sage.rings.polynomial.polynomial_element.Polynomial.__pow__() + 2440 try: +-> 2441 right = Integer(right) + 2442 except TypeError: + +File /ext/sage/9.7/src/sage/rings/integer.pyx:717, in sage.rings.integer.Integer.__init__() + 716 +--> 717 raise TypeError("unable to coerce %s to an integer" % type(x)) + 718 + +TypeError: unable to coerce to an integer + +During handling of the above exception, another exception occurred: + +TypeError Traceback (most recent call last) +Input In [7], in () +----> 1 C.frobenius_matrix(prec=Integer(50)) + +File :163, in frobenius_matrix(self, prec) + +File :71, in __pow__(self, exp) + +File /ext/sage/9.7/src/sage/rings/polynomial/polynomial_element.pyx:2443, in sage.rings.polynomial.polynomial_element.Polynomial.__pow__() + 2441 right = Integer(right) + 2442 except TypeError: +-> 2443 raise TypeError("non-integral exponents not supported") + 2444 + 2445 d = self.degree() + +TypeError: non-integral exponents not supported +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l((C.x)*C.x*C.dx).cartier()[?7h[?12l[?25h[?25l[?7lC.one/[?7h[?12l[?25h[?25l[?7l.[?7h[?12l[?25h[?25l[?7lx*C.dx).cartier()[?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l()^[?7h[?12l[?25h[?25l[?7lp[?7h[?12l[?25h[?25l[?7lsage: (C.x)^p +[?7h[?12l[?25h[?2004l[?7hx^7 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.frobenius_matrix(prec=50)[?7h[?12l[?25h[?25l[?7lsage: C +[?7h[?12l[?25h[?2004l[?7hSuperelliptic curve with the equation y^4 = x^5 + x over Finite Field of size 3 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lprint(len(lista))[?7h[?12l[?25h[?25l[?7lsage: p +[?7h[?12l[?25h[?2004l[?7h7 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lload('init.sage')[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lad('init.sage')[?7h[?12l[?25h[?25l[?7lsage: load('init.sage') +[?7h[?12l[?25h[?2004l[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC[?7h[?12l[?25h[?25l[?7l.frobenius_matrix(prec=50)[?7h[?12l[?25h[?25l[?7lfrobenius_matrix(prec=50)[?7h[?12l[?25h[?25l[?7lsage: C.frobenius_matrix(prec=50) +[?7h[?12l[?25h[?2004l[?7h[0 0 0 0 0 1] +[0 0 1 0 0 0] +[0 1 0 0 0 0] +[1 0 0 0 0 0] +[0 0 0 0 0 0] +[0 0 0 0 0 0] +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.frobenius_matrix(prec=50)[?7h[?12l[?25h[?25l[?7l.[?7h[?12l[?25h[?25l[?7ldx.cartier()[?7h[?12l[?25h[?25l[?7le_rham_basis()[?7h[?12l[?25h[?25l[?7l_rham_basis()[?7h[?12l[?25h[?25l[?7l([?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lb[?7h[?12l[?25h[?25l[?7la[?7h[?12l[?25h[?25l[?7ls[?7h[?12l[?25h[?25l[?7li[?7h[?12l[?25h[?25l[?7lsage: C.basis_ + C.basis_de_rham_degrees  + C.basis_holomorphic_differentials_degree + C.basis_of_cohomology  + + [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lde_rham_degrees + C.basis_de_rham_degrees  + + + [?7h[?12l[?25h[?25l[?7lholomorphic_differentials_degree + C.basis_de_rham_degrees  + C.basis_holomorphic_differentials_degree[?7h[?12l[?25h[?25l[?7lof_cohomology + + C.basis_holomorphic_differentials_degree + C.basis_of_cohomology [?7h[?12l[?25h[?25l[?7l + + + +[?7h[?12l[?25h[?25l[?7l([?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7lsage: C.basis_of_cohomology() +[?7h[?12l[?25h[?2004l[?7h[1/x*y, 1/x*y^2, 1/x^2*y^2, 1/x*y^3, 1/x^2*y^3, 1/x^3*y^3] +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7lsage:  + + + [?7h[?12l[?25h[?25l[?7lC.basis_of_cohomology()[?7h[?12l[?25h[?25l[?7l()[[?7h[?12l[?25h[?25l[?7l0[?7h[?12l[?25h[?25l[?7l[][?7h[?12l[?25h[?25l[?7l[].[?7h[?12l[?25h[?25l[?7l[][?7h[?12l[?25h[?25l[?7l[]^[?7h[?12l[?25h[?25l[?7l[[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lp[?7h[?12l[?25h[?25l[?7l)[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[][?7h[?12l[?25h[?25l[?7l[][?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l(C.basis_of_cohomology()[0]^p)[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7l().[?7h[?12l[?25h[?25l[?7lc[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lo[?7h[?12l[?25h[?25l[?7lr[?7h[?12l[?25h[?25l[?7ld[?7h[?12l[?25h[?25l[?7li[?7h[?12l[?25h[?25l[?7ln[?7h[?12l[?25h[?25l[?7la[?7h[?12l[?25h[?25l[?7lt[?7h[?12l[?25h[?25l[?7le[?7h[?12l[?25h[?25l[?7ls[?7h[?12l[?25h[?25l[?7l([?7h[?12l[?25h[?25l[?7l()[?7h[?12l[?25h[?25l[?7lsage: (C.basis_of_cohomology()[0]^p).coordinates() +[?7h[?12l[?25h[?2004l[?7h[0, 0, 0, 0, 1, 0] +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7lsage:  + [?7h[?12l[?25h[?25l[?7lp[?7h[?12l[?25h[?25l[?7lsage: p +[?7h[?12l[?25h[?2004l[?7h7 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lC.basis_of_cohomology()[?7h[?12l[?25h[?25l[?7lsage: C +[?7h[?12l[?25h[?2004l[?7hSuperelliptic curve with the equation y^4 = x^5 + x over Finite Field of size 3 +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lp[?7h[?12l[?25h[?25l[?7l = 5[?7h[?12l[?25h[?25l[?7l=[?7h[?12l[?25h[?25l[?7l [?7h[?12l[?25h[?25l[?7l3[?7h[?12l[?25h[?25l[?7lsage: p = 3 +[?7h[?12l[?25h[?2004l[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lp = 3[?7h[?12l[?25h[?25l[?7lC[?7h[?12l[?25h[?25l[?7lp[?7h[?12l[?25h[?25l[?7l(C.basis_of_cohomology()[0]^p).coordinates()[?7h[?12l[?25h[?25l[?7lsage: (C.basis_of_cohomology()[0]^p).coordinates() +[?7h[?12l[?25h[?2004l[?7h[0, 0, 0, 0, 0, 1] +[?2004h[?25l[?7lsage: [?7h[?12l[?25h[?25l[?7l[?7h[?12l[?25h[?25l[?7lq = 5[?7h[?12l[?25h \ No newline at end of file diff --git a/sage/init.sage b/sage/init.sage index d56179a..0143cbe 100644 --- a/sage/init.sage +++ b/sage/init.sage @@ -18,7 +18,7 @@ load('auxilliaries/linear_combination_polynomials.sage') ############## ############## load('drafty/lift_to_de_rham.sage') -load('drafty/superelliptic_cohomology_class.sage') +#load('drafty/superelliptic_cohomology_class.sage') load('drafty/draft5.sage') load('drafty/pole_numbers.sage') #load('drafty/draft4.sage') \ No newline at end of file diff --git a/sage/superelliptic/superelliptic_class.sage b/sage/superelliptic/superelliptic_class.sage index 7c6fe71..2183ee4 100644 --- a/sage/superelliptic/superelliptic_class.sage +++ b/sage/superelliptic/superelliptic_class.sage @@ -12,6 +12,7 @@ class superelliptic: self.exponent = m self.base_ring = F self.characteristic = F.characteristic() + self.fct_field = RxyzQ, Rxyz, x, y, z r = Rx(f).degree() delta = GCD(r, m) self.nb_of_pts_at_infty = delta @@ -26,6 +27,19 @@ class superelliptic: F = self.base_ring return 'Superelliptic curve with the equation y^' + str(m) + ' = ' + str(f)+' over ' + str(F) + def coordinates2(self, basis = 0): + """Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo.""" + C = self.curve + if basis == 0: + basis = C.holomorphic_differentials_basis() + 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. + denom = LCM([denominator(omega.form) for omega in basis]) + basis = [denom*omega for omega in basis] + self_with_no_denominator = denom*self + return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis]) + #Auxilliary algorithm that returns the basis of holomorphic differentials #of the curve and (as a second argument) the list of pairs (i, j) #such that x^i dx/y^j is holomorphic. @@ -128,7 +142,7 @@ class superelliptic: M[i, :] = v return M - def frobenius_matrix(self): + def dr_frobenius_matrix(self): basis = self.de_rham_basis() g = self.genus() p = self.characteristic @@ -153,6 +167,16 @@ class superelliptic: M[i, :] = v return M + def frobenius_matrix(self, prec=20): + g = self.genus() + F = self.base_ring + p = F.characteristic() + M = matrix(F, g, g) + for i, f in enumerate(self.basis_of_cohomology()): + M[i, :] = vector((f^p).coordinates(prec=prec)) + M = M.transpose() + return M + # def p_rank(self): # return self.cartier_matrix().rank() @@ -165,6 +189,23 @@ class superelliptic: V = self.verschiebung_matrix() p = self.characteristic return flag(Fr, V, p, test) + + def basis_of_cohomology(self): + '''Basis of cohomology of structure sheaf H1(X, OX).''' + m = self.exponent + f = self.polynomial + r = f.degree() + F = self.base_ring + delta = self.nb_of_pts_at_infty + Rx. = PolynomialRing(F) + Rxy. = PolynomialRing(F, 2) + Fxy = FractionField(Rxy) + basis = [] + for j in range(1, m): + for i in range(1, r): + if (r*j - m*i >= delta): + basis += [superelliptic_function(self, Fxy(m*y^(j)/x^i))] + return basis #Auxilliary. Given a superelliptic curve C : y^m = f(x) and a polynomial g(x, y) #it replaces repeteadly all y^m's in g(x, y) by f(x). As a result diff --git a/sage/superelliptic/superelliptic_form_class.sage b/sage/superelliptic/superelliptic_form_class.sage index e5de107..1ef4311 100644 --- a/sage/superelliptic/superelliptic_form_class.sage +++ b/sage/superelliptic/superelliptic_form_class.sage @@ -53,6 +53,14 @@ class superelliptic_form: B = floor(p^(mult_order-1)*j/m) result += superelliptic_form(C, polynomial_part(p, h)/(f^B*y^(j1))) return result + + def serre_duality_pairing(self, fct, prec=20): + result = 0 + C = self.curve + delta = C.nb_of_pts_at_infty + for i in range(delta): + result += (fct*self).expansion_at_infty(place=i, prec=prec)[-1] + return -result def coordinates(self): C = self.curve diff --git a/sage/superelliptic/superelliptic_function_class.sage b/sage/superelliptic/superelliptic_function_class.sage index 4cb651e..50bfbde 100644 --- a/sage/superelliptic/superelliptic_function_class.sage +++ b/sage/superelliptic/superelliptic_function_class.sage @@ -69,7 +69,7 @@ class superelliptic_function: C = self.curve g = self.function return superelliptic_function(C, g^(exp)) - + def diffn(self): C = self.curve f = C.polynomial @@ -83,6 +83,18 @@ class superelliptic_function: B = g.derivative(y)*f.derivative(x)/(m*y^(m-1)) return superelliptic_form(C, A+B) + def coordinates(self, basis = 0, basis_holo = 0, prec=20): + '''Find coordinates in H1(X, OX) in given basis basis with dual basis basis_holo.''' + C = self.curve + if basis == 0: + basis = basis_of_cohomology(C) + if basis_holo == 0: + basis_holo = C.holomorphic_differentials_basis() + g = C.genus() + coordinates = g*[0] + for i, omega in enumerate(basis_holo): + coordinates[i] = omega.serre_duality_pairing(self, prec=prec) + return coordinates def expansion_at_infty(self, place = 0, prec=10): C = self.curve