################################## # Groebner cone computations jC2 # ################################## # In order to certify the calculations in "ComputationOfJInvariantsTypeIV.sage" and "ComputationOfJInvariantsTypeV.sage" do not depend on the chosen weight vector, we need to check the TypeIVCone and TypeVCone are not subdivided by the Grobner complex of the numerator and denominator of the j-invariant corresponding to the right-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("jC2OutputNumAndDenom.sage") # We turn both expressions into polynomials jC2Num = R(jC2Num) jC2Denom = R(jC2Denom) load("macroslocalJInvariantComputationsAndPrimesWithBadReduction.sage") ################################# # Calculations of Grobner cones # ################################# ########## # jC2Num # ########## # gfjC2Num = GrobnerFanComputations(fromPolynomialsToExtremalMonomials(jC2Num,R)) # We save it: # save(gfjC2Num, "gFjC2/GroebnerFanjC2Num.sobj") gfjC2Num = load("gFjC2/GroebnerFanjC2Num.sobj") # We record the f-vector: # print gfjC2Num.f_vector() # [1, 4, 6, 4] # We confirm the dimension of the fan is the expected one: # print gfjC2Num.dim() # 4 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = gfjC2Num.rays() # print RaysGFqfan # [[-3, 1, 1, 1], [1, -3, 1, 1], [1, 1, -3, 1], [1, 1, 1, -3]] # print gfjC2Num.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: MaximalConesjC2Num = gfjC2Num.maximal_cones().values()[0] # print MaximalConesjC2Num # [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]] # We record the maximal cones in the Grobner Fan of jC2 as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesgfjC2NumDict = MaximalCones(gfjC2Num) # save(PolyMaximalConesgfjC2NumDict, "gFjC2/PolyMaximalConesgfjC2NumDict.sobj") # set([dim(x) for x in PolyMaximalConesgfjC2NumDict.values()]) # {4} ############ # jC2Denom # ############ # gfjC2Denom = GrobnerFanComputations(fromPolynomialsToExtremalMonomials(jC2Denom,R)) # We save it: # save(gfjC2Denom, "gFjC2/GroebnerFanjC2Denom.sobj") gfjC2Denom = load("gFjC2/GroebnerFanjC2Denom.sobj") # We record the f-vector: # print gfjC2Denom.f_vector() # [1, 8, 18, 12] # We confirm the dimension of the fan is the expected one: # print gfjC2Denom.dim() # 4 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = gfjC2Denom.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 gfjC2Denom.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: MaximalConesjC2Denom = gfjC2Denom.maximal_cones().values()[0] # print MaximalConesjC2Denom # [[0, 1, 4], [0, 2, 4], [0, 1, 5], [0, 2, 6], [0, 3, 5], [0, 3, 6], [1, 4, 5], [2, 4, 6], [3, 5, 6], [4, 5, 7], [4, 6, 7], [5, 6, 7]] # We record the maximal cones in the Grobner Fan of jC2 as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesgfjC2DenomDict = MaximalCones(gfjC2Denom) # save(PolyMaximalConesgfjC2DenomDict, "gFjC2/PolyMaximalConesgfjC2DenomDict.sobj") # set([dim(x) for x in PolyMaximalConesgfjC2DenomDict.values()]) # {4}