Faithful Tropicalization of Hyperelliptic Curves

Authors: Hannah Markwig, Lukas Ristau and Victoria Schleis

This page contains the code samples from the corresponding chapter in the OSCAR book. You can access the full chapter here.

The interested reader may find this article entertaining.

julia> Kt,t = rational_function_field(QQ,"t")
(Rational function field over QQ, t)

julia> Kxy, (x,y) = Kt["x", "y"]
(Multivariate polynomial ring in 2 variables over Kt, AbstractAlgebra.Generic.MPoly{AbstractAlgebra.Generic.RationalFunctionFieldElem{QQFieldElem, QQPolyRingElem}}[x, y])

julia> f=-x^3-4*x^2+y^2+(-8*t^4)*x
-x^3 - 4*x^2 - 8*t^4*x + y^2

julia> val_t = tropical_semiring_map(Kt,t)
Map into Min tropical semiring encoding the t-adic valuation on Rational function field over QQ

julia> ftrop=tropical_polynomial(f,val_t)
x^3 + x^2 + y^2 + (4)*x

julia> Tf = tropical_hypersurface(ftrop)
Min tropical hypersurface

julia> PC = polyhedral_complex(Tf)
Polyhedral complex in ambient dimension 2

julia> visualize(PC)
julia> Kt,t = rational_function_field(QQ,"t");

julia> Kxy, (x,y) = Kt["x", "y"];

julia> g = (-t^2)*x^3+(t^20)*x^2*y+(t^2)*x*y^2+(t^14)*y^3+(1-2*t^21)*x*y+(t^5-t^6)*y^2+(t^2+t^22)*y+(2*t^2+2*t^5);

julia> val_t = tropical_semiring_map(Kt,t);

julia> gtrop=tropical_polynomial(g,val_t);

julia> Tg=tropical_hypersurface(gtrop);

julia> PC2 = polyhedral_complex(Tg);

julia> vertices(PC2)
6-element SubObjectIterator{PointVector{QQFieldElem}}:
 [3, -9]
 [-2, -2]
 [2, -2]
 [3, -3]
 [2, 0]
 [0, 2]
julia> Kt,t = rational_function_field(QQ,"t");

julia> Kxy, (x,y) = Kt["x", "y"];

julia> f = (-t^2)*x^3+(t^20)*x^2*y+(t^2)*x*y^2+(t^14)*y^3+(-3*t^3)*x^2+x*y+(t^3+t^5-t^6)*y^2+(-3*t^4)*x+(t+t^2)*y+(2*t^2+t^5);

julia> val_t = tropical_semiring_map(Kt,t);

julia> ftrop=tropical_polynomial(f,val_t);

julia> Tf=tropical_hypersurface(ftrop);

julia> PC1 = polyhedral_complex(Tf);

julia> vertices(PC1)
5-element SubObjectIterator{PointVector{QQFieldElem}}:
 [1, -11]
 [1, -2]
 [-2, -2]
 [0, 2]
 [1, 1]
julia> S,(b2,b34,b4,b56,b6,b7)=polynomial_ring(QQ,["b2", "b34", "b4", "b56", "b6", "b7"])
(Multivariate polynomial ring in 6 variables over QQ, QQMPolyRingElem[b2, b34, b4, b56, b6, b7])

julia> R,(x, y, z)=polynomial_ring(S,["x", "y", "z"])
(Multivariate polynomial ring in 3 variables over S, AbstractAlgebra.Generic.MPoly{QQMPolyRingElem}[x, y, z])

julia> g = y^2-x*(x-b2^2)*(x-(b34+b4)^2)*(x-(b4)^2)*(x-(b6+b56)^2)*(x-(b6)^2)*(x+(b7)^2);

julia> f= y - b4*(b34 + b4)*b6*(b6 + b56)*b7*x + b6*(b6 + b56)*b7*x^2 - b7*x^3;

julia> Igf = ideal(R,[g,f]);

julia> eliminate(Igf,[y])
Ideal generated by
  -x^7 + (b2^2 + b34^2 + 2*b34*b4 + 2*b4^2 + b56^2 + 2*b56*b6 + 2*b6^2)*x^6 + (-b2^2*b34^2 - 2*b2^2*b34*b4 - 2*b2^2*b4^2 - b2^2*b5
  6^2 - 2*b2^2*b56*b6 - 2*b2^2*b6^2 + b2^2*b7^2 - b34^2*b4^2 - b34^2*b56^2 - 2*b34^2*b56*b6 - 2*b34^2*b6^2 + b34^2*b7^2 - 2*b34*b4
  ^3 - 2*b34*b4*b56^2 - 4*b34*b4*b56*b6 - 4*b34*b4*b6^2 + 2*b34*b4*b7^2 - b4^4 - 2*b4^2*b56^2 - 4*b4^2*b56*b6 - 4*b4^2*b6^2 + 2*b4
  ^2*b7^2 - b56^2*b6^2 + b56^2*b7^2 - 2*b56*b6^3 - b6^4)*x^5 + (b2^2*b34^2*b4^2 + b2^2*b34^2*b56^2 + 2*b2^2*b34^2*b56*b6 + 2*b2^2*
  b34^2*b6^2 - b2^2*b34^2*b7^2 + 2*b2^2*b34*b4^3 + 2*b2^2*b34*b4*b56^2 + 4*b2^2*b34*b4*b56*b6 + 4*b2^2*b34*b4*b6^2 - 2*b2^2*b34*b4
  *b7^2 + b2^2*b4^4 + 2*b2^2*b4^2*b56^2 + 4*b2^2*b4^2*b56*b6 + 4*b2^2*b4^2*b6^2 - 2*b2^2*b4^2*b7^2 + b2^2*b56^2*b6^2 - b2^2*b56^2*
  b7^2 + 2*b2^2*b56*b6^3 - 2*b2^2*b56*b6*b7^2 + b2^2*b6^4 - 2*b2^2*b6^2*b7^2 + b34^2*b4^2*b56^2 + 2*b34^2*b4^2*b56*b6 + 2*b34^2*b4
  ^2*b6^2 - b34^2*b4^2*b7^2 + b34^2*b56^2*b6^2 - b34^2*b56^2*b7^2 + 2*b34^2*b56*b6^3 - 2*b34^2*b56*b6*b7^2 + b34^2*b6^4 - 2*b34^2*
  b6^2*b7^2 + 2*b34*b4^3*b56^2 + 4*b34*b4^3*b56*b6 + 4*b34*b4^3*b6^2 - 2*b34*b4^3*b7^2 + 2*b34*b4*b56^2*b6^2 - 2*b34*b4*b56^2*b7^2
   + 4*b34*b4*b56*b6^3 - 2*b34*b4*b56*b6*b7^2 + 2*b34*b4*b6^4 - 2*b34*b4*b6^2*b7^2 + b4^4*b56^2 + 2*b4^4*b56*b6 + 2*b4^4*b6^2 - b4
  ^4*b7^2 + 2*b4^2*b56^2*b6^2 - 2*b4^2*b56^2*b7^2 + 4*b4^2*b56*b6^3 - 2*b4^2*b56*b6*b7^2 + 2*b4^2*b6^4 - 2*b4^2*b6^2*b7^2)*x^4 + (
  -b2^2*b34^2*b4^2*b56^2 - 2*b2^2*b34^2*b4^2*b56*b6 - 2*b2^2*b34^2*b4^2*b6^2 + b2^2*b34^2*b4^2*b7^2 - b2^2*b34^2*b56^2*b6^2 + b2^2
  *b34^2*b56^2*b7^2 - 2*b2^2*b34^2*b56*b6^3 + 2*b2^2*b34^2*b56*b6*b7^2 - b2^2*b34^2*b6^4 + 2*b2^2*b34^2*b6^2*b7^2 - 2*b2^2*b34*b4^
  3*b56^2 - 4*b2^2*b34*b4^3*b56*b6 - 4*b2^2*b34*b4^3*b6^2 + 2*b2^2*b34*b4^3*b7^2 - 2*b2^2*b34*b4*b56^2*b6^2 + 2*b2^2*b34*b4*b56^2*
  b7^2 - 4*b2^2*b34*b4*b56*b6^3 + 4*b2^2*b34*b4*b56*b6*b7^2 - 2*b2^2*b34*b4*b6^4 + 4*b2^2*b34*b4*b6^2*b7^2 - b2^2*b4^4*b56^2 - 2*b
  2^2*b4^4*b56*b6 - 2*b2^2*b4^4*b6^2 + b2^2*b4^4*b7^2 - 2*b2^2*b4^2*b56^2*b6^2 + 2*b2^2*b4^2*b56^2*b7^2 - 4*b2^2*b4^2*b56*b6^3 + 4
  *b2^2*b4^2*b56*b6*b7^2 - 2*b2^2*b4^2*b6^4 + 4*b2^2*b4^2*b6^2*b7^2 + b2^2*b56^2*b6^2*b7^2 + 2*b2^2*b56*b6^3*b7^2 + b2^2*b6^4*b7^2
   - b34^2*b4^2*b56^2*b6^2 + b34^2*b4^2*b56^2*b7^2 - 2*b34^2*b4^2*b56*b6^3 + 2*b34^2*b4^2*b56*b6*b7^2 - b34^2*b4^2*b6^4 + 2*b34^2*
  b4^2*b6^2*b7^2 + b34^2*b56^2*b6^2*b7^2 + 2*b34^2*b56*b6^3*b7^2 + b34^2*b6^4*b7^2 - 2*b34*b4^3*b56^2*b6^2 + 2*b34*b4^3*b56^2*b7^2
   - 4*b34*b4^3*b56*b6^3 + 4*b34*b4^3*b56*b6*b7^2 - 2*b34*b4^3*b6^4 + 4*b34*b4^3*b6^2*b7^2 - b4^4*b56^2*b6^2 + b4^4*b56^2*b7^2 - 2
  *b4^4*b56*b6^3 + 2*b4^4*b56*b6*b7^2 - b4^4*b6^4 + 2*b4^4*b6^2*b7^2)*x^3 + (b2^2*b34^2*b4^2*b56^2*b6^2 - b2^2*b34^2*b4^2*b56^2*b7
  ^2 + 2*b2^2*b34^2*b4^2*b56*b6^3 - 2*b2^2*b34^2*b4^2*b56*b6*b7^2 + b2^2*b34^2*b4^2*b6^4 - 2*b2^2*b34^2*b4^2*b6^2*b7^2 - b2^2*b34^
  2*b56^2*b6^2*b7^2 - 2*b2^2*b34^2*b56*b6^3*b7^2 - b2^2*b34^2*b6^4*b7^2 + 2*b2^2*b34*b4^3*b56^2*b6^2 - 2*b2^2*b34*b4^3*b56^2*b7^2 
  + 4*b2^2*b34*b4^3*b56*b6^3 - 4*b2^2*b34*b4^3*b56*b6*b7^2 + 2*b2^2*b34*b4^3*b6^4 - 4*b2^2*b34*b4^3*b6^2*b7^2 - 2*b2^2*b34*b4*b56^
  2*b6^2*b7^2 - 4*b2^2*b34*b4*b56*b6^3*b7^2 - 2*b2^2*b34*b4*b6^4*b7^2 + b2^2*b4^4*b56^2*b6^2 - b2^2*b4^4*b56^2*b7^2 + 2*b2^2*b4^4*
  b56*b6^3 - 2*b2^2*b4^4*b56*b6*b7^2 + b2^2*b4^4*b6^4 - 2*b2^2*b4^4*b6^2*b7^2 - 2*b2^2*b4^2*b56^2*b6^2*b7^2 - 4*b2^2*b4^2*b56*b6^3
  *b7^2 - 2*b2^2*b4^2*b6^4*b7^2)*x^2 + (b2^2*b34^2*b4^2*b56^2*b6^2*b7^2 + 2*b2^2*b34^2*b4^2*b56*b6^3*b7^2 + b2^2*b34^2*b4^2*b6^4*b
  7^2 + 2*b2^2*b34*b4^3*b56^2*b6^2*b7^2 + 4*b2^2*b34*b4^3*b56*b6^3*b7^2 + 2*b2^2*b34*b4^3*b6^4*b7^2 + b2^2*b4^4*b56^2*b6^2*b7^2 + 
  2*b2^2*b4^4*b56*b6^3*b7^2 + b2^2*b4^4*b6^4*b7^2)*x
julia> S,(b4,b56,b6,b7)=polynomial_ring(QQ,["b4", "b56", "b6", "b7"])
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[b4, b56, b6, b7])

julia> R,(x, y, z)=polynomial_ring(S,["x", "y", "z"])
(Multivariate polynomial ring in 3 variables over multivariate polynomial ring, AbstractAlgebra.Generic.MPoly{QQMPolyRingElem}[x, y, z])

julia> g = y^2-x*(x-1000^2)*(x-(1000000+b4)^2)*(x-(b4)^2)*(x-(b6+b56)^2)*(x-(b6)^2)*(x+(b7)^2);

julia> f = y - b4*(1000000 + b4)*b6*(b6 + b56)*b7*x + b6*(b6 + b56)*b7*x^2 - b7*x^3;

julia> Igf = ideal(R,[g,f]);

julia> eliminate(Igf,[x])
Edit this page Contact Imprint Privacy policy © 2018-2025 The OSCAR Team