obliczanie bazy C przy inicjacji
This commit is contained in:
parent
15c6350fb7
commit
535f4650dd
|
@ -2,17 +2,56 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 137,
|
"execution_count": 206,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"class superelliptic:\n",
|
"class superelliptic:\n",
|
||||||
" def __init__(self, f, m, p):\n",
|
" def __init__(self, f, m, p):\n",
|
||||||
" Rx.<x> = PolynomialRing(GF(p))\n",
|
" Rx.<x> = PolynomialRing(GF(p))\n",
|
||||||
|
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
|
||||||
|
" Fxy = FractionField(Rxy)\n",
|
||||||
" self.polynomial = Rx(f)\n",
|
" self.polynomial = Rx(f)\n",
|
||||||
" self.exponent = m\n",
|
" self.exponent = m\n",
|
||||||
" self.characteristic = p\n",
|
" self.characteristic = p\n",
|
||||||
" \n",
|
" \n",
|
||||||
|
" r = Rx(f).degree()\n",
|
||||||
|
" delta = GCD(r, m)\n",
|
||||||
|
" #########basis of holomorphic differentials and de Rham\n",
|
||||||
|
" \n",
|
||||||
|
" basis_holo = {}\n",
|
||||||
|
" basis = {}\n",
|
||||||
|
" degrees0 = {}\n",
|
||||||
|
" degrees1 = {}\n",
|
||||||
|
" k = 0\n",
|
||||||
|
" \n",
|
||||||
|
" for j in range(1, m):\n",
|
||||||
|
" for i in range(1, r):\n",
|
||||||
|
" if (r*j - m*i >= delta):\n",
|
||||||
|
" basis_holo[k] = superelliptic_form(self, Fxy(x^(i-1)/y^j))\n",
|
||||||
|
" basis[k] = superelliptic_cech(self, basis_holo[k], superelliptic_function(self, Rx(0))) \n",
|
||||||
|
" degrees0[k] = (i-1, j)\n",
|
||||||
|
" k = k+1\n",
|
||||||
|
" self.basis_holomorphic_differentials=basis_holo\n",
|
||||||
|
" ## non-holomorphic elts of H^1_dR\n",
|
||||||
|
" t = len(basis)\n",
|
||||||
|
" \n",
|
||||||
|
" for j in range(1, m):\n",
|
||||||
|
" for i in range(1, r):\n",
|
||||||
|
" if (r*(m-j) - m*i >= delta):\n",
|
||||||
|
" s = Rx(m-j)*Rx(x)*Rx(f.derivative()) - Rx(m)*Rx(i)*f\n",
|
||||||
|
" psi = Rx(cut(s, i))\n",
|
||||||
|
" basis[t] = superelliptic_cech(self, superelliptic_form(self, Fxy(psi/y^j)), superelliptic_function(self, Fxy(m*y^(m-j)/x^i)))\n",
|
||||||
|
" if psi != Rx(0):\n",
|
||||||
|
" degrees0[t] = (psi.degree(), j)\n",
|
||||||
|
" else:\n",
|
||||||
|
" degrees0[t] = (0, j)\n",
|
||||||
|
" degrees1[t] = (-i, m-j)\n",
|
||||||
|
" t += 1\n",
|
||||||
|
" self.degree_de_rham0 = degrees0\n",
|
||||||
|
" self.degree_de_rham1 = degrees1\n",
|
||||||
|
" self.basis_de_rham = basis\n",
|
||||||
|
" \n",
|
||||||
" def __repr__(self):\n",
|
" def __repr__(self):\n",
|
||||||
" f = self.polynomial\n",
|
" f = self.polynomial\n",
|
||||||
" m = self.exponent\n",
|
" m = self.exponent\n",
|
||||||
|
@ -31,70 +70,9 @@
|
||||||
" p = self.characteristic\n",
|
" p = self.characteristic\n",
|
||||||
" r = f.degree()\n",
|
" r = f.degree()\n",
|
||||||
" delta = GCD(r, m)\n",
|
" delta = GCD(r, m)\n",
|
||||||
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
|
|
||||||
" Fxy = FractionField(Rxy)\n",
|
|
||||||
" \n",
|
|
||||||
" basis = {}\n",
|
|
||||||
" k = 0\n",
|
|
||||||
" if j == 'all':\n",
|
|
||||||
" for j in range(1, m):\n",
|
|
||||||
" for i in range(1, r):\n",
|
|
||||||
" if (r*j - m*i >= delta):\n",
|
|
||||||
" basis[k] = superelliptic_form(self, Fxy(x^(i-1)/y^j))\n",
|
|
||||||
" k = k+1\n",
|
|
||||||
" return basis\n",
|
|
||||||
" else:\n",
|
|
||||||
" for i in range(1, r):\n",
|
|
||||||
" if (r*j - m*i >= delta):\n",
|
|
||||||
" basis[k] = superelliptic_form(self, Fxy(x^(i-1)/y^j))\n",
|
|
||||||
" k = k+1\n",
|
|
||||||
" return basis\n",
|
|
||||||
" \n",
|
|
||||||
" def degree_and_basis_de_rham(self, j = 'all'):\n",
|
|
||||||
" f = self.polynomial\n",
|
|
||||||
" m = self.exponent\n",
|
|
||||||
" p = self.characteristic\n",
|
|
||||||
" r = f.degree()\n",
|
|
||||||
" delta = GCD(r, m)\n",
|
|
||||||
" Rx.<x> = PolynomialRing(GF(p))\n",
|
|
||||||
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
|
|
||||||
" Fxy = FractionField(Rxy)\n",
|
|
||||||
" basis = {}\n",
|
|
||||||
" degrees0 = {}\n",
|
|
||||||
" degrees1 = {}\n",
|
|
||||||
" t = 0\n",
|
|
||||||
" if j == 'all':\n",
|
|
||||||
" for j in range(1, m):\n",
|
|
||||||
" holo = C.basis_holomorphic_differentials(j)\n",
|
|
||||||
" for k in range(0, len(holo)):\n",
|
|
||||||
" basis[t] = superelliptic_cech(self, holo[k], superelliptic_function(self, Rx(0))) \n",
|
|
||||||
" g = Rx(holo[k].jth_component(j))\n",
|
|
||||||
" degrees0[t] = (g.degree(), j)\n",
|
|
||||||
" t += 1\n",
|
|
||||||
" for i in range(1, r):\n",
|
|
||||||
" if (r*(m-j) - m*i >= delta):\n",
|
|
||||||
" s = Rx(m-j)*Rx(x)*Rx(f.derivative()) - Rx(m)*Rx(i)*f\n",
|
|
||||||
" psi = Rx(cut(s, i))\n",
|
|
||||||
" basis[t] = superelliptic_cech(self, superelliptic_form(self, Fxy(psi/y^j)), superelliptic_function(self, Fxy(m*y^(m-j)/x^i)))\n",
|
|
||||||
" degrees0[t] = (psi.degree(), j)\n",
|
|
||||||
" degrees1[t] = (-i, m-j)\n",
|
|
||||||
" t += 1\n",
|
|
||||||
" return basis, degrees0, degrees1\n",
|
|
||||||
" \n",
|
|
||||||
" def degree_de_rham(self, i, j='all'):\n",
|
|
||||||
" basis, degrees0, degrees1 = self.degree_and_basis_de_rham(j)\n",
|
|
||||||
" if i==0:\n",
|
|
||||||
" return degrees0\n",
|
|
||||||
" \n",
|
|
||||||
" if i==1:\n",
|
|
||||||
" return degrees1\n",
|
|
||||||
" \n",
|
|
||||||
" def basis_de_rham(self, j = 'all'): \n",
|
|
||||||
" basis, degrees0, degrees1 = self.degree_and_basis_de_rham(j)\n",
|
|
||||||
" return basis\n",
|
|
||||||
" \n",
|
" \n",
|
||||||
" def verschiebung_matrix(self):\n",
|
" def verschiebung_matrix(self):\n",
|
||||||
" basis = self.basis_de_rham()\n",
|
" basis = self.basis_de_rham\n",
|
||||||
" g = self.genus()\n",
|
" g = self.genus()\n",
|
||||||
" p = self.characteristic\n",
|
" p = self.characteristic\n",
|
||||||
" M = matrix(GF(p), 2*g, 2*g)\n",
|
" M = matrix(GF(p), 2*g, 2*g)\n",
|
||||||
|
@ -104,7 +82,7 @@
|
||||||
" return M\n",
|
" return M\n",
|
||||||
" \n",
|
" \n",
|
||||||
" def frobenius_matrix(self):\n",
|
" def frobenius_matrix(self):\n",
|
||||||
" basis = self.basis_de_rham()\n",
|
" basis = self.basis_de_rham\n",
|
||||||
" g = self.genus()\n",
|
" g = self.genus()\n",
|
||||||
" p = self.characteristic\n",
|
" p = self.characteristic\n",
|
||||||
" M = matrix(GF(p), 2*g, 2*g)\n",
|
" M = matrix(GF(p), 2*g, 2*g)\n",
|
||||||
|
@ -369,11 +347,11 @@
|
||||||
" Fx = FractionField(Rx)\n",
|
" Fx = FractionField(Rx)\n",
|
||||||
" FxRy.<y> = PolynomialRing(Fx)\n",
|
" FxRy.<y> = PolynomialRing(Fx)\n",
|
||||||
" g = C.genus()\n",
|
" g = C.genus()\n",
|
||||||
" degrees0 = C.degree_de_rham(0)\n",
|
" degrees0 = C.degree_de_rham0\n",
|
||||||
" degrees0_inv = {b:a for a, b in degrees0.items()} \n",
|
" degrees0_inv = {b:a for a, b in degrees0.items()} \n",
|
||||||
" degrees1 = C.degree_de_rham(1)\n",
|
" degrees1 = C.degree_de_rham1\n",
|
||||||
" degrees1_inv = {b:a for a, b in degrees1.items()}\n",
|
" degrees1_inv = {b:a for a, b in degrees1.items()}\n",
|
||||||
" basis = C.basis_de_rham()\n",
|
" basis = C.basis_de_rham\n",
|
||||||
" \n",
|
" \n",
|
||||||
" omega = self.omega0\n",
|
" omega = self.omega0\n",
|
||||||
" fct = self.f\n",
|
" fct = self.f\n",
|
||||||
|
@ -476,71 +454,134 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 146,
|
"execution_count": 207,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"1\n"
|
"4\n",
|
||||||
|
"2\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"p = 5\n",
|
"p = 7\n",
|
||||||
"C = superelliptic(x^3 + x + 2, 2, p)\n",
|
"Rx.<x> = PolynomialRing(GF(p))\n",
|
||||||
"baza = C.basis_de_rham()\n",
|
"C = superelliptic(x^3 + x + 3, 5, p)\n",
|
||||||
|
"baza = C.basis_de_rham\n",
|
||||||
"print(C.genus())\n",
|
"print(C.genus())\n",
|
||||||
|
"#E = EllipticCurve(GF(p), [1, 2])\n",
|
||||||
|
"print(E.trace_of_frobenius())\n",
|
||||||
"#C.basis_holomorphic_differentials()"
|
"#C.basis_holomorphic_differentials()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 147,
|
"execution_count": 208,
|
||||||
"metadata": {
|
|
||||||
"scrolled": false
|
|
||||||
},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"A = C.frobenius_matrix()\n",
|
|
||||||
"B = C.verschiebung_matrix()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 148,
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"[0 0]\n",
|
"{0: (-1, 1), 1: (0, 1), 2: (1, 2), 3: (1, 3)}"
|
||||||
"[1 2]"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 148,
|
"execution_count": 208,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"A"
|
"C.degree_de_rham0"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 149,
|
"execution_count": 209,
|
||||||
|
"metadata": {
|
||||||
|
"scrolled": false
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"{0: (0 dx, 5/x*y^4, ((x + 1)/(x^2*y)) dx),\n",
|
||||||
|
" 1: ((2/y) dx, 5/x^2*y^4, ((-x + 2)/(x^3*y)) dx),\n",
|
||||||
|
" 2: (((-3*x)/y^2) dx, 5/x*y^3, ((2*x + 1)/(x^2*y^2)) dx),\n",
|
||||||
|
" 3: ((x/y^3) dx, 5/x*y^2, ((3*x + 1)/(x^2*y^3)) dx)}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 209,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"C.basis_de_rham"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 181,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"False\n",
|
||||||
|
"False\n",
|
||||||
|
"False\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n",
|
||||||
|
"True\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"for i in range(0, 30):\n",
|
||||||
|
" print((B^i).image() == (B^(i+1)).image())"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 157,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"[2 0]\n",
|
"[7 0]\n",
|
||||||
"[4 0]"
|
"[6 0]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 149,
|
"execution_count": 157,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
|
@ -554,20 +595,25 @@
|
||||||
"execution_count": 150,
|
"execution_count": 150,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": []
|
||||||
"E = EllipticCurve(GF(p), [1, 2])"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 151,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [
|
||||||
"source": [
|
{
|
||||||
"p = 5\n",
|
"data": {
|
||||||
"R.<x, y> = PolynomialRing(GF(p), 2)\n",
|
"text/plain": [
|
||||||
"g = x^6*y^2 + y^2"
|
"2"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 151,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
|
|
Loading…
Reference in New Issue