Skip to content

Instantly share code, notes, and snippets.

@defeo
Last active March 26, 2020 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save defeo/f8853c43301e779b252b45ad1d32055c to your computer and use it in GitHub Desktop.
Save defeo/f8853c43301e779b252b45ad1d32055c to your computer and use it in GitHub Desktop.
Investigating genus theory
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Thoughts on genus theory\n",
"\n",
"The excellent work https://eprint.iacr.org/2020/151 explains how the classical genus theory of quadratic imaginary class groups can be effectively computed even in the context of complex multiplication elliptic curves, withouth direct access to the class group elements.\n",
"\n",
"Basically, genus theory gives a long exact sequence\n",
"\n",
"$$0 → cl(\\mathcal{O})^2 → cl(\\mathcal{O}) \\overset{Φ}{→} \\{±1\\}^μ → \\{±1\\} → 0$$\n",
"\n",
"where the map $Φ$ is called the *complete character*, the subgroup $cl(\\mathcal{O})^2$ is called the *principal genus*, and its cosets are the other *genera*. Note that, by basic group theory $cl(\\mathcal{O})/cl(\\mathcal{O})^2\\simeq cl(\\mathcal{O})[2]$, and thus $\\# cl(\\mathcal{O})[2] = 2^{μ-1}$. So, essentially, genera can be seen as a \"labelling\" $Φ$ of elements of $cl(\\mathcal{O})$ (with $2^{μ-1}$ distinct labels).\n",
"\n",
"Complex multiplication theory defines a regular group action of $cl(\\mathcal{O})$ on the set of elliptic curves with complex multiplication by $\\mathcal{O}$. Thus, if we fix a starting curve $E_0$, genus theory gives a labelling of the CM set by setting $g(\\mathfrak{a}*E_0) \\equiv Φ(\\mathfrak{a})$. Note this labelling of the set is dependent on the choice of the *origin* $E_0$.\n",
"\n",
"But the CM set is also the support for all sorts of isogeny graphs, so the labelling $g$ gives in fact graph colorings. It is natural to investigate the properties of the coloring as we chose different sets of edges.\n",
"\n",
"Let's focus on a fundamental (i.e., squarefree) discriminant $Δ=1 \\mod 4$, for simplicity. Let $Δ = p_1·p_2\\cdots p_μ$ be its decomposition into (odd) prime factors, the complete character $Φ$ is in fact a tuple of quadratic characters $(χ_1,\\dots,χ_μ)$ defined as\n",
"\n",
"$$χ_i(\\mathfrak{a}) = \\left(\\frac{N(\\mathfrak{a})}{p_i}\\right).$$\n",
"\n",
"The primes $p_i$ ramify in $\\mathcal{O}_Δ$, i.e., they factor as $(p_i)=\\mathfrak{p}_i^2$, and thus the ideals $\\mathfrak{p}_i$ have order $2$ in $cl(\\mathcal{O}_Δ)$ (they in fact generate $cl(\\mathcal{O}_Δ)[2]$).\n",
"\n",
"To each of the ideals $\\mathfrak{p}_i^2$ is associated an isogeny of degree $p_i$, hence the $p_i$-isogeny graph is a bipartite 1-regular graph, like:"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"Graphics object consisting of 22 graphics primitives"
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G = BipartiteGraph(identity_matrix(7))\n",
"G.plot(partition=G.coloring())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"My broken intuition tells me that the character $χ_i$ should provide a valid coloring on the $p_i$-isogeny graph, i.e., that, after fixing an origin $E_0$, the $i$-th coordinate of the labelling $g$ defined above provides a valid coloring.\n",
"\n",
"Here by \"valid\" i mean that adjacent vertices have different colors, so in the picture above, if vertex $0$ corresponds to the origin $E_0$, the color blue corresponds to the value $+1$, and the color red corresponds to $-1$.\n",
"\n",
"To prove this, it would be enough to prove that $χ_i(\\mathfrak{p}_i)=-1$.\n",
"\n",
"More generally, if we take the union of all the $p_i$-isogeny graphs, I expect to see a collection of $(μ-1)$-hypercubes, and, after fixing the origin $E_0$, I expect each vertex of a hypercube to get a different color. The picture below shows one connected component in the case $μ=5$, parallel edges represent isogenies of the same degree, each color represents a different genus.\n",
"\n",
"Note that there is a mismatch between the number of genera ($2^{μ-1}$) and the number of different isogeny degrees ($μ$). Because $\\# cl(\\mathcal{O})[2] = 2^{μ-1}$, necessarily one of the ideals $\\mathfrak{p}_i$ (not pictured) must be written as a combination of the other ones."
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Pf1RBZVINd177700apTAEOcqDDX7G/1J1vMLR3j8iSe8PDoR/9KeKrG9goICrmx3OZGun1n6t9LT7kV1JttzoetD4cQntOTL1VllJ8eKSNUtWLCAG2+8kYdpzWTa46jw5gkVm0k2d7GCiRMnMmbMGB+OUsT3tKdKbK927dp8Mn8R+Ufq0enBMJZvqNpyC1dD5xHhhMck8dHH8xVUIjXUu3dvpk6dygt8y+8dy9jH0bMuc4xSxrKWu1jB0CFDGD16tB9GKuJbiioJCi1atGBlxmoaN21P15Ew8GkHyzeceJiyR0kpfJoFA/7soPej0KZdN5avWMX5559vzcBFgsTw4cN55513WFQnj1ZhH/EUX/EThafNl88xXuY7rgj7mMnhm/jrX//K9ONX8orYnQ7/SVApLS1l+vTp/P2FSWRv3UataCdtmzupE+Nif6GTb350cfSYizatLyN99J+48847tTEX8aKcnBzGjx/PrLf+xeGjR0gKr0MLV23CcLA97DDZxfsJc4ZxU79+/OXpp2jbtq3VQxbxGkWVBCWXy8WKFSv48ssv+eabbzhy5AixsbFcccUVdOrUiQ4dOiimRHzowIEDLF68mKysLLZt24YxhoSEBNq3b0/37t1p0qSJ1UMU8TpFlYiIiIgX6JwqERERES9QVImIiIh4gaJKRERExAsUVSIiIiJeoKgSERER8QJFlYiIiIgXKKpEREREvEBRJSIiIuIFiioRERERL/j/20z/74lSsDwAAAAASUVORK5CYII=\n",
"text/plain": [
"Graphics object consisting of 49 graphics primitives"
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G = graphs.CubeGraph(4)\n",
"G.plot(partition=[[v] for v in G])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It turns out that my intuition is wrong in general, but let's give first a case where it is right. Let's take $Δ=-3·5$."
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Number Field in a with defining polynomial x^2 + 15"
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"K.<a> = QuadraticField(-15)\n",
"K"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-15"
]
},
"execution_count": 184,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"K.discriminant()"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Class group of order 2 with structure C2 of Number Field in a with defining polynomial x^2 + 15"
]
},
"execution_count": 185,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"O = K.maximal_order()\n",
"cl = O.class_group()\n",
"cl"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As expected $μ=2$ and thus $\\# cl(\\mathcal{O})[2] = 2$. The generator of the class group has genus $(-1,-1)$"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Fractional ideal (2, 1/2*a + 1/2)"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I = cl.gen().representative_prime()\n",
"I"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-1, -1)"
]
},
"execution_count": 187,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(legendre_symbol(I.norm(), 3), legendre_symbol(I.norm(), 5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And the same ideal class also contains the factors of $(3)$ and $(5)$, so the $(3,5)$-isogeny graph is the bipartite graph on two vertices (where the $3$-isogeny and the $5$-isogeny are merged in a single edge), and the complete character gives a valid coloring on it:"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Fractional ideal (3, 1/2*a + 3/2)"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"J = O.ideal(3).factor()[0][0]\n",
"J"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(J/I).is_principal()"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Fractional ideal (5, 1/2*a + 5/2)"
]
},
"execution_count": 193,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"J = O.ideal(5).factor()[0][0]\n",
"J"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(J/I).is_principal()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, an example that doesn't work as hoped: $Δ = -3·13$."
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-39"
]
},
"execution_count": 195,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"K.<a> = QuadraticField(-39)\n",
"K.discriminant()"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Class group of order 4 with structure C4 of Number Field in a with defining polynomial x^2 + 39"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"O = K.maximal_order()\n",
"cl = O.class_group()\n",
"cl"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nice! A cyclic group of order 4. So necessarily $\\mathfrak{p}_3\\simeq \\mathfrak{p}_{13}$, and the $(3,13)$-isogeny graph must be a bipartite graph on 4 vertices."
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 234,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I = O.ideal(3).factor()[0][0]\n",
"J = O.ideal(13).factor()[0][0]\n",
"cl(I) == cl(J)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To compute the genus, we need to find an ideal in the same class with norm invertible modulo 39"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Fractional ideal (8, a + 3)"
]
},
"execution_count": 238,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I2 = I * (a+3) / 3\n",
"I2"
]
},
{
"cell_type": "code",
"execution_count": 239,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 239,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cl(I2) == cl(I)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And... suprise!"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"16"
]
},
"execution_count": 240,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I2.norm()"
]
},
{
"cell_type": "code",
"execution_count": 241,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 1)"
]
},
"execution_count": 241,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"legendre_symbol(I2.norm(), 3), legendre_symbol(I2.norm(), 13)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The ideals are in the principal genus, thus the complete character does not give a valid coloring of the graph:"
]
},
{
"cell_type": "code",
"execution_count": 280,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAhkAAACoEEAFAIJACAQiABABQCCQCgEEgAAIVAAgAoBBIAQCGQAAAKgQQAUAgkAIBCIAEAFAIJAKAQSAAAhUACACgEEgBAIZAAAAqBBABQCCQAgEIgAQAUAgkAoBBIAACFQAIAKAQSAEAh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\n",
"text/plain": [
"Graphics object consisting of 7 graphics primitives"
]
},
"execution_count": 280,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G = BipartiteGraph(identity_matrix(2))\n",
"G.plot(partition=[[0,2],[1,3]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Actually, this is not so much a surprise, because"
]
},
{
"cell_type": "code",
"execution_count": 242,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 1)"
]
},
"execution_count": 242,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"legendre_symbol(13, 3), legendre_symbol(3, 13)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To come back to the question of determining $χ_i(\\mathfrak{p}_i)$, let $p$ be an odd prime, $q$ an odd integer such that $p=-q\\mod 4$, and let $Δ = -p q$. The quadratic form\n",
"\n",
"$$f(x,y) = px^2 + pxy + \\frac{p+q}{4}y^2$$\n",
"\n",
"has discriminant $Δ$ and represents $p$ by $f(1,0)=p$. We see immediately that\n",
"\n",
"$$f(x,y) = \\frac{p+q}{4} y^2 \\mod p,$$\n",
"\n",
"so, taking $y≠0$ and writing $n=(p+q)/4$,\n",
"\n",
"$$χ_i(\\mathfrak{p}_i) = \\left(\\frac{f(x,y)}{p}\\right) = \\left(\\frac{n}{p}\\right).$$\n",
"\n",
"This gives us an easy way to construct counterexamples to my broken intuition. Let's double check"
]
},
{
"cell_type": "code",
"execution_count": 277,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Quadratic form in 2 variables over Integer Ring with coefficients: \n",
"[ 3 3 ]\n",
"[ * 4 ]"
]
},
"execution_count": 277,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = QuadraticForm(ZZ, 2, [3, 3, (3+13)/4])\n",
"f"
]
},
{
"cell_type": "code",
"execution_count": 264,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-39"
]
},
"execution_count": 264,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f.disc()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We verify that the form represents $1,4,10,16,22,25$ in $(ℤ/39ℤ)^*$ and is thus in the principal genus."
]
},
{
"cell_type": "code",
"execution_count": 276,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(1, 1, 1, 0),\n",
" (2, -1, -1, 0),\n",
" (4, 1, 1, 4),\n",
" (5, -1, -1, 0),\n",
" (7, 1, -1, 0),\n",
" (8, -1, -1, 0),\n",
" (10, 1, 1, 4),\n",
" (11, -1, -1, 0),\n",
" (14, -1, 1, 0),\n",
" (16, 1, 1, 4),\n",
" (17, -1, 1, 0),\n",
" (19, 1, -1, 0),\n",
" (20, -1, -1, 0),\n",
" (22, 1, 1, 4),\n",
" (23, -1, 1, 0),\n",
" (25, 1, 1, 4),\n",
" (28, 1, -1, 0),\n",
" (29, -1, 1, 0),\n",
" (31, 1, -1, 0),\n",
" (32, -1, -1, 0),\n",
" (34, 1, -1, 0),\n",
" (35, -1, 1, 0),\n",
" (37, 1, -1, 0),\n",
" (38, -1, 1, 0),\n",
" (40, 1, 1, 8)]"
]
},
"execution_count": 276,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[(i, legendre_symbol(i, 3), legendre_symbol(i, 13), v) \n",
" for i, v in enumerate(f.representation_number_list(41))\n",
" if gcd(i,39) == 1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When $Δ=-4pq$, we can apply the same technique to the form $f(x,y) = px^2 + qy^2$.\n",
"\n",
"In conclusion, I am confused. Maybe a biquadratic character would provide a valid coloring on the example above (wouldn't it just color every vertex in a differnt color?). On the other hand, if there was an effective way to give a valid coloring for the $(3,13)$-isogeny graph (by only looking at the curves), then combining it with the genus would provide 2 bits of information!\n",
"\n",
"I suppose there is more to investigate."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 8.1",
"language": "",
"name": "sagemath"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15rc1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment