Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/schemes/hyperelliptic_curves/kummer_surface.py
4102 views
1
"""
2
Kummer surfaces over a general ring
3
"""
4
5
#*****************************************************************************
6
# Copyright (C) 2006 David Kohel <[email protected]>
7
# Distributed under the terms of the GNU General Public License (GPL)
8
# http://www.gnu.org/licenses/
9
#*****************************************************************************
10
11
from sage.schemes.generic.all import ProjectiveSpace
12
from sage.schemes.generic.algebraic_scheme \
13
import AlgebraicScheme_subscheme_projective
14
from sage.categories.homset import Hom
15
from sage.categories.all import Schemes
16
17
# The generic genus 2 curve in Weierstrass form:
18
#
19
# y^2 + (c9*x^3 + c6*x^2 + c3*x + c0)*y =
20
# a12*x^6 + a10*x^5 + a8*x^4 + a6*x^3 + a4*x^2 + a2*x + a0.
21
#
22
# Transforms to:
23
#
24
# y^2 = (c9^2 + 4*a12)*x^6 + (2*c6*c9 + 4*a10)*x^5
25
# + (2*c3*c9 + c6^2 + 4*a8)*x^4 + (2*c0*c9 + 2*c3*c6 + 4*a6)*x^3
26
# + (2*c0*c6 + c3^2 + 4*a4)*x^2 + (2*c0*c3 + 4*a2)*x + c0^2 + 4*a0
27
28
class KummerSurface(AlgebraicScheme_subscheme_projective):
29
def __init__(self,J):
30
"""
31
"""
32
R = J.base_ring()
33
PP = ProjectiveSpace(3,R,["X0","X1","X2","X3"])
34
X0, X1, X2, X3 = PP.gens()
35
C = J.curve()
36
f, h = C.hyperelliptic_polynomials()
37
a12 = f[0]; a10 = f[1]; a8 = f[2];
38
a6 = f[3]; a4 = f[4]; a2 = f[5]; a0 = f[6]
39
if h != 0:
40
c6 = h[0]; c4 = h[1]; c2 = h[2]; c0 = h[3]
41
a12, a10, a8, a6, a4, a2, a0 = \
42
(4*a12 + c6**2,
43
4*a10 + 2*c4*c6,
44
4*a8 + 2*c2*c6 + c4**2,
45
4*a6 + 2*c0*c6 + 2*c2*c4,
46
4*a4 + 2*c0*c4 + c2**2,
47
4*a2 + 2*c0*c2,
48
4*a0 + c0**2)
49
F = \
50
(-4*a8*a12 + a10**2)*X0**4 + \
51
-4*a6*a12*X0**3*X1 + \
52
-2*a6*a10*X0**3*X2 + \
53
-4*a12*X0**3*X3 + \
54
-4*a4*a12*X0**2*X1**2 + \
55
(4*a2*a12 - 4*a4*a10)*X0**2*X1*X2 + \
56
-2*a10*X0**2*X1*X3 + \
57
(-4*a0*a12 + 2*a2*a10 - 4*a4*a8 + a6**2)*X0**2*X2**2 + \
58
-4*a8*X0**2*X2*X3 + \
59
-4*a2*a12*X0*X1**3 + \
60
(8*a0*a12 - 4*a2*a10)*X0*X1**2*X2 + \
61
(4*a0*a10 - 4*a2*a8)*X0*X1*X2**2 + \
62
-2*a6*X0*X1*X2*X3 + \
63
-2*a2*a6*X0*X2**3 + \
64
-4*a4*X0*X2**2*X3 + \
65
-4*X0*X2*X3**2 + \
66
-4*a0*a12*X1**4 + \
67
-4*a0*a10*X1**3*X2 + \
68
-4*a0*a8*X1**2*X2**2 + \
69
X1**2*X3**2 + \
70
-4*a0*a6*X1*X2**3 + \
71
-2*a2*X1*X2**2*X3 + \
72
(-4*a0*a4 + a2**2)*X2**4 + \
73
-4*a0*X2**3*X3
74
AlgebraicScheme_subscheme_projective.__init__(self, PP, F)
75
X, Y, Z = C.ambient_space().gens()
76
if a0 ==0:
77
a0 = a2
78
phi = Hom(C,self)([0,Z**2,X*Z,a0*X**2],Schemes())
79
C._kummer_morphism = phi
80
J._kummer_surface = self
81
82
83
84
85