Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Project: Kummer-8
Views: 451
Kernel: SageMath 9.7
P3.<x,y,z,t> = ProjectiveSpace(3, QQ) #projective space Kxyz = QQ['x,y,z'] Kxy = QQ['x,y']

Soient [α:β:γ:δ][α:β:γ:δ] les coordonnées homogènes d'un point dans l'espace projectif réel. Selon le livre "Kummer's quartic surface" de R.W.H.T. Hudson, j'ai compris que l'équation de la surface de Kummer à 8 nœuds réels (α,β,γ,δ),(δ,γ,β,α),(α,β,γ,δ),(δ,γ,β,α),(α,β,γ,δ),(δ,γ,β,α),(α,β,γ,δ),(δ,γ,β,α)(α, β, γ, δ), (δ, γ, β, α),(−α, −β, γ, δ), (−δ, −γ, β, α),(−α, β, −γ, δ), (−δ, γ, −β, α),(α, −β, −γ, δ), (δ, −γ, −β, α) (et huit nœuds complexes (iβ,α,δ,iγ),(iγ,δ,α,iβ),(iβ,α,δ,iγ),(iγ,δ,α,iβ),(iβ,α,δ,iγ),(iγ,δ,α,iβ),(iβ,α,δ,iγ),(iγ,δ,α,iβ))(iβ, α, δ, iγ), (iγ, δ, α, iβ),(−iβ, −α, δ, iγ), (−iγ, −δ, α, iβ),(−iβ, α, −δ, iγ), (−iγ, δ, −α, iβ), (iβ, −α, −δ, iγ), (iγ, −δ, −α, iβ)) s'obtient comme x4y4z4+t4+A(x2t2y2z2)+iB(y2t2+z2x2)+iC(z2t2+x2y2)+iDxyzt=0x^4−y^4−z^4+t^4+A\left(x^2t^2−y^2z^2\right)+iB\left(y^2t^2+z^2x^2\right)+iC\left(z^2t^2+x^2y^2\right)+iDxyzt=0 A=(α4+δ4)+(β4+γ4)α2δ2+β2γ2A = −\frac{(α^4+δ^4)+(β^4+γ^4)}{α^2δ^2+β^2γ^2} iB=(β4δ4)(γ4α4)β2δ2γ2α2iB = \frac{(β^4−δ^4)−(γ^4−α^4)}{β^2δ^2−γ^2α^2} iC=(γ4δ4)+(α4β4)γ2δ2α2β2iC = \frac{(γ^4−δ^4)+(α^4−β^4)}{γ^2δ^2−α^2β^2} iD=αβγδ((α2+δ2)2+(β2+γ2)2)((α2δ2)2+(β2γ2)2)(α2δ2+β2γ2)(γ2δ2α2β2)(β2δ2α2γ2)iD = αβγδ\frac{((α^2+δ^2)^2+(β^2+γ^2)^2)((α^2−δ^2)^2+(β^2−γ^2)^2)}{(α^2δ^2+β^2γ^2)(γ^2δ^2−α^2β^2)(β^2δ^2−α^2γ^2)}

def kummer8(a,b,c,d): A = -(a^4+b^4+c^4+d^4)/(a^2*d^2+b^2*c^2) iB = (a^4+b^4-c^4-d^4)/(b^2*d^2-c^2*a^2) iC = (a^4-b^4+c^4-d^4)/(c^2*d^2-a^2*b^2) iD = a*b*c*d*((a^2+d^2)^2+(b^2+c^2)^2)*((a^2-d^2)^2+(b^2-c^2)^2)/(a^2*d^2+b^2*c^2)*(b^2*d^2-c^2*a^2)*(c^2*d^2-a^2*b^2) return x^4-y^4-z^4+t^4+A*(x^2*t^2-y^2*z^2)+iB*(y^2*t^2+z^2*x^2)+iC*(z^2*t^2+x^2*y^2)+iD*x*y*z*t
def points8(a,b,c,d): return [ [a,b,c,d], \ [d,c,b,a], \ [-a,-b,c,d], \ [-d,-c,b,a], \ [-a,b,-c,d],\ [-d,c,-b,a], \ [a,-b,-c,d], [d,-c,-b,a] ]

Tests

α=½,β=,γ=0,δ=1α=−½,β=−⅓,γ=0,δ=1

f = kummer8(-1/2,-1/3,0,1)

c'est bien un polynôme de degré 4

f.degree()
4
fd = Kxyz(f.subs(t=1));fd
x^4 + 1231/36*x^2*y^2 - y^4 - 1199/144*x^2*z^2 + 1393/324*y^2*z^2 - z^4 - 1393/324*x^2 - 1199/144*y^2 + 1231/36*z^2 + 1
# comme mon sage sur le cloud plantait ici, j'ai continué avec MathMod et Surfer # implicit_plot3d(fd,(x,-6,6),(y,-6,6),(z,-6,6))

Script MathMod

{"Iso3D": { "Component": ["Kummer8.-demi.-tiers.0.1"], "Fxyz": ["x^4 + 1231/36*x^2*y^2 - y^4 - 1199/144*x^2*z^2 + 1393/324*y^2*z^2 - z^4 - 1393/324*x^2 - 1199/144*y^2 + 1231/36*z^2 + 1"], "Name": ["Kummer8.-demi.-tiers.0.1"], "Xmax": ["6"], "Xmin": ["-6"], "Ymax": ["5"], "Ymin": ["-5"], "Zmax": ["7"], "Zmin": ["-7"] } }

Image par MathMod :

Kummer8(−½,−⅓,0,1) par MathMod

Image par Surfer

Kummer8(−½,−⅓,0,1) par Surfer

Vérifions par le calcul les points singuliers.

lpoints = points8(-1/2,-1/3,0,1) fx,fy,fz,ft = f.gradient() for p in lpoints: print f(p),fx(p),fy(p),fz(p),ft(p)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Yes!!! Recherchons la totalité des points singuliers.

print 'Sans regarder à l\'infini : ' dfx,dfy,dfz = fd.gradient() I = Kxyz.ideal([fd,dfx,dfy,dfz]) V = I.variety(AA) print 'La surface a',len(V),'points singuliers réels' V = I.variety(QQbar) print 'La surface a',len(V),'points singuliers complexes'
Sans regarder à l'infini : La surface a 8 points singuliers réels La surface a 12 points singuliers complexes

Pour les points finis c'est bon, vérifions qu'en prenant les points à l'infini on a bien 16 points singuliers.

f2 = Kxy(f.subs(z=1, t=0)) #recherche des points de la forme [x:y:1:0] print f2.factor() dfx,dfy = f2.gradient() J = Kxy.ideal([f2,dfx,dfy]) W=J.variety(QQbar) print 'il y a',len(W),'points singuliers à l\'infini'
(-1/1296) * (-1296*x^4 - 44316*x^2*y^2 + 1296*y^4 + 10791*x^2 - 5572*y^2 + 1296) il y a 4 points singuliers à l'infini

α=1,β=1,γ=0,δ=1α=−1,β=−1,γ=0,δ=1

g = kummer8(-1,-1,0,1)
gd = Kxyz(g(x,y,z,1));gd
x^4 + x^2*y^2 - y^4 + x^2*z^2 + 3*y^2*z^2 - z^4 - 3*x^2 + y^2 + z^2 + 1
implicit_plot3d(gd,(x,-6,6),(y,-5,5),(z,-7,7))
iopub data rate exceeded. The notebook server will temporarily stop sending iopub messages to the client in order to avoid crashing it. To change this limit, set the config variable `--NotebookApp.iopub_data_rate_limit`.

Script MathMod

{"Iso3D": { "Component": ["Kummer8.-1.-1.0.1"], "Fxyz": ["x^4 + x^2*y^2 - y^4 + x^2*z^2 + 3*y^2*z^2 - z^4 - 3*x^2 + y^2 + z^2 + 1"], "Name": ["Kummer8.-1.-1.0.1"], "Xmax": ["2"], "Xmin": ["-2"], "Ymax": ["2"], "Ymin": ["-2"], "Zmax": ["2"], "Zmin": ["-2"] } }

MathMod :

Kummer8(-1,-1,0,1) par Mathmod

Surfer :

Kummer8(-1,-1,0,1) par Surfer

Elle est censée avoir avoir comme points singuliers réels tous les huit points listés ci-dessous (qui sont différents! et qui ne sont pas à l'infini!). [α:β:γ:δ]=[1:1:0:1][α:β:γ:δ]=[1:1:0:1][α:β:γ:δ]=[1:1:0:1][α:β:γ:δ]=[1:1:0:1][δ:γ:β:α]=[1:0:1:1]=[1:0:1:1][δ:γ:β:α]=[1:0:1:1]=[1:0:1:1][δ:γ:β:α]=[1:0:1:1]=[1:0:1:1][δ:γ:β:α]=[1:0:1:1]=[1:0:1:1]\begin{array}{rclcl} &&[α:β:γ:δ]&=&[−1:−1:0:1]\\ &&[−α:−β:γ:δ]&=&[1:1:0:1]\\ &&[−α:β:−γ: δ]&=&[1:−1:0:1]\\ &&[α:−β:−γ:δ]&=&[−1:1:0:1]\\ [δ:γ:β:α]&=&[1:0:−1:−1]&=&[−1:0:1:1]\\ [−δ:−γ:β:α]&=&[−1:0:−1:−1]&=&[1:0:1:1]\\ [−δ:γ:−β:α]&=&[−1:0:1:−1]&=&[1:0:−1:1]\\ [δ:−γ:−β:α]&=&[1:0:1:−1]&=&[−1:0:−1:1]\\ \end{array}

Les points singuliers complexes théoriques sont [iβ:α,δ:iγ]=[i:1,1:0]iβ:α:δ:iγ]=[i:1:1:0][iβ:α:δ:iγ]=[i:1:1:0]=[i:1:1:0][iβ:α:δ:iγ]=[i:1:1:0]=[i:1:1:0][iγ:δ,α:iβ]=[0:1,1:i]=[0:i:i:1][iγ:δ:α:iβ]=[0:1:1:i]=[0:i:i:1][iγ:δ:α:iβ]=[0:1:1:i]=[0:i:i:1][iγ:δ:α:iβ]=[0:1:1:i]=[0:i:i:1]\begin{array}{rclcl} &&[iβ:α,δ:iγ]&=&[−i:−1,1:0]\\ &&iβ:−α:δ:iγ]&=&[i:1:1:0]\\ [−iβ:α:−δ:iγ]&=&[i:−1:−1:0]&=&[−i:1:1:0]\\ [iβ:−α:−δ:iγ]&=&[−i:1:−1:0]&=&[i:−1:1:0]\\ [iγ:δ,α:iβ]&=&[0:1,−1:−i]&=&[0:i:−i:1]\\ [−iγ:−δ:α:iβ]&=&[0:−1:−1:−i]&=&[0:−i:−i:1]\\ [−iγ:δ:−α:iβ]&=&[0:1:1:−i]&=&[0:i:i:1]\\ [iγ:−δ:−α:iβ]&=&[0:−1:1:−i]&=&[0:−i:i:1]\\ \end{array}

Vérifions par le calcul les points singuliers.

lpoints = points8(-1,-1,0,1) gx,gy,gz,gt = g.gradient() for p in lpoints: print g(p),gx(p),gy(p),gz(p),gt(p)

Yes!!! Recherchons la totalité des points singuliers.

print 'Sans regarder à l\'infini : ' dgx,dgy,dgz = gd.gradient() I = Kxyz.ideal([gd,dgx,dgy,dgz]) V = I.variety(AA) print 'La surface a',len(V),'points singuliers réels' V = I.variety(QQbar) print 'La surface a',len(V),'points singuliers complexes'
Sans regarder à l'infini : La surface a 8 points singuliers réels La surface a 12 points singuliers complexes

Pour les points finis c'est bon, vérifions qu'en prenant les points à l'infini on a bien 16 points singuliers.

g2 = Kxy(g.subs(z=1, t=0)) #recherche des points de la forme [x:y:1:0] print g2.factor() dgx,dgy = g2.gradient() J = Kxy.ideal([g2,dgx,dgy]) W=J.variety(QQbar) print 'il y a',len(W),'points singuliers à l\'infini'
(-1) * (-x^4 - x^2*y^2 + y^4 - x^2 - 3*y^2 + 1) il y a 4 points singuliers à l'infini

α=½,β=1,γ=½,δ=0α=½,β=1,γ=−½,δ=0

h = kummer8(1/2,1,-1/2,0)
hd = Kxyz(h.subs(t=1));hd

Script MathMod :

{"Iso3D": { "Component": ["Kummer.demi.1.-demi.0"], "Fxyz": [ "x^4 + 7/2*x^2*y^2 - y^4 - 16*x^2*z^2 + 9/2*y^2*z^2 - z^4 - 9/2*x^2 - 16*y^2 + 7/2*z^2 + 1"], "Name": ["Kummer.demi.1.-demi.0"], "Xmax": ["7"], "Xmin": ["-7"], "Ymax": ["7"], "Ymin": ["-7"], "Zmax": ["7"], "Zmin": ["-7"]}}

MathMod :

kummer8(½,1,−½,0) par MathMod

Surfer :

kummer8(½,1,−½,0) par Surfer

lpoints = points8(1/2,1,-1/2,0) hx,hy,hz,ht = h.gradient() for p in lpoints: print p, h(p),hx(p),hy(p),hz(p),ht(p)
[1/2, 1, -1/2, 0] 0 0 0 0 0 [0, -1/2, 1, 1/2] 0 0 0 0 0 [-1/2, -1, -1/2, 0] 0 0 0 0 0 [0, 1/2, 1, 1/2] 0 0 0 0 0 [-1/2, -1, 1/2, 0] 0 0 0 0 0 [0, -1/2, -1, 1/2] 0 0 0 0 0 [1/2, -1, 1/2, 0] 0 0 0 0 0 [0, 1/2, -1, 1/2] 0 0 0 0 0

Yes!!! Recherchons la totalité des points singuliers.

print 'Sans regarder à l\'infini : ' dhx,dhy,dhz = hd.gradient() I = Kxyz.ideal([hd,dhx,dhy,dhz]) V = I.variety(AA) print 'La surface a',len(V),'points singuliers réels' V = I.variety(QQbar) print 'La surface a',len(V),'points singuliers complexes'
Sans regarder à l'infini : La surface a 4 points singuliers réels La surface a 12 points singuliers complexes

Vérifions qu'en prenant les points à l'infini on a bien 16 points singuliers et qu'on retrouve les 4 points réels manquants

h2 = Kxy(h.subs(z=1, t=0)) #recherche des points de la forme [x:y:1:0] print h2.factor() dhx,dhy = h2.gradient() J = Kxy.ideal([h2,dhx,dhy]) W=J.variety(AA) print 'il y a',len(W),'points singuliers réels à l\'infini'
(-1/2) * (-2*x^4 - 7*x^2*y^2 + 2*y^4 + 32*x^2 - 9*y^2 + 2) il y a 4 points singuliers réels à l'infini

C'est bon, maintenant j'y crois 😄