sage: Y = Resolve(X)Now we can compute various invariants. Eg,
sage: X.componentGroup(2) ... [1, 3]The returned answer, [1,3] specifies that the component group of the Neron model of the Jacobian is isomorphic to ℤ/3ℤ.
This software is written using the free mathematics software Sage and Macaulay2. For some applications, examples, and algorithms see below. If you are aware of other applications please send me an email.
Input: Arbitrary equations defining a smooth, proper and geometrically irreducible curve over the rationals, ℚ.
Output: Equations defining a regular model of the same curve
over the integers, ℤ. That is, a regular scheme $X$, proper
and faithfully flat over ℤ with generic fiber isomorphic to
the given one.
ResSing is designed to be highly multi-tasking and the user can specify it to operate differently if he/she has access to a server with e.g. 10 processors.
When you ask ResSing to compute a regular model we call a number of instances of Macaulay2 to preform various computations. All intensive computations are carried out by instances of Macaulay2. If Macaulay2 computes a groebner basis then we save those computations and pass these results to additional instances of Macaulay2.
The program is highly customizable. See the file "config.py" for various options (also documented there). By default, the program is configured for ResSing to run on a laptop.
sage: X = EC(0,1) Elliptic Curve with defining polynomial -x^3 + y^2*z - z^3.Cremona Label = 36a1 Initializing ResolveScheme from projective variety. Note: we assume that the given projective variety defines a 2-dimensional integral scheme faithfully flat over ZZ. Trimmed 1 of 3 charts. Removed 0 relations from chart U0 1 remain. Trimmed 2 of 3 charts. Removed 0 relations from chart U1 1 remain. Trimmed 3 of 3 charts. Removed 0 relations from chart U2 1 remain. Removing redundant charts ... Removed 1 charts, 2 charts remain! ... done
sage: Y = Resolve(X) ... ------------------------------------------- ResolveScheme and groebner bases saved to /tmp/tmpHiWZfj/step-1.RS load with the importRS(*) function DONE. Updating saved groebner basis calculations ... ResolveScheme and groebner bases saved to /tmp/tmpHiWZfj/step-REGULAR.RS load with the importRS(*) function done. Computed Groebner Bases: ------------------------------------------- Computed 100 groebner bases 72 for Polynomial Rings and 28 for quotient rings. Computed by: {'rad': 16, 'linearCombination': 2, 'ringMap+simplify': 2, 'dimFiberComponent': 17, 'trimRS': 4, 'BlowUpChart': 6, 'redundantCharts': 5, 'minMapsRS': 25, 'trim-regularPoint': 4, 'nonFreeLocus': 16, 'minRingMap': 3} Groebner bases computed over the base rings : {2: 25, 3: 24, 'ℤ': 51} Average number of sets of generators known (among those with more than one set known): 3.25000000000000 A total of 195 groebner bases were loaded. ------------------------------------------- Shutting down saveGomputedGB Saving all computed Groebner bases to /tmp/tmpHiWZfj/step-computeGB.GB
sage: Y.exportRS("/home/user/myScheme.RS") ResolveScheme and groebner bases saved to /home/user/myScheme.RS load with the importRS(*) function sage: importRS("/home/user/myScheme.RS") ...All groebner bases computations are automatically also saved to/loaded from the same file.
sage: Y.badprimes 6 sage: Y.chabautyBound(2) Computing non smooth locus. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Counting points ( total 5 charts): . . . . . Let J be the Jacobian of the curve X and p the given prime and g the genus. r = rank J(ℚ) Assume g >= 2, r < g, p > 2r + 2. Then, X(ℚ) <= 6 + 2r 6
sage: Y.fiberInformation(2, attempt_genus=True) Calculating ideal sheaves, 5 charts: . . . . . Number of prime components D_1, D_2, ... over the fiber at 2 : 3 Returning a list of ideal sheaves of irreducible components of the fiber with all non-reduced structure. The fiber over 2 is (1)*D_0 + (1)*D_1 + (1)*D_2 Returning a tuple [A,B] (of ideal sheaves (with non-reduced structure) and multiplicites): A = ['I_{(1)*D_0}', 'I_{(1)*D_1}', 'I_{(1)*D_2}'] B = [1, 1, 1] Computing intersection matrix: . . . Intersection Matrix: [-2 1 1] [ 1 -2 1] [ 1 1 -2] Genus... Warning: genus calculation may fail. Warning: genus calculation may fail. Warning: genus calculation may fail. Reduced... Smooth... ===============Key (Vertex/Sheaf of ideals)================== Vertex C0 Genus of reduced normalization: 0 Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -2 {'CHa2': ['a0', 'z*a1^3+z+1', '2'], 'CHa0': ['1'], 'CHa1': ['z*a2^3+a2^3+z', '2'], 'CHb1': ['z^2*a2^2+z*a2^2+z^2+z+1', '2'], 'CHb0': ['a1^3+a1*a2^2+a1^2+a2^2+a1', '2']} Vertex C1 Genus of reduced normalization: 0 Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -2 {'CHa2': ['a1', 'z+1', '2'], 'CHa0': ['a1', '2'], 'CHa1': ['1'], 'CHb1': ['1'], 'CHb0': ['1']} Vertex C2 Genus of reduced normalization: 0 Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -2 {'CHa2': ['a0+a1', 'z+1', '2'], 'CHa0': ['a1+1', '2'], 'CHa1': ['z+1', '2'], 'CHb1': ['1'], 'CHb0': ['1']} ===============Key (Vertex/Sheaf of ideals)================== ============================================================= Dual graph saved to DualGraph-BESLBfiber-2.png ============================================================= Returning elementary divisors... [1, 3] [ [{'CHa2': ['a0', 'z*a1^3+z+1', '2'], 'CHa0': ['1'], 'CHa1': ['z*a2^3+a2^3+z', '2'], 'CHb1': ['z^2*a2^2+z*a2^2+z^2+z+1', '2'], 'CHb0': ['a1^3+a1*a2^2+a1^2+a2^2+a1', '2']}, {'CHa2': ['a1', 'z+1', '2'], 'CHa0': ['a1', '2'], 'CHa1': ['1'], 'CHb1': ['1'], 'CHb0': ['1']}, {'CHa2': ['a0+a1', 'z+1', '2'], 'CHa0': ['a1+1', '2'], 'CHa1': ['z+1', '2'], 'CHb1': ['1'], 'CHb0': ['1']}], [-2 1 1] [ 1 -2 1] [1, 1, 1], [ 1 1 -2],As the program runs it prints out various pieces of information about it's progress, and what it is currently working on., [1, 3] ]
sage: X = ResolveScheme("x,y,z",['x^4 + y^4 - z^4'], message = "Fermat quartic: x^4 + y^4 - z^4") Initializing ResolveScheme from projective variety. Note: we assume that the given projective variety defines a 2-dimensional integral scheme faithfully flat over ℤ.
sage: X.isNormal() Computing badprimes... Computing Nonfree locus... done. done. Computing badprimes... Computing Nonfree locus... done. done. Computing badprimes... Computing Nonfree locus... done. done. Badprimes = 2 Checking if chart U0 is normal Checking if chart U1 is normal Checking if chart U2 is normal True sage: X.isRegular() Computing Nonfree locus... done. Checking regularity... ... False sage: X.isR1() #This must be true since X is normal. True
sage: X.irregLocusIdealSheaf() {'U0': ['2', 'x1+1', 'x0'], 'U1': ['x0', '2', 'x1+1'], 'U2': ['x0*x1 + x0 + x1 + 1', 'x1^2 + x1', '2', 'x0*x1']}If we wanted to compute the irregular locus only in a given open set then we can specify this via the "chart = " variable. Many functions accept this parameter.
sage: X.irregLocusIdealSheaf(chart = "U0") ['2', 'x1+1', 'x0']
sage: Y = Resolve(X)(or simply load a previously computed regular model) and print some information.
sage: runfile "/home/user/ResSing/main.sage" sage: X = importRS("/home/user/ResSing/Schemes/Fermat/FermatQuartic-REGULAR.RS") Loaded file. Fermat curve: x^4 + y^4 = z^4 (REGULAR) Loading groebner bases... Loaded 64 Groebner bases. #Give names of charts sage: X.CNames ['CHb0', 'CHb2', 'CHb3', 'CHa2'] #This function prints some information about the scheme (including information about each chart). sage: X.information() numcharts = 4 badprimes = 2 Names of charts = ['CHb0', 'CHb2', 'CHb3', 'CHa2'] Names of intersections = ['CHb3#CHa2', 'CHa2#CHb0', 'CHa2#CHb3', 'CHa2#CHb2', 'CHb2#CHb3', 'CHb2#CHb0', 'CHb3#CHb2', 'CHb2#CHa2', 'CHb0#CHb3', 'CHb0#CHb2', 'CHb3#CHb0', 'CHb0#CHa2'] ... #Print only information about the specifed chart. sage: X.information(chart = "CHb0") Open set CHb0 ________________________________ Coordinate ring is R = P/I with P = ℤ[ x0,x1,a0,a1,a2,a3] I = [a0 - 1, x1*a3 - x1 + a1 + a3, x0*x1*a3 - x0*x1 + x0*a3 + x1*a3 + a3, x0*x1*a2 + x0*a2 + x1*a2 + a2 - 2, x0*x1*a1 - x1^2*a3 - x1*a3, x0^3*a3 + x1^3*a3 - x0^3 - x1^3 + x0^2 + x1^2 - x0 - x1 + a3 + 1, x0^2*a3^2 + x1^2*a3^2 - 2*x0^2*a3 - 2*x1^2*a3 + x0^2 + x1^2 + 2*x0*a3 + 2*x1*a3 - a3^2 - 2*x0 - 2*x1 - 2*a2 + 3, x0*a3^3 + x1*a3^3 - 3*x0*a3^2 - 3*x1*a3^2 + a3^3 + a2^2 + 3*x0*a3 + 3*x1*a3 + 2*a2*a3 + a3^2 - x0 - x1 - 3*a2 - 5*a3 + 3, 2*a3^4 - a2^3 - 2*a2^2*a3 - 4*a2*a3^2 - 8*a3^3 + 3*a2^2 + 8*a2*a3 + 12*a3^2 - 4*a2 - 8*a3 + 2, x0*x1*a0 - x0*x1 + x0*a0 + x1*a0 - x0 - x1 + a0 - 1, x0*x1*a1 - x1^2 + x0*a1 + x1*a1 - x1 + a1, x0*x1*a2 + x0*a2 + x1*a2 + a2 - 2, x0*x1*a3 - x0*x1 + x0*a3 + x1*a3 + a3, x0^4 + x1^4 - 1] regular = True is_Normal = True is_R1 = ? True badprimes = 2 nonNormalR1 ------- codim2_sing ------- codim1_sing ------- ________________________________
sage: X.sanityCheck() Preforming basic sanity checks. (Only errors are reported)... Intersection of all pairs of charts known... CNames and INames calculated correctly ... irregLocusHints,irreg_locus calculated correctly... Localization maps are canonical (and of the form R[z]/(zf - 1)...) Checking R_1 property... Calculating ideal sheaves, 4 charts: . . . . There are 7 components over the fiber at 2 (total 28 ): . . . . . . . . . . . . . . . . . . Checking if the glueing conditions are satisfied: Checking that all maps exist as stated (total 24 ): . . . . . . . . . . . . . . . . . . . . . . . . Natural maps between interesections of two charts compose to the identity (total 12 ): . . . . . . . . . . . . Checking glueing conditions, that phi_ji(U_ji \cap U_jk) == U_ij \cap U_ik (total 24 ): . . . . . . . . . . . . . . . . . . . . . . . . Checking phi_ik = phi_jk \circ phi_ij as maps Uij \cap Uik ---> Uki \cap Ukj (total 24 ): * * * * * * * * * * * * * * * * * * * * * * * * Done.
#The only non-smooth fiber is over 2 sage: X.badprimes 2 sage: X.fiberInformation(2) Calculating ideal sheaves, 4 charts: . . . . Number of prime components D_1, D_2, ... over the fiber at 2 : 7 Returning a list of ideal sheaves of irreducible components of the fiber with all non-reduced structure. The fiber over 2 is (1)*D_0 + (2)*D_1 + (1)*D_2 + (2)*D_3 + (4)*D_4 + (1)*D_5 + (1)*D_6 Returning a tuple [A,B] (of ideal sheaves (with non-reduced structure) and multiplicites): A = ['I_{(1)*D_0}', 'I_{(2)*D_1}', 'I_{(1)*D_2}', 'I_{(2)*D_3}', 'I_{(4)*D_4}', 'I_{(1)*D_5}', 'I_{(1)*D_6}'] B = [1, 2, 1, 2, 4, 1, 1] Computing intersection matrix: . . . . . . . . . . . . . . . . . . . . . Intersection Matrix: [-3 1 0 0 0 1 0] [ 1 -3 0 0 1 1 0] [ 0 0 -3 1 0 0 1] [ 0 0 1 -3 1 0 1] [ 0 1 0 1 -1 0 0] [ 1 1 0 0 0 -3 0] [ 0 0 1 1 0 0 -3] Genus... Reduced... Ideal sheaf over CHb0 is different. Ideal sheaf over CHb0 is different. Ideal sheaf over CHb0 is different. Smooth... ===============Key (Vertex/Sheaf of ideals)================== Vertex C0 Genus of reduced normalization: Not Calculated Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -3 {'CHa2': ['1'], 'CHb3': ['a3+1', 'a1+1', 'a0+a2', 'x1', 'x0+1', '2'], 'CHb2': ['a2+1', 'a1+a3', 'a0+1', 'x1', 'x0+1', '2'], 'CHb0': ['a2+1', 'a1+a3', 'a0+1', 'x1', 'x0+1', '2']} Vertex C1 Genus of reduced normalization: Not Calculated Reduced: False Smooth radical: True Multiplicity: 2 Self-intersection: -3 {'CHa2': ['1'], 'CHb3': ['a3+1', 'x0+x1+a1', 'a2^2', 'a1*a2+a2', 'x1*a2', 'a1^2+1', 'x1*a1+x1', 'x1*a0+x1+a1+1', 'x1^2', 'a0^3*a1+a0^3+a0^2*a1+a0^2*a2+a0^2+a0*a1+a0+a1+1', '2'], 'CHb2': ['1'], 'CHb0': ['a0+1', 'x1*a3+x1+a1+a3', 'x0*a3+x1+a3', 'a2^2', 'x1*a2', 'x0*a2+a2', 'a1^2+a3^2', 'x1*a1+x1+a1+a3', 'x0*a1+x1+a1', 'x1^2', 'x0*x1+x1', 'x0^2+1', 'a1*a3^2+a3^3+a1*a3+a3^2+x0+x1+a1+a2+a3+1', 'a1*a2*a3+a2*a3^2', '2']} Vertex C2 Genus of reduced normalization: Not Calculated Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -3 {'CHa2': ['a2+1', 'a1+1', 'x1+1', 'x0', '2'], 'CHb3': ['a3+1', 'a1+a2', 'a0+a2', 'x1+1', 'x0', '2'], 'CHb2': ['a2+1', 'a1+1', 'a0+1', 'x1+1', 'x0', '2'], 'CHb0': ['a2+1', 'a1+1', 'a0+1', 'x1+1', 'x0', '2']} Vertex C3 Genus of reduced normalization: Not Calculated Reduced: False Smooth radical: True Multiplicity: 2 Self-intersection: -3 {'CHa2': ['a2+1', 'a1^2', 'x1*a1+a1', 'x0*a1', 'x1*a0+x0+a0', 'x1^2+1', 'x0*x1+x0', 'x0^2', 'x0*a0^3+x1+a1+1', '2'], 'CHb3': ['a3+1', 'a2^2', 'a0*a2+a1*a2', 'x1*a2+a2', 'x0*a2', 'x1*a1+x1+a0+1', 'x0*a1+x1+1', 'a0^2+a1^2', 'x1*a0+x1+a1+1', 'x0*a0+x1+1', 'x1^2+1', 'x0*x1+x0', 'x0^2', 'a0*a1^2+a1^3+a1^2*a2+a0*a1+a1^2+x0+x1+a0+a1+1', '2'], 'CHb2': ['1'], 'CHb0': ['a0+1', 'x0+x1+a1', 'x1*a3+x1+a1+a3', 'a2^2', 'a1*a2+a2', 'x1*a2+a2', 'a1^2+1', 'x1*a1+x1+a1+1', 'x1^2+1', 'a1*a3^3+a1*a3^2+a3^3+a1*a3+a3^2+a1+a2+a3+1', '2']} Vertex C4 Genus of reduced normalization: Not Calculated Reduced: False Smooth radical: True Multiplicity: 4 Self-intersection: -1 {'CHa2': ['a2+1', 'a1', 'x1*a0+x0+a0', 'a0^4+1', 'x0*a0^3+x1+1', 'x0^2*a0^2+x1^2+1', 'x0^3*a0+x1^3+x1^2+x1+1', 'x0^4+x1^4+1', '2'], 'CHb3': ['a3+1', 'a2', 'x0*a1+x1+1', 'x1*a0+x1+a1+1', 'a0*a1^2+a1^3+x0*a0+a0*a1+a1^2+x0+a0+a1', 'a1^4+1', 'a0^3*a1+a0^3+a0^2*a1+a0^2+a0*a1+a0+a1+1', 'x1^3*a1+x0^3+x1^2*a1+x1*a1+a1', 'a0^4+1', 'x0^2*a0^2+x0^2+a0^2+a1^2', 'x0^3*a0+x0^3+x1^2*a1+x1*a1^2+x0^2+x1*a1+a0*a1', 'x0^4+x1^4+1', '2'], 'CHb2': ['1'], 'CHb0': ['a2', 'a0+1', 'x1*a3+x1+a1+a3', 'x0*a1+x1+a1', 'a1^2*a3+x0*a3^2+a1*a3^2+a1^2+a1*a3+a3^2+x0+1', 'a3^4+1', 'a1*a3^3+a1*a3^2+a3^3+a1*a3+a3^2+a1+a3+1', 'x0*a3^3+x0*a3^2+a1*a3^2+x0*a3+a3^2+x0+a1+1', 'x0^3*a3+x0^3+x1^2*a1+x0^2+x1*a1+x0+a1+1', 'x0^4+x1^4+1', '2']} Vertex C5 Genus of reduced normalization: Not Calculated Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -3 {'CHa2': ['1'], 'CHb3': ['a3+1', 'a1+1', 'a0', 'x1', 'x0+1', '2'], 'CHb2': ['a2+1', 'a1+a3', 'a0', 'x1', 'x0+1', '2'], 'CHb0': ['1']} Vertex C6 Genus of reduced normalization: Not Calculated Reduced: True Smooth radical: True Multiplicity: 1 Self-intersection: -3 {'CHa2': ['1'], 'CHb3': ['a3+1', 'a1', 'a0', 'x1+1', 'x0', '2'], 'CHb2': ['a2+1', 'a1', 'a0', 'x1+1', 'x0', '2'], 'CHb0': ['1']} ===============Key (Vertex/Sheaf of ideals)================== ============================================================= Dual graph saved to DualGraph-BVQDsfiber-2.png ============================================================= Returning elementary divisors... [1, 1, 1, 1, 4, 4] [ [{'CHa2': ['1'], 'CHb3': ['a3+1', 'a1+1', 'a0+a2', 'x1', 'x0+1', '2'], 'CHb2': ['a2+1', 'a1+a3', 'a0+1', 'x1', 'x0+1', '2'], 'CHb0': ['a2+1', 'a1+a3', 'a0+1', 'x1', 'x0+1', '2']}, {'CHa2': ['1'], 'CHb3': ['a3+1', 'x0+x1+a1', 'a2^2', 'a1*a2+a2', 'x1*a2', 'a1^2+1', 'x1*a1+x1', 'x1*a0+x1+a1+1', 'x1^2', 'a0^3*a1+a0^3+a0^2*a1+a0^2*a2+a0^2+a0*a1+a0+a1+1', '2'], 'CHb2': ['1'], 'CHb0': ['a0+1', 'x1*a3+x1+a1+a3', 'x0*a3+x1+a3', 'a2^2', 'x1*a2', 'x0*a2+a2', 'a1^2+a3^2', 'x1*a1+x1+a1+a3', 'x0*a1+x1+a1', 'x1^2', 'x0*x1+x1', 'x0^2+1', 'a1*a3^2+a3^3+a1*a3+a3^2+x0+x1+a1+a2+a3+1', 'a1*a2*a3+a2*a3^2', '2']}, {'CHa2': ['a2+1', 'a1+1', 'x1+1', 'x0', '2'], 'CHb3': ['a3+1', 'a1+a2', 'a0+a2', 'x1+1', 'x0', '2'], 'CHb2': ['a2+1', 'a1+1', 'a0+1', 'x1+1', 'x0', '2'], 'CHb0': ['a2+1', 'a1+1', 'a0+1', 'x1+1', 'x0', '2']}, {'CHa2': ['a2+1', 'a1^2', 'x1*a1+a1', 'x0*a1', 'x1*a0+x0+a0', 'x1^2+1', 'x0*x1+x0', 'x0^2', 'x0*a0^3+x1+a1+1', '2'], 'CHb3': ['a3+1', 'a2^2', 'a0*a2+a1*a2', 'x1*a2+a2', 'x0*a2', 'x1*a1+x1+a0+1', 'x0*a1+x1+1', 'a0^2+a1^2', 'x1*a0+x1+a1+1', 'x0*a0+x1+1', 'x1^2+1', 'x0*x1+x0', 'x0^2', 'a0*a1^2+a1^3+a1^2*a2+a0*a1+a1^2+x0+x1+a0+a1+1', '2'], 'CHb2': ['1'], 'CHb0': ['a0+1', 'x0+x1+a1', 'x1*a3+x1+a1+a3', 'a2^2', 'a1*a2+a2', 'x1*a2+a2', 'a1^2+1', 'x1*a1+x1+a1+1', 'x1^2+1', 'a1*a3^3+a1*a3^2+a3^3+a1*a3+a3^2+a1+a2+a3+1', '2']}, {'CHa2': ['a2+1', 'a1', 'x1*a0+x0+a0', 'a0^4+1', 'x0*a0^3+x1+1', 'x0^2*a0^2+x1^2+1', 'x0^3*a0+x1^3+x1^2+x1+1', 'x0^4+x1^4+1', '2'], 'CHb3': ['a3+1', 'a2', 'x0*a1+x1+1', 'x1*a0+x1+a1+1', 'a0*a1^2+a1^3+x0*a0+a0*a1+a1^2+x0+a0+a1', 'a1^4+1', 'a0^3*a1+a0^3+a0^2*a1+a0^2+a0*a1+a0+a1+1', 'x1^3*a1+x0^3+x1^2*a1+x1*a1+a1', 'a0^4+1', 'x0^2*a0^2+x0^2+a0^2+a1^2', 'x0^3*a0+x0^3+x1^2*a1+x1*a1^2+x0^2+x1*a1+a0*a1', 'x0^4+x1^4+1', '2'], 'CHb2': ['1'], 'CHb0': ['a2', 'a0+1', 'x1*a3+x1+a1+a3', 'x0*a1+x1+a1', 'a1^2*a3+x0*a3^2+a1*a3^2+a1^2+a1*a3+a3^2+x0+1', 'a3^4+1', 'a1*a3^3+a1*a3^2+a3^3+a1*a3+a3^2+a1+a3+1', 'x0*a3^3+x0*a3^2+a1*a3^2+x0*a3+a3^2+x0+a1+1', 'x0^3*a3+x0^3+x1^2*a1+x0^2+x1*a1+x0+a1+1', 'x0^4+x1^4+1', '2']}, {'CHa2': ['1'], 'CHb3': ['a3+1', 'a1+1', 'a0', 'x1', 'x0+1', '2'], 'CHb2': ['a2+1', 'a1+a3', 'a0', 'x1', 'x0+1', '2'], 'CHb0': ['1']}, {'CHa2': ['1'], 'CHb3': ['a3+1', 'a1', 'a0', 'x1+1', 'x0', '2'], 'CHb2': ['a2+1', 'a1', 'a0', 'x1+1', 'x0', '2'], 'CHb0': ['1']}], [-3 1 0 0 0 1 0] [ 1 -3 0 0 1 1 0] [ 0 0 -3 1 0 0 1] [ 0 0 1 -3 1 0 1] [ 0 1 0 1 -1 0 0] [ 1 1 0 0 0 -3 0] [1, 2, 1, 2, 4, 1, 1], [ 0 0 1 1 0 0 -3],, [1, 1, 1, 1, 4, 4] ]
sage: X = importRS("/home/user/ResSing/Schemes/Modular/ModularCurve-X045.RS") Loaded file. Modular Curve X0(45), from "Defining Equations of Modular Curves X0(N)" by Mahoro Shimura Equation x^4 + y^4 + 81*z^4 - 2*x^2*y^2 - 2*x^2*z^2 - 18*y^2*z^2 - 16*x*y^2*z Loading groebner bases... Loaded 66 Groebner bases. sage: X.isNormal() Checking if chart U1 is normal Chart U1 is not normal False sage: X.isR1() Computing Nonfree locus... done. Checking regularity... P = Multivariate Polynomial Ring in x0, x1 over Integer Ring I = Ideal (x0^4 - 2*x0^2*x1^2 + 81*x1^4 - 2*x0^2 - 16*x0*x1 - 18*x1^2 + 1) of Multivariate Polynomial Ring in x0, x1 over Integer Ring m = ['x0 + x1 + 1', '2', 'x0^4 - 2*x0^2*x1^2 + 81*x1^4 - 2*x0^2 - 16*x0*x1 - 18*x1^2 + 1', '2'] base = ℤ done (dim m/m^2 = 2) False sage: Y = NormalizeScheme(X) ----------------------------------- Normalized affine scheme with coordinate ring R = P/I P = ℤ ['x0', 'x1'] I = ['x0^4 - 2*x0^2*x1^2 + 81*x1^4 - 2*x0^2 - 16*x0*x1 - 18*x1^2 + 1'] Added 1 fractions: (x0 + x1 + 1) / (2) (x0) / (1) (x1) / (1) Normalization of affine scheme completed. Total time: 0.384817 ----------------------------------- ----------------------------------- Normalized affine scheme with coordinate ring R = P/I P = ℤ ['x0', 'x1'] I = ['x0^4 - 2*x0^2*x1^2 + x1^4 - 16*x0*x1^2 - 2*x0^2 - 18*x1^2 + 81'] Added 1 fractions: (x0 + x1 + 1) / (2) (x0) / (1) (x1) / (1) Normalization of affine scheme completed. Total time: 0.38311 ----------------------------------- Done calculating normalizations of rings. Need to compute expression for 2 fractions in other chart. Solving for 1 fractions: . Solving for 1 fractions: . 100.000000000000 % done calculating glueing maps. sage: Y.isNormal() Checking if chart U1 is normal Checking if chart U2 is normal True
sage: X = importRS("/home/user/Desktop/Math/Dropbox/code/ResSing/Schemes/Shimura26/Shimura26-singular.RS") Loaded file. Shimura curve of discriminant 26 over Q (Kurihara) Loading groebner bases... Loaded 0 Groebner bases. sage: X.badprimes 26 ################################### The function X.ignorePrimesOutside() affects the irregular locus calculation. See documentation of this function for details. This is different from the base change over Z[1/n], which can be constructed via the X.invert(n) function. ################################### sage: X.ignorePrimesOutside(13) sage: X.irregLocusIdealSheaf() Computing Nonfree locus... done. Computing Nonfree locus... done. Checking regularity... P = Multivariate Polynomial Ring in x, y over Integer Ring I = Ideal (169*x^6 + 24*x^4 - 19*x^2 + y^2 + 2) of Multivariate Polynomial Ring in x, y over Integer Ring m = ['y', 'x^2 - 5', '13', '169*x^6 + 24*x^4 - 19*x^2 + y^2 + 2', '13'] base = ℤ done (dim m/m^2 = 3) done. Computing Nonfree locus... done. Computing Nonfree locus... done. Checking regularity... P = Multivariate Polynomial Ring in a, b over Integer Ring I = Ideal (2*a^6 - 19*a^4 + 24*a^2 + b^2 + 169) of Multivariate Polynomial Ring in a, b over Integer Ring m = ['b', 'a^2 + 5', '13', '2*a^6 - 19*a^4 + 24*a^2 + b^2 + 169', '13'] base = ℤ done (dim m/m^2 = 3) Checking regularity... P = Multivariate Polynomial Ring in a, b over Integer Ring I = Ideal (2*a^6 - 19*a^4 + 24*a^2 + b^2 + 169) of Multivariate Polynomial Ring in a, b over Integer Ring m = ['b', 'a', '13', '2*a^6 - 19*a^4 + 24*a^2 + b^2 + 169', '13'] base = ℤ done (dim m/m^2 = 3) done. Computing Nonfree locus... done. Computing Nonfree locus... done. {'U': ['13', '-y', '-x^2 + 5'], 'V': ['a^3+5*a', '13', 'b']} ################################### Now blow up this ideal sheaf and check if the resulting scheme is regular (note we are ignoring irregular points over the prime 2) ################################### sage: Y = X.BlowUp({'U': ['13', '-y', '-x^2 + 5'], 'V': ['a^3+5*a', '13', 'b']}) Will blow up ideal sheaf = {'U': ['13', '-y', '-x^2 + 5'], 'V': ['a^3+5*a', '13', 'b']} ----------------------------------- Blowing up affine scheme CHa with coordinate ring R = P/I P = ℤ ['x', 'y'] I = ['169*x^6 + 24*x^4 - 19*x^2 + y^2 + 2'] At ideal : ['13', '-y', '-x^2 + 5'] ----------------------------------- Will compute glueing maps for 1 pairs of blowups. 1 of 3 charts for BlowUp_Affine(CHa ) completed: CHa0 completed. 2 of 3 charts for BlowUp_Affine(CHa ) completed: CHa1 completed. 3 of 3 charts for BlowUp_Affine(CHa ) completed: CHa2 completed. Affine charts of blow up of CHa calculated in 0.00002 hours. Calculating affine glueing maps... ########Blow up of affine scheme CHa completed in 0.00003 hours. ######## ----------------------------------- Blowing up affine scheme CHb with coordinate ring R = P/I P = ℤ ['a', 'b'] I = ['2*a^6 - 19*a^4 + 24*a^2 + b^2 + 169'] At ideal : ['a^3+5*a', '13', 'b'] ----------------------------------- 1 of 3 charts for BlowUp_Affine(CHb ) completed: CHb0 completed. 2 of 3 charts for BlowUp_Affine(CHb ) completed: CHb1 completed. 3 of 3 charts for BlowUp_Affine(CHb ) completed: CHb2 completed. Affine charts of blow up of CHb calculated in 0.00002 hours. Calculating affine glueing maps... ########Blow up of affine scheme CHb completed in 0.00003 hours. ######## Calculated linear combinations for U , V , minimizing... Constructing open sets and glueing maps... Calculated glueing maps for (V chart 1 of 3 ) with (U chart 1 of 3 ) Calculated glueing maps for (V chart 1 of 3 ) with (U chart 3 of 3 ) Calculated glueing maps for (V chart 1 of 3 ) with (U chart 2 of 3 ) Calculated glueing maps for (V chart 2 of 3 ) with (U chart 1 of 3 ) Calculated glueing maps for (V chart 2 of 3 ) with (U chart 2 of 3 ) Calculated glueing maps for (V chart 2 of 3 ) with (U chart 3 of 3 ) Calculated glueing maps for (V chart 3 of 3 ) with (U chart 1 of 3 ) Calculated glueing maps for (V chart 3 of 3 ) with (U chart 2 of 3 ) Calculated glueing maps for (V chart 3 of 3 ) with (U chart 3 of 3 ) len(computedGB), finished calculating glueing, we calculated 4 new groebner bases. 100.000000000000 % done calculating glueing maps. <__main__.ResolveScheme instance at 0x7670248> sage: Y.isRegular() Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. Computing Nonfree locus... done. TrueWe calculated a regular model of this shimura curve (as a scheme over Z[1/13]). You can load this model by
sage X = importRS("/home/user/ResSing/Schemes/Shimura26/Shimura26-inv2-REGULAR.RS") Loaded file. Loading groebner bases... Loaded 62 Groebner bases.
sage: X.trim(?Simplify the presentation of self by removing redundant charts, trimming the presentation of each of the coordinate rings and the presentation of isomorphisms between the rings. This function replaces self with a trimmed copy and then returns. if compute == True we compute groebner bases with respect to the elimination ordering for the chart specified via chart (and all charts if none is specified.) if compute == False then don't compute any elimination order groebner bases, and more simply try to remove relations.
sage: X. (and press the tab key)This prints
sage: X. X.BlowUp X.chabautyBound X.genericFiberSmooth X.irregLocus X.nonSmoothLocus X.sanityCheck X.CNames X.chart X.genericGenus X.irregLocusHints X.normal X.singularities X.G X.complement X.genus X.irregLocusIdealSheaf X.numcharts X.smoothComponent X.INames X.componentGroup X.glueingConditions X.irreg_locus X.ord X.trim X.Lelement X.components X.hyperelliptic X.isNormal X.pickle X.twoCharts X.Lname X.computeGB X.ignorePrimesOutside X.isR1 X.projVar X.values X.Normalize X.deleteNode X.information X.isRegular X.r1 X.zetaSeries X.addLocalization X.dimension X.initvars X.macaulay2 X.rad X.affineScheme X.disjointUnion X.intersection X.map X.reducedFibers X.badprimes X.equality X.intersectionMatrix X.message X.redundantChart X.calculatedNormalLocus X.exportRS X.intersectionNumber X.nonSmoothFibers X.regular X.calculatedSingLocus X.fiberInformation X.invert X.nonSmoothIdealSheaf X.rmapNow you can see the documentation for any of these functions via the usual method. Eg, typing
sage: X.zetaSeries(?and pressing enterType: instancemethod String Form:> File: Dynamically generated function. No source code available. Definition: X.zetaSeries(self, p, n, ideals=None) Docstring: Compute the zeta function of the fiber of the ResolveScheme self at the prime p. The first n terms of the zeta series are returned as a power series in u. p >1 is a prime integer, and n is an integer. t is a string. if ideals is a specified sheaf of ideals supported over the prime p, then compute the zeta function of the scheme it defines.
#Number of processes to use (values larger than 1 consume alot of memory). (excluding solving for fractions in normalization) num_processes = 1 #Number of threads to use in quick part of BlowUp routine. num_glueTwoChartsBL = 5 #Number of processes to use for solving fractions. Must be at least 1, else normalizaton will hang. num_solve_fracs = 5 #Number of charts to simultaneously blow up. Must be at least 1. num_charts_blowup = 1They are all self-documented in "config.py". The main number a user (with access to many processors) will want to increase is "num_processors". If normalization or blowing up is slow (and the computer still has available resources) then the user could try increasing num_solve_fracs (for normalization) or num_glueTwoChartsBL and num_charts_blowup (for blowups) respectively.