From 6ec076bebadfb17932b08e3f6024ec3c8e9d32fb Mon Sep 17 00:00:00 2001 From: sabrinakunzweiler Date: Tue, 11 Oct 2022 17:02:32 +0200 Subject: [PATCH 1/4] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 58bc37d..898c7f1 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,8 @@ Thus, a basis is given by f_i(x,y)dx, i=1,..,6, where f_i are the functions on Y To run the code, you need -- a recent version of Sage (>= 8.8 should do) -- the Sage/Python package [MCLF](https://github.com/MCLF/mclf) +- a recent version of Sage (>= 9.0 should do) +- the Sage/Python package [MCLF](https://github.com/MCLF/mclf) (>= version 1.0.6) - the Sage/Python package [regular_models](https://github.com/swewers/regular_models) (this repository) We plan to expand the code to be able to handle more general classes of curves, and compute regular models of them. From 1d6be67b271e91f60f29278f7844bdabebc2c8c7 Mon Sep 17 00:00:00 2001 From: sabrinakunzweiler Date: Tue, 1 Aug 2023 10:55:33 +0200 Subject: [PATCH 2/4] update syntax --- .ipynb_checkpoints/Examples-checkpoint.ipynb | 334 +++++++++++++++++++ Examples.ipynb | 151 +++------ 2 files changed, 386 insertions(+), 99 deletions(-) create mode 100644 .ipynb_checkpoints/Examples-checkpoint.ipynb diff --git a/.ipynb_checkpoints/Examples-checkpoint.ipynb b/.ipynb_checkpoints/Examples-checkpoint.ipynb new file mode 100644 index 0000000..c427b1d --- /dev/null +++ b/.ipynb_checkpoints/Examples-checkpoint.ipynb @@ -0,0 +1,334 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Computation of the Lattice of Integral Differential Forms\n", + "In this Jupyter-Notebook we show how to use our implementation to compute the lattice of integral differential forms for superelliptic curves. The first part is dedicated to the examples in [KunzweilerWewers20]. In the second part, we look at some more general situations. And finally, we explain an application to the computation of the *hyperelliptic discriminant*." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('superelliptic_curves.py')\n", + "import sys\n", + "sys.path.append('/home/user')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Examples from the manuscript\n", + "\n", + "Let us first look at **Example 5.2** from [KunzweilerWewers20].\n", + "\n", + "We consider the hyperelliptic curve\n", + "$$ Y: y^2 = (x^2-5)^3-5^5$$\n", + "defined over $\\mathbb{Q}_5$.\n", + "\n", + "The input for our algorithm in this case is:\n", + "* the polynomial $f = (x^2-5)^3-5^5$,\n", + "* the exponent $n=2$ of $y$,\n", + "* the $5$-adic valuation $v_5$.\n", + "\n", + "The output is:\n", + "* the basis [x,5]. In this implementation the space of differentials is viewed as a subspace of the function space of $Y$ via the embedding $\\omega \\mapsto \\omega / \\eta$ with $\\eta = \\frac{dx}{y^{n-1}}$. This means that $$(x\\frac{dx}{y}, 5 \\frac{dx}{y})$$ is a basis for the lattice of integral differentials of $Y$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "the lattice with basis [x, 5]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "R. = QQ[]\n", + "f = (x^2-5)^3-5^5\n", + "n=2\n", + "v5 = QQ.valuation(5)\n", + "M = integral_differentials(f,n,v5); M" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modifying the above computation by setting $n=3$, we compute the lattice of integral differential forms for the superelliptic curve \n", + "$$y^3 = (x^2-5)^3-5^5.$$\n", + "This is **Example 5.3** in [KunzweilerWewers20].\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "the lattice with basis [x^2 - 5, y, 5*x, 25]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "M = integral_differentials(f,3,v5); M" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 5.1.** in [KunzweilerWewers20] illustrates the first step in the algorithm underlying the computation of the integral differentials. This step consists in computing a model $X$ of the projective line with the property that the model obtained by taking the normalisation of $X$ in the function field of the superelliptic curve has only rational singularities.\n", + "\n", + "This step does not depend on the exponent $n$. As input we only need \n", + "* the polynomial $f$,\n", + "* the valuation $v_5$. \n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 : Point of type II on Berkovich line, corresponding to v(x) >= 0\n", + "1 : Point of type II on Berkovich line, corresponding to v(x) >= 1/2\n", + "2 : Point of type II on Berkovich line, corresponding to v(x^2 - 5) >= 3/2\n", + "3 : Point of type II on Berkovich line, corresponding to v(x^2 - 5) >= 5/3\n", + "4 : Point of type I on Berkovich line given by x^6 - 15*x^4 + 75*x^2 - 3250 = 0\n", + "5 : Point of type II on Berkovich line, corresponding to v(x^2 - 5) >= 7/4\n", + "6 : Point of type II on Berkovich line, corresponding to v(x^2 - 5) >= 2\n", + "7 : Point of type II on Berkovich line, corresponding to v(x) >= 1\n", + "8 : The point at infinity on the Berkovich line\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "Graphics object consisting of 18 graphics primitives" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "load('models_of_projective_line.py')\n", + "X = minimal_rnc_model(f,v5); X\n", + "X.show_tree()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Further Examples\n", + "\n", + "The implementation works in different settings.\n", + "\n", + "### Different Residue Characteristics\n", + "The only restriction concerning the residue characteristic is that it must not divide the exponent $n$. \n", + "\n", + "For example we can compute the lattice of integral differentials for the superelliptic curve defined by \n", + "$$y^n = x^4-2^3 \\quad \\text{over }\\mathbb{Q}_2,$$\n", + "if and only if $2 \\nmid n$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the lattice with basis [x, y, 2]\n", + "the lattice with basis [y^2, x, x*y, x^2, 2, 2*y]\n", + "the lattice with basis [y^2, y^3, y^4, x*y, x*y^2, x^2, 2*y, 2, 2*x]\n" + ] + } + ], + "source": [ + "R. = QQ[]\n", + "f = x^4-2^3\n", + "v2 = QQ.valuation(2)\n", + "\n", + "M3 = integral_differentials(f,3,v2);\n", + "print(M3)\n", + "M5 = integral_differentials(f,5,v2);\n", + "print(M5)\n", + "M7 = integral_differentials(f,7,v2);\n", + "print(M7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Extensions of $\\mathbb{Q}_p$\n", + "\n", + "We can also work over extensions of the $p$-adic numbers. \n", + "In the following we compute the integral differentials for the hyperelliptic curve defined by \n", + "$$y^2-x^6+3^9$$\n", + "over $\\mathbb{Q}_3$ and over $\\mathbb{Q}_3(\\sqrt{3})$ respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the lattice with basis [3*x, 27]\n", + "the lattice with basis [3*sqrt3*x, 27]\n" + ] + } + ], + "source": [ + "R. = QQ[]\n", + "f = x^6-3^9\n", + "v3 = QQ.valuation(3)\n", + "M = integral_differentials(f,2,v3)\n", + "print(M)\n", + "\n", + "L. = NumberField(x^2-3)\n", + "S. = L[]\n", + "vL3 = v3.extension(L)\n", + "ML = integral_differentials(S(f),2,vL3)\n", + "print(ML)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The hyperelliptic discriminant\n", + "\n", + "Assuming that $p \\neq 2$, the implementation can also be used to compute the so-called *hyperelliptic discriminant* $\\Lambda$.\n", + "\n", + "Let $Y$ be a hyperelliptic curve of genus $g$ over a local field $K$, defined by some equation of the form \n", + "$Y: y^2 = f(x).$ We write $\\Delta$ for the discriminant of this equation and $\\omega = \\frac{dx}{y} \\land \\dots \\land x^{g-1}\\frac{dx}{y}$. We call \n", + "$$\\Lambda := \\Delta^{g} \\cdot \\omega^{\\otimes 8g+4}$$ the *hyperelliptic discriminant*. This is a canonical element of the curve. \n", + "By the order of the hyperelliptic discriminant, $\\text{ord}(\\Lambda)$, we mean the order of vanishing of $\\Lambda \\in (\\det M)^{\\otimes 8g+4}$ at the prime ideal of $O_K$, where $M$ denotes the lattice of integral differentials.\n", + "\n", + "In the following, we compute the order of the hyperelliptic discriminant of the genus-$2$ curve\n", + "$$Y:y^2 = (x^3-7^7) \\cdot (x^3-1) \\quad \\text{over } \\mathbb{Q}_7.$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "R. = QQ[]\n", + "f = (x^3-7^7)*(x^3-1)\n", + "v7 = QQ.valuation(7)\n", + "a = order_hyperelliptic_discriminant(f,v7)\n", + "print(a)\n", + "g = 2\n", + "a == g * v7(f.discriminant()) - (8*g+4)*v7(covolume(integral_differentials(f,2,v7)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output above means that $7^{-8} \\cdot \\Lambda$ is a generator for $(\\det M )^{\\otimes 8g+4}$.\n", + "\n", + "Also, note that in general the $\\text{ord}(\\Lambda)/g$ is smaller than the valuation of the discriminant of the equation. Moreover $\\text{ord}(\\Lambda)/g$ is known to be an upper bound for the Artin conductor in the case of semistable reduction [Maugeais03] and in the case $g=2$ [Liu94]." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**Literature**\n", + "\n", + "[Kunzweiler20] S. Kunzweiler, Differential forms on hyperelliptic curves with semistable reduction. Research in Number Theory.\n", + "\n", + "[KunzweilerWewers20] S. Kunzweiler and S. Wewers, Integral differential forms for superelliptic curves. ArXiv preprint.\n", + "\n", + "[Liu94] Q.Liu, Conducteur et discriminant minimal de courbes de genre 2. Compositio Mathematica.\n", + "\n", + "[Maugeais03] S. Maugeais, Relevementdes revetements p-cycliques des courbes rationnelles semistables. Mathematische Annalen.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "SageMath 10.0", + "language": "sage", + "name": "sagemath" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Examples.ipynb b/Examples.ipynb index 62f06dd..082ea7f 100644 --- a/Examples.ipynb +++ b/Examples.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "# Computation of the Lattice of Integral Differential Forms\n", "In this Jupyter-Notebook we show how to use our implementation to compute the lattice of integral differential forms for superelliptic curves. The first part is dedicated to the examples in [KunzweilerWewers20]. In the second part, we look at some more general situations. And finally, we explain an application to the computation of the *hyperelliptic discriminant*." @@ -12,12 +10,9 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - ], + "execution_count": 1, + "metadata": {}, + "outputs": [], "source": [ "load('superelliptic_curves.py')\n", "import sys\n", @@ -26,9 +21,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## Examples from the manuscript\n", "\n", @@ -36,7 +29,7 @@ "\n", "We consider the hyperelliptic curve\n", "$$ Y: y^2 = (x^2-5)^3-5^5$$\n", - "defined over $\\QQ_5$.\n", + "defined over $\\mathbb{Q}_5$.\n", "\n", "The input for our algorithm in this case is:\n", "* the polynomial $f = (x^2-5)^3-5^5$,\n", @@ -49,10 +42,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "data": { @@ -60,9 +51,8 @@ "the lattice with basis [x, 5]" ] }, - "execution_count": 3, - "metadata": { - }, + "execution_count": 2, + "metadata": {}, "output_type": "execute_result" } ], @@ -76,9 +66,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Modifying the above computation by setting $n=3$, we compute the lattice of integral differential forms for the superelliptic curve \n", "$$y^3 = (x^2-5)^3-5^5.$$\n", @@ -88,9 +76,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -99,8 +85,7 @@ ] }, "execution_count": 3, - "metadata": { - }, + "metadata": {}, "output_type": "execute_result" } ], @@ -110,9 +95,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "**Example 5.1.** in [KunzweilerWewers20] illustrates the first step in the algorithm underlying the computation of the integral differentials. This step consists in computing a model $X$ of the projective line with the property that the model obtained by taking the normalisation of $X$ in the function field of the superelliptic curve has only rational singularities.\n", "\n", @@ -125,10 +108,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -147,15 +128,13 @@ }, { "data": { - "image/png": "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", + "image/png": "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\n", "text/plain": [ "Graphics object consisting of 18 graphics primitives" ] }, - "execution_count": 3, - "metadata": { - }, - "output_type": "execute_result" + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -166,9 +145,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## Further Examples\n", "\n", @@ -178,17 +155,24 @@ "The only restriction concerning the residue characteristic is that it must not divide the exponent $n$. \n", "\n", "For example we can compute the lattice of integral differentials for the superelliptic curve defined by \n", - "$$y^n = x^4-2^3 \\quad \\text{over }\\QQ_2,$$\n", + "$$y^n = x^4-2^3 \\quad \\text{over }\\mathbb{Q}_2,$$\n", "if and only if $2 \\nmid n$." ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the lattice with basis [x, y, 2]\n", + "the lattice with basis [y^2, x, x*y, x^2, 2, 2*y]\n", + "the lattice with basis [y^2, y^3, y^4, x*y, x*y^2, x^2, 2*y, 2, 2*x]\n" + ] + } ], "source": [ "R. = QQ[]\n", @@ -205,36 +189,26 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "### Extensions of $\\QQ_p$\n", + "### Extensions of $\\mathbb{Q}_p$\n", "\n", "We can also work over extensions of the $p$-adic numbers. \n", "In the following we compute the integral differentials for the hyperelliptic curve defined by \n", "$$y^2-x^6+3^9$$\n", - "over $\\QQ_3$ and over $\\QQ_3(\\sqrt{3})$ respectively." + "over $\\mathbb{Q}_3$ and over $\\mathbb{Q}_3(\\sqrt{3})$ respectively." ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "the lattice with basis [3*x, 27]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "the lattice with basis [3*x, 27]\n", "the lattice with basis [3*sqrt3*x, 27]\n" ] } @@ -255,9 +229,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## The hyperelliptic discriminant\n", "\n", @@ -269,15 +241,13 @@ "By the order of the hyperelliptic discriminant, $\\text{ord}(\\Lambda)$, we mean the order of vanishing of $\\Lambda \\in (\\det M)^{\\otimes 8g+4}$ at the prime ideal of $O_K$, where $M$ denotes the lattice of integral differentials.\n", "\n", "In the following, we compute the order of the hyperelliptic discriminant of the genus-$2$ curve\n", - "$$Y:y^2 = (x^3-7^7) \\cdot (x^3-1) \\quad \\text{over } \\QQ_7.$$\n" + "$$Y:y^2 = (x^3-7^7) \\cdot (x^3-1) \\quad \\text{over } \\mathbb{Q}_7.$$\n" ] }, { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -293,8 +263,7 @@ ] }, "execution_count": 7, - "metadata": { - }, + "metadata": {}, "output_type": "execute_result" } ], @@ -310,9 +279,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "The output above means that $7^{-8} \\cdot \\Lambda$ is a generator for $(\\det M )^{\\otimes 8g+4}$.\n", "\n", @@ -321,9 +288,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "\n", "**Literature**\n", @@ -340,28 +305,16 @@ { "cell_type": "code", "execution_count": 0, - "metadata": { - "collapsed": false - }, - "outputs": [ - ], - "source": [ - ] + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "SageMath 9.2", - "language": "sagemath", - "metadata": { - "cocalc": { - "description": "Open-source mathematical software system", - "priority": 10, - "url": "https://www.sagemath.org/" - } - }, - "name": "sage-9.2", - "resource_dir": "/ext/jupyter/kernels/sage-9.2" + "display_name": "SageMath 10.0", + "language": "sage", + "name": "sagemath" }, "language_info": { "codemirror_mode": { @@ -373,9 +326,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +} From 7444733e2035be742907ae55943d91d5d6243fef Mon Sep 17 00:00:00 2001 From: sabrinakunzweiler Date: Wed, 2 Aug 2023 12:31:58 +0200 Subject: [PATCH 3/4] update README --- README.md | 75 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 898c7f1..d9e4ddc 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,81 @@ -Integral differential forms for superelliptic curves -==================================================== +# Integral differential forms for superelliptic curves This is the Sage/Python package accompanying our preprint -> S. Kunzweiler and S. Wewers, Integral differential forms for superelliptic curves, Preprint, 2020 +> S. Kunzweiler and S. Wewers, Integral differential forms for superelliptic curves, Preprint, 2023 It contains the implementation of the algorithms described in that article. -Let K be a local field, with ring of integers R, and let Y be a *superelliptic curve* over K, given by an equation of the form -y^n = f(x). We assume that the exponent n is invertible in R. The goal is to compute a basis of *integral differential forms*. -For instance, consider the curve Y of genus 6 over the 2-adic numbers with equation y^3 = (x^3-2^4)((x+2)^2+2^3)((x+2)^2-2^3). -We compute a basis of integral differential forms as follows: +Let $K$ be a local field, with ring of integers $R$, and let $Y$ be a *superelliptic curve* over $K$, given by an equation of the form $y^n = f(x)$. +Under the condition that the exponent $n$ is invertible in $R$, our implementation can be used to compute a basis of *integral differential forms*. + + +## Examples + +For instance, consider **Example 5.2** from [KunzweilerWewers23]. +Let $Y$ be the hyperelliptic curve +$$ Y: y^2 = (x^2-5)^3-5^5$$ +defined over $\mathbb{Q}_5$. + +The input for our algorithm in this case is: +* the polynomial $f = (x^2-5)^3-5^5$, +* the exponent $n=2$ of $y$, +* the $5$-adic valuation $v_5$. ``` sage: from regular_models.superelliptic_curves import integral_differentials -sage: v_2 = QQ.valuation(2) sage: R. = QQ[] -sage: f = (x^3-2^4)*((x+2)^2+2^3)*((x+2)^2-2^3) -sage: integral_differentials(f, 3, v_2) -the lattice with basis [x^3 - 4*x, x*y - 16, 2*y - 16, 4*x^2 - 16, 8*x - 16, 16] +sage: f = (x^2-5)^3-5^5 +sage: n=2 +sage: v5 = QQ.valuation(5) +sage: integral_differentials(f,n,v5) +the lattice with basis [x, 5] +``` +In this implementation the space of differentials is viewed as a subspace of the function space of $Y$ via the embedding $\omega \mapsto \omega / \eta$ with $\eta = \frac{dx}{y^{n-1}}$, and the output has to be interpreted with respect to this embedding. This means that $$(x\frac{dx}{y}, 5 \frac{dx}{y})$$ is a basis for the lattice of integral differentials of $Y$. + + +Modifying the above computation by setting $n=3$, we compute the lattice of integral differential forms for the superelliptic curve +$$y^3 = (x^2-5)^3-5^5.$$ +This is **Example 5.3** in [KunzweilerWewers23]. +``` +sage: n=3 +sage: integral_differentials(f,n,v5) +the lattice with basis [x^2 - 5, y, 5*x, 25] +``` + +For hyperelliptic curves $y^2 = f(x)$, our implementation can also be used to compute the order of the *hyperelliptic discriminant* +$$\Lambda := \Delta^{g} \cdot \omega^{\otimes 8g+4}$$, +where $g$ is the genus of the curve, $\Delta$ the discriminant of $f$ and $\omega = \frac{dx}{y} \land \dots \land x^{g-1}\frac{dx}{y}$. This is a canonical element of the curve. In our first example, we obtain the following. + +``` +sage: g = 2 +sage: a = order_hyperelliptic_discriminant(f,v5); a +26 +sage: a == g * v5(f.discriminant()) - (8*g+4)*v5(covolume(integral_differentials(f,2,v5))) +True ``` -Thus, a basis is given by f_i(x,y)dx, i=1,..,6, where f_i are the functions on Y in the above list. + +Let $Y$ be a hyperelliptic curve of genus $g$ over a local field $K$, defined by some equation of the form +$Y: y^2 = f(x).$ We write $\Delta$ for the discriminant of this equation and $\omega = \frac{dx}{y} \land \dots \land x^{g-1}\frac{dx}{y}$. We call +$$\Lambda := \Delta^{g} \cdot \omega^{\otimes 8g+4}$$ the *hyperelliptic discriminant*. +By the order of the hyperelliptic discriminant, $\text{ord}(\Lambda)$, we mean the order of vanishing of $\Lambda \in (\det M)^{\otimes 8g+4}$ at the prime ideal of $O_K$, where $M$ denotes the lattice of integral differentials. + +More examples can be found in the Jupyter notebook `Examples.ipynb`. + + +## How to install To run the code, you need - a recent version of Sage (>= 9.0 should do) -- the Sage/Python package [MCLF](https://github.com/MCLF/mclf) (>= version 1.0.6) +- the Sage/Python package [MCLF](https://github.com/MCLF/mclf) (>= version 1.0.6). For example this can be installed using the command +``` +sage -pip install git+https://github.com/MCLF/mclf +``` - the Sage/Python package [regular_models](https://github.com/swewers/regular_models) (this repository) +``` +sage -pip install git+https://github.com/swewers/regular_models +``` We plan to expand the code to be able to handle more general classes of curves, and compute regular models of them. At some point, this work should become part of MCLF. From adb6b7c97c9099c369fea1d1309a43e1ea40681a Mon Sep 17 00:00:00 2001 From: sabrinakunzweiler Date: Wed, 2 Aug 2023 12:40:22 +0200 Subject: [PATCH 4/4] Update README.md --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d9e4ddc..f02540d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Under the condition that the exponent $n$ is invertible in $R$, our implementati For instance, consider **Example 5.2** from [KunzweilerWewers23]. Let $Y$ be the hyperelliptic curve -$$ Y: y^2 = (x^2-5)^3-5^5$$ +$$Y: y^2 = (x^2-5)^3-5^5$$ defined over $\mathbb{Q}_5$. The input for our algorithm in this case is: @@ -42,9 +42,10 @@ sage: n=3 sage: integral_differentials(f,n,v5) the lattice with basis [x^2 - 5, y, 5*x, 25] ``` +So a basis for the integral differentials is $$((x^2-5)\frac{dx}{y^2}, \frac{dx}{y}, 5 x\frac{dx}{y^2}, 25 \frac{dx}{y^2})$$. For hyperelliptic curves $y^2 = f(x)$, our implementation can also be used to compute the order of the *hyperelliptic discriminant* -$$\Lambda := \Delta^{g} \cdot \omega^{\otimes 8g+4}$$, +$$\Lambda := \Delta^{g} \cdot \omega^{\otimes 8g+4},$$ where $g$ is the genus of the curve, $\Delta$ the discriminant of $f$ and $\omega = \frac{dx}{y} \land \dots \land x^{g-1}\frac{dx}{y}$. This is a canonical element of the curve. In our first example, we obtain the following. ``` @@ -55,11 +56,6 @@ sage: a == g * v5(f.discriminant()) - (8*g+4)*v5(covolume(integral_differentials True ``` -Let $Y$ be a hyperelliptic curve of genus $g$ over a local field $K$, defined by some equation of the form -$Y: y^2 = f(x).$ We write $\Delta$ for the discriminant of this equation and $\omega = \frac{dx}{y} \land \dots \land x^{g-1}\frac{dx}{y}$. We call -$$\Lambda := \Delta^{g} \cdot \omega^{\otimes 8g+4}$$ the *hyperelliptic discriminant*. -By the order of the hyperelliptic discriminant, $\text{ord}(\Lambda)$, we mean the order of vanishing of $\Lambda \in (\det M)^{\otimes 8g+4}$ at the prime ideal of $O_K$, where $M$ denotes the lattice of integral differentials. - More examples can be found in the Jupyter notebook `Examples.ipynb`.