################################## # Groebner cone computations jC1 # ################################## # In order to certify the calculations in "ComputationOfJInvariantsTypeV.sage" does not depend on the chosen weight vector, we need to check the TypeVCone is not subdivided by the Grobner complex of the numerator and denominator of the j-invariant corresponding to the left-most vertex. This script computes the Grobner Cones for each of the polynomials. # Our calculations are valid when the residue field has characteristic 0. # The necessary date (including the polynomials) is obtained by loading the following file: As = [var("a5"),var("a4"),var("a3"), var("a2")] R = PolynomialRing(QQ,As) K = FractionField(R); load("jC1OutputNumAndDenom.sage") # We turn both expressions into polynomials jC1Num = R(jC1Num) jC1Denom = R(jC1Denom) load("macroslocalJInvariantComputationsAndPrimesWithBadReduction.sage") ################################# # Calculations of Grobner cones # ################################# ########## # jC1Num # ########## # gfjC1Num = GrobnerFanComputations(fromPolynomialsToExtremalMonomials(jC1Num,R)) # We save it: # save(gfjC1Num, "gFjC1/GroebnerFanjC1Num.sobj") gfjC1Num = load("gFjC1/GroebnerFanjC1Num.sobj") # We record the f-vector: # print gfjC1Num.f_vector() # [1, 4, 6, 4] # We confirm the dimension of the fan is the expected one: # print gfjC1Num.dim() # 4 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = gfjC1Num.rays() # print RaysGFqfan # [[-1, -1, -1, 3], [-1, -1, 3, -1], [-1, 3, -1, -1], [3, -1, -1, -1]] # print gfjC1Num.lineality_dim() # 1 # We record the maximal cones of the fan. Each cone is described by the indices of the extremal rays spanning these cones. Such indices refer to the list of 76 rays: MaximalConesjC1Num = gfjC1Num.maximal_cones().values()[0] # print MaximalConesjC1Num # [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]] # We record the maximal cones in the Grobner Fan of jC1 as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesgfjC1NumDict = MaximalCones(gfjC1Num) # save(PolyMaximalConesgfjC1NumDict, "gFjC1/PolyMaximalConesgfjC1NumDict.sobj") # set([dim(x) for x in PolyMaximalConesgfjC1NumDict.values()]) # {4} ############ # jC1Denom # ############ # gfjC1Denom = GrobnerFanComputations(fromPolynomialsToExtremalMonomials(jC1Denom,R)) # We save it: # save(gfjC1Denom, "gFjC1/GroebnerFanjC1Denom.sobj") gfjC1Denom = load("gFjC1/GroebnerFanjC1Denom.sobj") # We record the f-vector: # print gfjC1Denom.f_vector() # [1, 8, 18, 12] # We confirm the dimension of the fan is the expected one: # print gfjC1Denom.dim() # 4 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = gfjC1Denom.rays() # print RaysGFqfan # [[-3, 1, 1, 1], [-1, -1, -1, 3], [-1, -1, 3, -1], [-1, 3, -1, -1], [1, -3, 1, 1], [1, 1, -3, 1], [1, 1, 1, -3], [3, -1, -1, -1]] # print gfjC1Denom.lineality_dim() # 1 # We record the maximal cones of the fan. Each cone is described by the indices of the extremal rays spanning these cones. Such indices refer to the list of 76 rays: MaximalConesjC1Denom = gfjC1Denom.maximal_cones().values()[0] # print MaximalConesjC1Denom # [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 4], [1, 3, 5], [2, 3, 6], [1, 4, 7], [2, 4, 7], [1, 5, 7], [2, 6, 7], [3, 5, 7], [3, 6, 7]] # We record the maximal cones in the Grobner Fan of jC1 as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesgfjC1DenomDict = MaximalCones(gfjC1Denom) # save(PolyMaximalConesgfjC1DenomDict, "gFjC1/PolyMaximalConesgfjC1DenomDict.sobj") # set([dim(x) for x in PolyMaximalConesgfjC1DenomDict.values()]) # {4}