{ "cells": [ { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "N = 2\n", "p = 3\n", "RQ = PolynomialRing(QQ, 'X', 2*N)\n", "X = RQ.gens()[:N]\n", "Y = RQ.gens()[N:]\n", "Rpx. = PolynomialRing(GF(p), 1)\n", "#RQx. = PolynomialRing(QQ, 1)\n", "\n", "def witt_pol(lista):\n", " n = len(lista)\n", " return sum(p^i*lista[i]^(p^(n-i-1)) for i in range(0, n))\n", "\n", "def witt_sum(n):\n", " if n == 0:\n", " return X[0] + Y[0]\n", " return 1/p^n*(witt_pol(X[:n+1]) + witt_pol(Y[:n+1]) - sum(p^k*witt_sum(k)^(p^(n-k)) for k in range(0, n)))\n", "\n", "class witt:\n", " def __init__(self, coordinates):\n", " self.coordinates = coordinates\n", " def __repr__(self):\n", " lista = [Rpx(a) for a in self.coordinates]\n", " return str(lista)\n", " def __add__(self, other):\n", " lista = []\n", " for i in range(0, N):\n", " lista+= [witt_sum(i)(self.coordinates + other.coordinates)]\n", " return witt(lista)\n", " def __rmul__(self, constant):\n", " if constant<0:\n", " m = (-constant)*(p^N-1)\n", " return m*self\n", " if constant == 0:\n", " return witt(N*[0])\n", " return self + (constant - 1)*self\n", " def __sub__(self, other):\n", " return self + (-1)*other\n", "\n", "def teichmuller(f):\n", " Rx. = PolynomialRing(QQ)\n", " RXp. = PolynomialRing(QQ)\n", " f = Rx(f)\n", " ff = witt([f, 0])\n", " coeffs = f.coefficients(sparse=false)\n", " for i in range(0, len(coeffs)):\n", " ff -= coeffs[i]*witt([Rx(x^i), 0])\n", " print(ff)\n", " f1 = sum(coeffs[i]*RXp(Xp^(3*i)) for i in range(0, len(coeffs))) + p*RXp(ff.coordinates[1](x = Xp))\n", " RXp. = PolynomialRing(Integers(p^2))\n", " f1 = RXp(f1)\n", " return f1" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, -x^7 + x^5]\n" ] }, { "data": { "text/plain": [ "Xp^9 + 6*Xp^7 + 3*Xp^5 + 8*Xp^3" ] }, "execution_count": 29, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rx. = PolynomialRing(QQ)\n", "f = Rx(x^3 - x)\n", "teichmuller(f)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "f = Rx(x^3 - x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, -1, 0, 1]" ] }, "execution_count": 13, "metadata": { }, "output_type": "execute_result" } ], "source": [ "f.coefficients(sparse=false)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.5", "language": "sagemath", "metadata": { "cocalc": { "description": "Open-source mathematical software system", "priority": 10, "url": "https://www.sagemath.org/" } }, "name": "sage-9.5", "resource_dir": "/ext/jupyter/kernels/sage-9.5" }, "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.9.9" } }, "nbformat": 4, "nbformat_minor": 4 }