#################################################################### # Groebner cone and subdivision computations A in characteristic 3 # #################################################################### # In order to certify the calculations in "Qrefinementwithx34Noa4BadPrimes.sage" does not depend on the chosen weight vector, we need to check the Dumbbell Cone is not subdivided by the Grobner complex of A, B and C nor of the four components of A in characteristic 3. This script computes the Grobner Cones for each of the polynomials. Since we know things behave well for the Theta Cone we only need to work with A, and not AT # Our calculations are valid when the residue field has characteristic 0. Based on the results, we later refine the calculation to include positive characteristic. # The necessary data (including the polynomials) and macros are obtained by loading the following file: load("macroslocalJInvariantComputationsAndPrimesWithBadReduction.sage") load("Qrefinementwithx34Noa4.sage") # We create the fraction field of the ambient polynomial rings K = FractionField(S); KK = FractionField(SS); # The decomposition of A is obtained by loading the auxiliary file: load("Qrefinementwithx34Noa4BadPrimes.sage") A4 = polynomialsAByCoefficients[4] A6 = polynomialsAByCoefficients[6] A12 = polynomialsAByCoefficients[12] A120 = polynomialsAByCoefficients[120] ######################################### # Calculation of the Groebner fan of A4 # ######################################### # Iq = ideal(A4) # GFq = Iq.groebner_fan() # We pre-compute the Grobner fan: # GFqFan = GFq.polyhedralfan() # save(GFqFan,"GrobnerFanA4.sobj") # We convert the data to Rational Polyhedral fan: # newGF = GFqFan.to_RationalPolyhedralFan() # save(newGF, "GFAFan_as_RationalPolyhedra.sobj") # newGF=load("GFAFan_as_RationalPolyhedra.sobj") # We load the pre-computed the Grober fan. GFqFan = load("GrobnerFanA4.sobj") # We record the f-vector: # print GFqFan.f_vector() # [1, 32, 180, 420, 360, 90] # We confirm the dimension of the fan is the expected one: # print GFqFan.dim() # 6 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = GFqFan.rays() # print RaysGFqfan # [[-5, 1, 1, 1, 1, 1], [-1, -1, -1, -1, -1, 5], [-1, -1, -1, -1, 5, -1], [-1, -1, -1, 1, 1, 1], [-1, -1, -1, 5, -1, -1], [-1, -1, 1, -1, 1, 1], [-1, -1, 1, 1, -1, 1], [-1, -1, 1, 1, 1, -1], [-1, -1, 5, -1, -1, -1], [-1, 1, -1, -1, 1, 1], [-1, 1, -1, 1, -1, 1], [-1, 1, -1, 1, 1, -1], [-1, 1, 1, -1, -1, 1], [-1, 1, 1, -1, 1, -1], [-1, 1, 1, 1, -1, -1], [-1, 5, -1, -1, -1, -1], [1, -5, 1, 1, 1, 1], [1, -1, -1, -1, 1, 1], [1, -1, -1, 1, -1, 1], [1, -1, -1, 1, 1, -1], [1, -1, 1, -1, -1, 1], [1, -1, 1, -1, 1, -1], [1, -1, 1, 1, -1, -1], [1, 1, -5, 1, 1, 1], [1, 1, -1, -1, -1, 1], [1, 1, -1, -1, 1, -1], [1, 1, -1, 1, -1, -1], [1, 1, 1, -5, 1, 1], [1, 1, 1, -1, -1, -1], [1, 1, 1, 1, -5, 1], [1, 1, 1, 1, 1, -5], [5, -1, -1, -1, -1, -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 32 rays: MaximalConesA4 = GFqFan.maximal_cones().values()[0] # print MaximalConesA4 # [[0, 1, 2, 3, 5, 16], [0, 1, 3, 4, 6, 16], [0, 2, 3, 4, 7, 16], [0, 1, 5, 6, 8, 16], [0, 2, 5, 7, 8, 16], [0, 4, 6, 7, 8, 16], [0, 1, 2, 3, 9, 23], [0, 1, 3, 4, 10, 23], [0, 2, 3, 4, 11, 23], [0, 1, 2, 5, 9, 27], [0, 1, 4, 6, 10, 29], [0, 2, 4, 7, 11, 30], [0, 1, 5, 8, 12, 27], [0, 2, 5, 8, 13, 27], [0, 1, 6, 8, 12, 29], [0, 2, 7, 8, 13, 30], [0, 4, 6, 8, 14, 29], [0, 4, 7, 8, 14, 30], [0, 1, 9, 10, 15, 23], [0, 2, 9, 11, 15, 23], [0, 4, 10, 11, 15, 23], [0, 1, 9, 12, 15, 27], [0, 2, 9, 13, 15, 27], [0, 1, 10, 12, 15, 29], [0, 2, 11, 13, 15, 30], [0, 4, 10, 14, 15, 29], [0, 4, 11, 14, 15, 30], [0, 8, 12, 13, 15, 27], [0, 8, 12, 14, 15, 29], [0, 8, 13, 14, 15, 30], [1, 2, 3, 16, 17, 23], [1, 3, 4, 16, 18, 23], [2, 3, 4, 16, 19, 23], [1, 2, 5, 16, 17, 27], [1, 4, 6, 16, 18, 29], [2, 4, 7, 16, 19, 30], [1, 5, 8, 16, 20, 27], [2, 5, 8, 16, 21, 27], [1, 6, 8, 16, 20, 29], [2, 7, 8, 16, 21, 30], [4, 6, 8, 16, 22, 29], [4, 7, 8, 16, 22, 30], [1, 2, 9, 17, 23, 27], [1, 4, 10, 18, 23, 29], [2, 4, 11, 19, 23, 30], [1, 8, 12, 20, 27, 29], [2, 8, 13, 21, 27, 30], [4, 8, 14, 22, 29, 30], [1, 9, 15, 23, 24, 27], [2, 9, 15, 23, 25, 27], [1, 10, 15, 23, 24, 29], [2, 11, 15, 23, 25, 30], [4, 10, 15, 23, 26, 29], [4, 11, 15, 23, 26, 30], [1, 12, 15, 24, 27, 29], [2, 13, 15, 25, 27, 30], [4, 14, 15, 26, 29, 30], [8, 12, 15, 27, 28, 29], [8, 13, 15, 27, 28, 30], [8, 14, 15, 28, 29, 30], [1, 16, 17, 18, 23, 31], [2, 16, 17, 19, 23, 31], [4, 16, 18, 19, 23, 31], [1, 16, 17, 20, 27, 31], [2, 16, 17, 21, 27, 31], [1, 16, 18, 20, 29, 31], [2, 16, 19, 21, 30, 31], [4, 16, 18, 22, 29, 31], [4, 16, 19, 22, 30, 31], [8, 16, 20, 21, 27, 31], [8, 16, 20, 22, 29, 31], [8, 16, 21, 22, 30, 31], [1, 17, 23, 24, 27, 31], [2, 17, 23, 25, 27, 31], [1, 18, 23, 24, 29, 31], [2, 19, 23, 25, 30, 31], [4, 18, 23, 26, 29, 31], [4, 19, 23, 26, 30, 31], [1, 20, 24, 27, 29, 31], [2, 21, 25, 27, 30, 31], [4, 22, 26, 29, 30, 31], [8, 20, 27, 28, 29, 31], [8, 21, 27, 28, 30, 31], [8, 22, 28, 29, 30, 31], [15, 23, 24, 25, 27, 31], [15, 23, 24, 26, 29, 31], [15, 23, 25, 26, 30, 31], [15, 24, 27, 28, 29, 31], [15, 25, 27, 28, 30, 31], [15, 26, 28, 29, 30, 31]] # We record the maximal cones in the Grobner Fan of A as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesA4 = MaximalCones(GFqFan) # We check that they have the expected dimension: # set([dim(x) for x in PolyMaximalConesA4.values()]) # {6} ######################################### # Calculation of the Groebner fan of A6 # ######################################### # Iq = ideal(A6) # GFq = Iq.groebner_fan() # We pre-compute the Grobner fan: # GFqFan = GFq.polyhedralfan() # save(GFqFan,"GrobnerFanA6.sobj") # We convert the data to Rational Polyhedral fan: # newGF = GFqFan.to_RationalPolyhedralFan() # save(newGF, "GFAFan_as_RationalPolyhedra.sobj") # newGF=load("GFAFan_as_RationalPolyhedra.sobj") # We load the pre-computed the Grober fan. GFqFan = load("GrobnerFanA6.sobj") # We record the f-vector: # print GFqFan.f_vector() # [1, 12, 60, 120, 90, 20] # We confirm the dimension of the fan is the expected one: # print GFqFan.dim() # 6 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = GFqFan.rays() # print RaysGFqfan # [[-5, 1, 1, 1, 1, 1], [-1, -1, -1, -1, -1, 5], [-1, -1, -1, -1, 5, -1], [-1, -1, -1, 5, -1, -1], [-1, -1, 5, -1, -1, -1], [-1, 5, -1, -1, -1, -1], [1, -5, 1, 1, 1, 1], [1, 1, -5, 1, 1, 1], [1, 1, 1, -5, 1, 1], [1, 1, 1, 1, -5, 1], [1, 1, 1, 1, 1, -5], [5, -1, -1, -1, -1, -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 12 rays: MaximalConesA6 = GFqFan.maximal_cones().values()[0] # print MaximalConesA6 # [[0, 1, 2, 3, 6, 7], [0, 1, 2, 4, 6, 8], [0, 1, 3, 4, 6, 9], [0, 2, 3, 4, 6, 10], [0, 1, 2, 5, 7, 8], [0, 1, 3, 5, 7, 9], [0, 2, 3, 5, 7, 10], [0, 1, 4, 5, 8, 9], [0, 2, 4, 5, 8, 10], [0, 3, 4, 5, 9, 10], [1, 2, 6, 7, 8, 11], [1, 3, 6, 7, 9, 11], [2, 3, 6, 7, 10, 11], [1, 4, 6, 8, 9, 11], [2, 4, 6, 8, 10, 11], [3, 4, 6, 9, 10, 11], [1, 5, 7, 8, 9, 11], [2, 5, 7, 8, 10, 11], [3, 5, 7, 9, 10, 11], [4, 5, 8, 9, 10, 11]] # We record the maximal cones in the Grobner Fan of A as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesA6 = MaximalCones(GFqFan) # We check that they have the expected dimension: # set([dim(x) for x in PolyMaximalConesA6.values()]) # {6} ########################################## # Calculation of the Groebner fan of A12 # ########################################## # Iq = ideal(A12) # GFq = Iq.groebner_fan() # We pre-compute the Grobner fan: # GFqFan = GFq.polyhedralfan() # save(GFqFan,"GrobnerFanA12.sobj") # We convert the data to Rational Polyhedral fan: # newGF = GFqFan.to_RationalPolyhedralFan() # save(newGF, "GFAFan_as_RationalPolyhedra.sobj") # newGF=load("GFAFan_as_RationalPolyhedra.sobj") # We load the pre-computed the Grober fan. GFqFan = load("GrobnerFanA12.sobj") # We record the f-vector: # print GFqFan.f_vector() # [1, 62, 180, 210, 120, 30] # We confirm the dimension of the fan is the expected one: # print GFqFan.dim() # 6 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = GFqFan.rays() # print RaysGFqfan # [[-5, 1, 1, 1, 1, 1], [-2, -2, 1, 1, 1, 1], [-2, 1, -2, 1, 1, 1], [-2, 1, 1, -2, 1, 1], [-2, 1, 1, 1, -2, 1], [-2, 1, 1, 1, 1, -2], [-1, -1, -1, -1, -1, 5], [-1, -1, -1, -1, 2, 2], [-1, -1, -1, -1, 5, -1], [-1, -1, -1, 1, 1, 1], [-1, -1, -1, 2, -1, 2], [-1, -1, -1, 2, 2, -1], [-1, -1, -1, 5, -1, -1], [-1, -1, 1, -1, 1, 1], [-1, -1, 1, 1, -1, 1], [-1, -1, 1, 1, 1, -1], [-1, -1, 2, -1, -1, 2], [-1, -1, 2, -1, 2, -1], [-1, -1, 2, 2, -1, -1], [-1, -1, 5, -1, -1, -1], [-1, 1, -1, -1, 1, 1], [-1, 1, -1, 1, -1, 1], [-1, 1, -1, 1, 1, -1], [-1, 1, 1, -1, -1, 1], [-1, 1, 1, -1, 1, -1], [-1, 1, 1, 1, -1, -1], [-1, 2, -1, -1, -1, 2], [-1, 2, -1, -1, 2, -1], [-1, 2, -1, 2, -1, -1], [-1, 2, 2, -1, -1, -1], [-1, 5, -1, -1, -1, -1], [1, -5, 1, 1, 1, 1], [1, -2, -2, 1, 1, 1], [1, -2, 1, -2, 1, 1], [1, -2, 1, 1, -2, 1], [1, -2, 1, 1, 1, -2], [1, -1, -1, -1, 1, 1], [1, -1, -1, 1, -1, 1], [1, -1, -1, 1, 1, -1], [1, -1, 1, -1, -1, 1], [1, -1, 1, -1, 1, -1], [1, -1, 1, 1, -1, -1], [1, 1, -5, 1, 1, 1], [1, 1, -2, -2, 1, 1], [1, 1, -2, 1, -2, 1], [1, 1, -2, 1, 1, -2], [1, 1, -1, -1, -1, 1], [1, 1, -1, -1, 1, -1], [1, 1, -1, 1, -1, -1], [1, 1, 1, -5, 1, 1], [1, 1, 1, -2, -2, 1], [1, 1, 1, -2, 1, -2], [1, 1, 1, -1, -1, -1], [1, 1, 1, 1, -5, 1], [1, 1, 1, 1, -2, -2], [1, 1, 1, 1, 1, -5], [2, -1, -1, -1, -1, 2], [2, -1, -1, -1, 2, -1], [2, -1, -1, 2, -1, -1], [2, -1, 2, -1, -1, -1], [2, 2, -1, -1, -1, -1], [5, -1, -1, -1, -1, -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 62 rays: MaximalConesA12 = GFqFan.maximal_cones().values()[0] # print MaximalConesA12 # [[0, 1, 2, 3, 4, 6, 7, 9, 10, 13, 14, 16, 20, 21, 23, 26], [0, 1, 2, 3, 5, 7, 8, 9, 11, 13, 15, 17, 20, 22, 24, 27], [0, 1, 2, 4, 5, 9, 10, 11, 12, 14, 15, 18, 21, 22, 25, 28], [0, 1, 3, 4, 5, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 29], [0, 2, 3, 4, 5, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [1, 6, 7, 9, 10, 13, 14, 16, 31, 32, 33, 34, 36, 37, 39, 56], [1, 7, 8, 9, 11, 13, 15, 17, 31, 32, 33, 35, 36, 38, 40, 57], [1, 9, 10, 11, 12, 14, 15, 18, 31, 32, 34, 35, 37, 38, 41, 58], [1, 13, 14, 15, 16, 17, 18, 19, 31, 33, 34, 35, 39, 40, 41, 59], [2, 6, 7, 9, 10, 20, 21, 26, 32, 36, 37, 42, 43, 44, 46, 56], [2, 7, 8, 9, 11, 20, 22, 27, 32, 36, 38, 42, 43, 45, 47, 57], [2, 9, 10, 11, 12, 21, 22, 28, 32, 37, 38, 42, 44, 45, 48, 58], [3, 6, 7, 13, 16, 20, 23, 26, 33, 36, 39, 43, 46, 49, 50, 56], [3, 7, 8, 13, 17, 20, 24, 27, 33, 36, 40, 43, 47, 49, 51, 57], [4, 6, 10, 14, 16, 21, 23, 26, 34, 37, 39, 44, 46, 50, 53, 56], [5, 8, 11, 15, 17, 22, 24, 27, 35, 38, 40, 45, 47, 51, 55, 57], [4, 10, 12, 14, 18, 21, 25, 28, 34, 37, 41, 44, 48, 53, 54, 58], [5, 11, 12, 15, 18, 22, 25, 28, 35, 38, 41, 45, 48, 54, 55, 58], [3, 13, 16, 17, 19, 23, 24, 29, 33, 39, 40, 49, 50, 51, 52, 59], [4, 14, 16, 18, 19, 23, 25, 29, 34, 39, 41, 50, 52, 53, 54, 59], [5, 15, 17, 18, 19, 24, 25, 29, 35, 40, 41, 51, 52, 54, 55, 59], [2, 20, 21, 22, 26, 27, 28, 30, 42, 43, 44, 45, 46, 47, 48, 60], [3, 20, 23, 24, 26, 27, 29, 30, 43, 46, 47, 49, 50, 51, 52, 60], [4, 21, 23, 25, 26, 28, 29, 30, 44, 46, 48, 50, 52, 53, 54, 60], [5, 22, 24, 25, 27, 28, 29, 30, 45, 47, 48, 51, 52, 54, 55, 60], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 56, 57, 58, 59, 61], [32, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 56, 57, 58, 60, 61], [33, 36, 39, 40, 43, 46, 47, 49, 50, 51, 52, 56, 57, 59, 60, 61], [34, 37, 39, 41, 44, 46, 48, 50, 52, 53, 54, 56, 58, 59, 60, 61], [35, 38, 40, 41, 45, 47, 48, 51, 52, 54, 55, 57, 58, 59, 60, 61]] # We record the maximal cones in the Grobner Fan of A as a dictionary of polyhedral objects. The keys coincide with the indices of the maximal cones in the output of the Gfan computation. PolyMaximalConesA12 = MaximalCones(GFqFan) # We check that they have the expected dimension: # set([dim(x) for x in PolyMaximalConesA12.values()]) # {6} ########################################### # Calculation of the Groebner fan of A120 # ########################################### # Iq = ideal(A120) # GFq = Iq.groebner_fan() # We pre-compute the Grobner fan: # GFqFan = GFq.polyhedralfan() # save(GFqFan,"GrobnerFanA120.sobj") # We convert the data to Rational Polyhedral fan: # newGF = GFqFan.to_RationalPolyhedralFan() # save(newGF, "GFAFan_as_RationalPolyhedra.sobj") # newGF=load("GFAFan_as_RationalPolyhedra.sobj") # We load the pre-computed the Grober fan. GFqFan = load("GrobnerFanA120.sobj") # We record the f-vector: # print GFqFan.f_vector() # [1] # We confirm the dimension of the fan is the expected one: # print GFqFan.dim() # 6 # We record the coordinates of the rays of the Grobner fan: RaysGFqfan = GFqFan.rays() # print RaysGFqfan # [] # We confirm that the fan is trivial # print GFqFan.lineality_dim() # 6 ##################################### # Subdivisions induced on each cone # ##################################### # We start by loading the cones: load("allConesGenus2.sage") ################# # Polynomial A4 # ################# ############################################################ # Subdivision of Dumbbell induced by the Grobner fan of A4 # ############################################################ # The following script computes the intersection of the Dumbbell cone with all maximal cells in the Grobner fan of A4. IntersectionsQDumbbellCone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = DumbbellCone.intersection(polyCone) IntersectionsQDumbbellCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQDumbbellCone.values()]) # {1, 2, 3, 4, 5, 6} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQDumbbellCone.keys() if dim(IntersectionsQDumbbellCone[i])==6] # print maxIntersections # [89] SubdivisionsOfDumbbellByQ = [IntersectionsQDumbbellCone[i] for i in maxIntersections] # print [len(SubdivisionsOfDumbbellByQ[i].rays()) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [5] # print [dim(SubdivisionsOfDumbbellByQ[i]) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [6] # No subdivision is produced. ################################################################ # Subdivision of Figure Eight induced by the Grobner fan of A4 # ################################################################ # The following script computes the intersection of the Figure Eight cone with all maximal cells in the Grobner fan of A4. IntersectionsQFigEightCone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = FigEightCone.intersection(polyCone) IntersectionsQFigEightCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQFigEightCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQFigEightCone.keys() if dim(IntersectionsQFigEightCone[i])==5] # print maxIntersections # [89] SubdivisionsOfFigEightByQ = [IntersectionsQFigEightCone[i] for i in maxIntersections] # print [len(SubdivisionsOfFigEightByQ[i].rays()) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [4] # print [dim(SubdivisionsOfFigEightByQ[i]) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [5] # No subdivision is produced. ########################################################### # Subdivision of Type IV induced by the Grobner fan of A4 # ########################################################### # The following script computes the intersection of the Type IV cone with all maximal cells in the Grobner fan of A4. IntersectionsQTypeIVCone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = TypeIVCone.intersection(polyCone) IntersectionsQTypeIVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeIVCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeIVCone.keys() if dim(IntersectionsQTypeIVCone[i])==5] # print maxIntersections # [83, 89] SubdivisionsOfTypeIVByQ = [IntersectionsQTypeIVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeIVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [4, 4] # print [dim(SubdivisionsOfTypeIVByQ[i]) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [5, 5] # We check that these intersections are the same. We conclude there is no subdivision. # all([SubdivisionsOfTypeIVByQ[i] == SubdivisionsOfTypeIVByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ########################################################## # Subdivision of Type V induced by the Grobner fan of A4 # ########################################################## # The following script computes the intersection of the Type V cone with all maximal cells in the Grobner fan of A4. IntersectionsQTypeVCone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = TypeVCone.intersection(polyCone) IntersectionsQTypeVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVCone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVCone.keys() if dim(IntersectionsQTypeVCone[i])==4] # print maxIntersections # [82, 83, 88, 89] SubdivisionsOfTypeVByQ = [IntersectionsQTypeVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [3, 3, 3, 3] # print [dim(SubdivisionsOfTypeVByQ[i]) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [4, 4, 4, 4] # We check that these intersections are the same. We conclude there is no subdivision. # all([SubdivisionsOfTypeVByQ[i] == SubdivisionsOfTypeVByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ########################################################### # Subdivision of Type VI induced by the Grobner fan of A4 # ########################################################### # The following script computes the intersection of the Type VI cone with all maximal cells in the Grobner fan of A4. IntersectionsQTypeVICone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = TypeVICone.intersection(polyCone) IntersectionsQTypeVICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVICone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVICone.keys() if dim(IntersectionsQTypeVICone[i])==4] # print maxIntersections # [80, 83, 89] SubdivisionsOfTypeVIByQ = [IntersectionsQTypeVICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [3, 3, 3] # print [dim(SubdivisionsOfTypeVIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [4, 4, 4] # We check that these intersections are the same. We conclude there is no subdivision. # all( [SubdivisionsOfTypeVIByQ[i] == SubdivisionsOfTypeVIByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ############################################################ # Subdivision of Type VII induced by the Grobner fan of A4 # ############################################################ # The following script computes the intersection of the Type VII cone with all maximal cells in the Grobner fan of A4. IntersectionsQTypeVIICone = {} for i in range(0,len(PolyMaximalConesA4.keys())): # print str(i) polyCone =PolyMaximalConesA4[i] IntersectionQPolyCone = TypeVIICone.intersection(polyCone) IntersectionsQTypeVIICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVIICone.values()]) # {1, 2, 3} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVIICone.keys() if dim(IntersectionsQTypeVIICone[i])==3] # print maxIntersections # [66, 68, 71, 75, 77, 79, 80, 82, 83, 86, 88, 89] SubdivisionsOfTypeVIIByQ = [IntersectionsQTypeVIICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] # print [dim(SubdivisionsOfTypeVIIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] [2, 2, 2] # We check that these intersections are the same. We conclude there is no subdivision. # all( [SubdivisionsOfTypeVIIByQ[i] == SubdivisionsOfTypeVIIByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ############################################################################# # CONCLUSION: No subdivisions are produced for A4. ############################################################################## ################# # Polynomial A6 # ################# ############################################################ # Subdivision of Dumbbell induced by the Grobner fan of A6 # ############################################################ # The following script computes the intersection of the Dumbbell cone with all maximal cells in the Grobner fan of A6. IntersectionsQDumbbellCone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = DumbbellCone.intersection(polyCone) IntersectionsQDumbbellCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQDumbbellCone.values()]) # {1, 2, 3, 4, 5, 6} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQDumbbellCone.keys() if dim(IntersectionsQDumbbellCone[i])==6] # print maxIntersections # [19] SubdivisionsOfDumbbellByQ = [IntersectionsQDumbbellCone[i] for i in maxIntersections] # print [len(SubdivisionsOfDumbbellByQ[i].rays()) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [5] # print [dim(SubdivisionsOfDumbbellByQ[i]) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [6] # No subdivision occurs! ################################################################ # Subdivision of Figure Eight induced by the Grobner fan of A6 # ################################################################ # The following script computes the intersection of the Figure Eight cone with all maximal cells in the Grobner fan of A6. IntersectionsQFigEightCone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = FigEightCone.intersection(polyCone) IntersectionsQFigEightCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQFigEightCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQFigEightCone.keys() if dim(IntersectionsQFigEightCone[i])==5] # print maxIntersections # [18, 19] SubdivisionsOfFigEightByQ = [IntersectionsQFigEightCone[i] for i in maxIntersections] # print [len(SubdivisionsOfFigEightByQ[i].rays()) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [4, 4] # print [dim(SubdivisionsOfFigEightByQ[i]) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [5, 5] # We check the three cells agree: # all([SubdivisionsOfFigEightByQ[i] == SubdivisionsOfFigEightByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ########################################################### # Subdivision of Type IV induced by the Grobner fan of A6 # ########################################################### # The following script computes the intersection of the Type IV cone with all maximal cells in the Grobner fan of A6. IntersectionsQTypeIVCone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = TypeIVCone.intersection(polyCone) IntersectionsQTypeIVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeIVCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeIVCone.keys() if dim(IntersectionsQTypeIVCone[i])==5] # print maxIntersections # [19] SubdivisionsOfTypeIVByQ = [IntersectionsQTypeIVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeIVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [4] # print [dim(SubdivisionsOfTypeIVByQ[i]) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [5] # No subdivision is produced. ########################################################## # Subdivision of Type V induced by the Grobner fan of A6 # ########################################################## # The following script computes the intersection of the Type V cone with all maximal cells in the Grobner fan of A6. IntersectionsQTypeVCone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = TypeVCone.intersection(polyCone) IntersectionsQTypeVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVCone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVCone.keys() if dim(IntersectionsQTypeVCone[i])==4] # print maxIntersections # [19] SubdivisionsOfTypeVByQ = [IntersectionsQTypeVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [3] # print [dim(SubdivisionsOfTypeVByQ[i]) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [4] # No subdivision is produced. ########################################################### # Subdivision of Type VI induced by the Grobner fan of A6 # ########################################################### # The following script computes the intersection of the Type VI cone with all maximal cells in the Grobner fan of A6. IntersectionsQTypeVICone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = TypeVICone.intersection(polyCone) IntersectionsQTypeVICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVICone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVICone.keys() if dim(IntersectionsQTypeVICone[i])==4] # print maxIntersections # [15, 18, 19] SubdivisionsOfTypeVIByQ = [IntersectionsQTypeVICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [3, 3, 3] # print [dim(SubdivisionsOfTypeVIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [4, 4, 4] # We check that these intersections are the same. We conclude there is no subdivision. # all( [SubdivisionsOfTypeVIByQ[i] == SubdivisionsOfTypeVIByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ############################################################ # Subdivision of Type VII induced by the Grobner fan of A6 # ############################################################ # The following script computes the intersection of the Type VII cone with all maximal cells in the Grobner fan of A6. IntersectionsQTypeVIICone = {} for i in range(0,len(PolyMaximalConesA6.keys())): # print str(i) polyCone =PolyMaximalConesA6[i] IntersectionQPolyCone = TypeVIICone.intersection(polyCone) IntersectionsQTypeVIICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVIICone.values()]) # {1, 2, 3} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVIICone.keys() if dim(IntersectionsQTypeVIICone[i])==3] # print maxIntersections # [12, 14, 15, 17, 18, 19] SubdivisionsOfTypeVIIByQ = [IntersectionsQTypeVIICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [2, 2, 2, 2, 2, 2] # print [dim(SubdivisionsOfTypeVIIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [3, 3, 3, 3, 3, 3] # We check that these intersections are the same. We conclude there is no subdivision. # all( [SubdivisionsOfTypeVIIByQ[i] == SubdivisionsOfTypeVIIByQ[j] for i in range(0,len(maxIntersections)-1) for j in range(i+1,len(maxIntersections))]) # True # No subdivision is produced. ############################################################################# # CONCLUSION: No subdivisions are produced for A6. ############################################################################## ################## # Polynomial A12 # ################## ############################################################# # Subdivision of Dumbbell induced by the Grobner fan of A12 # ############################################################# # The following script computes the intersection of the Dumbbell cone with all maximal cells in the Grobner fan of A12. IntersectionsQDumbbellCone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = DumbbellCone.intersection(polyCone) IntersectionsQDumbbellCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQDumbbellCone.values()]) # {1, 2, 3, 4, 5, 6} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQDumbbellCone.keys() if dim(IntersectionsQDumbbellCone[i])==6] # print maxIntersections # [29] SubdivisionsOfDumbbellByQ = [IntersectionsQDumbbellCone[i] for i in maxIntersections] # print [len(SubdivisionsOfDumbbellByQ[i].rays()) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [5] # print [dim(SubdivisionsOfDumbbellByQ[i]) for i in range(0,len(SubdivisionsOfDumbbellByQ))] # [6] # No subdivision occurs! ################################################################# # Subdivision of Figure Eight induced by the Grobner fan of A12 # ################################################################# # The following script computes the intersection of the Figure Eight cone with all maximal cells in the Grobner fan of A12. IntersectionsQFigEightCone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = FigEightCone.intersection(polyCone) IntersectionsQFigEightCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQFigEightCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQFigEightCone.keys() if dim(IntersectionsQFigEightCone[i])==5] # print maxIntersections # [29] SubdivisionsOfFigEightByQ = [IntersectionsQFigEightCone[i] for i in maxIntersections] # print [len(SubdivisionsOfFigEightByQ[i].rays()) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [4] # print [dim(SubdivisionsOfFigEightByQ[i]) for i in range(0,len(SubdivisionsOfFigEightByQ))] # [5] # No subdivision is produced. ############################################################ # Subdivision of Type IV induced by the Grobner fan of A12 # ############################################################ # The following script computes the intersection of the Type IV cone with all maximal cells in the Grobner fan of A12. IntersectionsQTypeIVCone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = TypeIVCone.intersection(polyCone) IntersectionsQTypeIVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeIVCone.values()]) # {1, 2, 3, 4, 5} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeIVCone.keys() if dim(IntersectionsQTypeIVCone[i])==5] # print maxIntersections # [29] SubdivisionsOfTypeIVByQ = [IntersectionsQTypeIVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeIVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [4] # print [dim(SubdivisionsOfTypeIVByQ[i]) for i in range(0,len(SubdivisionsOfTypeIVByQ))] # [5] # No subdivision is produced. ########################################################### # Subdivision of Type V induced by the Grobner fan of A12 # ########################################################### # The following script computes the intersection of the Type V cone with all maximal cells in the Grobner fan of A12. IntersectionsQTypeVCone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = TypeVCone.intersection(polyCone) IntersectionsQTypeVCone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVCone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVCone.keys() if dim(IntersectionsQTypeVCone[i])==4] # print maxIntersections # [29] SubdivisionsOfTypeVByQ = [IntersectionsQTypeVCone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [3] # print [dim(SubdivisionsOfTypeVByQ[i]) for i in range(0,len(SubdivisionsOfTypeVByQ))] # [4] # No subdivision is produced. ############################################################ # Subdivision of Type VI induced by the Grobner fan of A12 # ############################################################ # The following script computes the intersection of the Type VI cone with all maximal cells in the Grobner fan of A12. IntersectionsQTypeVICone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = TypeVICone.intersection(polyCone) IntersectionsQTypeVICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVICone.values()]) # {1, 2, 3, 4} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVICone.keys() if dim(IntersectionsQTypeVICone[i])==4] # print maxIntersections # [29] SubdivisionsOfTypeVIByQ = [IntersectionsQTypeVICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [3] # print [dim(SubdivisionsOfTypeVIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIByQ))] # [4] # No subdivision is produced. ############################################################# # Subdivision of Type VII induced by the Grobner fan of A12 # ############################################################# # The following script computes the intersection of the Type VII cone with all maximal cells in the Grobner fan of A12. IntersectionsQTypeVIICone = {} for i in range(0,len(PolyMaximalConesA12.keys())): # print str(i) polyCone =PolyMaximalConesA12[i] IntersectionQPolyCone = TypeVIICone.intersection(polyCone) IntersectionsQTypeVIICone[i] = IntersectionQPolyCone set([dim(x) for x in IntersectionsQTypeVIICone.values()]) # {1, 2, 3} # We record those intersection of maximal dimension, i.e. the dimension of the Theta Cone. maxIntersections = [i for i in IntersectionsQTypeVIICone.keys() if dim(IntersectionsQTypeVIICone[i])==3] # print maxIntersections # [29] SubdivisionsOfTypeVIIByQ = [IntersectionsQTypeVIICone[i] for i in maxIntersections] # print [len(SubdivisionsOfTypeVIIByQ[i].rays()) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [2] # print [dim(SubdivisionsOfTypeVIIByQ[i]) for i in range(0,len(SubdivisionsOfTypeVIIByQ))] # [3] # No subdivision is produced. ############################################################################# # CONCLUSION: No subdivisions are produced for A12. ##############################################################################