{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A demo of the vector_bundle package." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from vector_bundle import *\n", "F. = FunctionField(GF(101))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constructing an indecomposable bundle on an elliptic curve\n", "We construct an indecomposable vector bundle of rank 5 and degree 3 on a function field of genus 1. \n", "This construction may be done automatically using the ```atiyah_bundle``` function but we break it down step by step." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x]\n", "[(1)]\n", "[((x/(x^2 + 1))*y)]\n" ] } ], "source": [ "R. = F[]\n", "K. = F.extension(y^2 - x^3 - x)\n", "deg_1_bundle = VectorBundle(K, K.places_infinite()[0].divisor())\n", "E = deg_1_bundle\n", "print(E.coefficient_ideals())\n", "print(E.basis_finite())\n", "print(E.basis_infinite())" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x]\n", "[(1, 0), (0, 1)]\n", "[(1, 0), (100*x^3/(x^2 + 1), (x/(x^2 + 1))*y)]\n" ] } ], "source": [ "E = E.extension_by_global_sections()\n", "print(E.coefficient_ideals())\n", "print(E.basis_finite())\n", "print(E.basis_infinite())" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x]\n", "[(1, 0), (0, 1)]\n", "[((x/(x^2 + 1))*y, 0), ((100*x^4/(x^4 + 2*x^2 + 1))*y, x^3/(x^2 + 1))]\n" ] } ], "source": [ "E = E.tensor_product(deg_1_bundle)\n", "print(E.coefficient_ideals())\n", "print(E.basis_finite())\n", "print(E.basis_infinite())" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (x^2/(x^2 + 3)) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x]\n", "[(1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1)]\n", "[(1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (100*x^3/(x^2 + 1), 0, 100/x^2*y, (x/(x^2 + 1))*y, 0), (x^6/(x^4 + 2*x^2 + 1), (100*x^4/(x^4 + 2*x^2 + 1))*y, (x/(x^2 + 1))*y, (100*x^4/(x^4 + 2*x^2 + 1))*y, x^3/(x^2 + 1))]\n" ] } ], "source": [ "E = E.extension_by_global_sections()\n", "print(E.coefficient_ideals())\n", "print(E.basis_finite())\n", "print(E.basis_infinite())" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "3\n" ] } ], "source": [ "print(E.rank())\n", "print(E.degree())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We check the algebra of global endomorphisms of E to ensure that it is indecomposable." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[\n", "[1 0 0 0 0]\n", "[0 1 0 0 0]\n", "[0 0 1 0 0]\n", "[0 0 0 1 0]\n", "[0 0 0 0 1]\n", "]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E.end().h0()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constructing a weakly stable vector bundle following Savin's method\n", "We construct a weakly stable vector bundle of rank 3 and degree 5 by successive extensions by line bundles. \n", "See [Sav07] in the references for details. \n", "This, again, may be achieved directly using the ```savin_bundle``` function." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "5\n", "[Ideal (1, 1/x*y) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x, Ideal (1) of Maximal order of Function field in y defined by y^2 + 100*x^3 + 100*x]\n", "[(1, 0, 0), (0, 1, 0), (0, 0, 1)]\n", "[(1, 0, 0), ((100*x/(x^2 + 1))*y, x^3/(x^2 + 1), 0), (0, (100*x^4/(x^4 + 2*x^2 + 1))*y, x^3/(x^2 + 1))]\n" ] } ], "source": [ "F = VectorBundle(K, 2*K.places_infinite()[0].divisor())\n", "F1 = VectorBundle(K, K.places_finite()[0].divisor())\n", "E1 = F1\n", "E2 = F.non_trivial_extension(E1)\n", "E3 = F.non_trivial_extension(E2)\n", "print(E3.rank())\n", "print(E3.degree())\n", "print(E3.coefficient_ideals())\n", "print(E3.basis_finite())\n", "print(E3.basis_infinite())" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 10.3.beta8", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 4 }