Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gap-singular for openSUSE:Factory checked in at 2026-04-15 16:04:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gap-singular (Old) and /work/SRC/openSUSE:Factory/.gap-singular.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gap-singular" Wed Apr 15 16:04:38 2026 rev:4 rq:1346891 version:2026.04.09 Changes: -------- --- /work/SRC/openSUSE:Factory/gap-singular/gap-singular.changes 2025-08-28 17:18:57.863959477 +0200 +++ /work/SRC/openSUSE:Factory/.gap-singular.new.21863/gap-singular.changes 2026-04-15 16:06:33.807914819 +0200 @@ -1,0 +2,6 @@ +Tue Apr 14 13:47:14 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 2026.04.09 + * Janitorial changes only + +------------------------------------------------------------------- Old: ---- singular-2025.08.26.tar.gz New: ---- singular-2026.04.09.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gap-singular.spec ++++++ --- /var/tmp/diff_new_pack.WPk0lr/_old 2026-04-15 16:06:36.012005445 +0200 +++ /var/tmp/diff_new_pack.WPk0lr/_new 2026-04-15 16:06:36.024005939 +0200 @@ -1,7 +1,7 @@ # # spec file for package gap-singular # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: gap-singular -Version: 2025.08.26 +Version: 2026.04.09 Release: 0 Summary: GAP: An interface to Singular License: GPL-2.0-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.WPk0lr/_old 2026-04-15 16:06:36.404021564 +0200 +++ /var/tmp/diff_new_pack.WPk0lr/_new 2026-04-15 16:06:36.436022880 +0200 @@ -1,5 +1,5 @@ -mtime: 1756341137 -commit: 8bb308c3b4a578d726de98628b64c019708e6a126edcef0c58bd58e6c915cf85 +mtime: 1776174449 +commit: e361843e11acbd3ea427b752c5053e2c7cfaa2582d78e5b325ea8450a632899a url: https://src.opensuse.org/jengelh/gap-singular revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-04-14 15:47:37.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ singular-2025.08.26.tar.gz -> singular-2026.04.09.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/CHANGES.md new/singular-2026.04.09/CHANGES.md --- old/singular-2025.08.26/CHANGES.md 2025-08-26 15:36:32.000000000 +0200 +++ new/singular-2026.04.09/CHANGES.md 2026-04-09 02:00:00.000000000 +0200 @@ -1,5 +1,8 @@ This file describes changes in the GAP package `singular`. +- 2026.04.09 + - janitorial changes + - 2025.08.26 - Add support for bigint, bigintvec, and bigintmat (contributed by Jerry James) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/PackageInfo.g new/singular-2026.04.09/PackageInfo.g --- old/singular-2025.08.26/PackageInfo.g 2025-08-26 15:36:32.000000000 +0200 +++ new/singular-2026.04.09/PackageInfo.g 2026-04-09 02:00:00.000000000 +0200 @@ -11,7 +11,7 @@ SetPackageInfo( rec( PackageName := "singular", Subtitle := "A GAP interface to Singular", -Version := "2025.08.26", +Version := "2026.04.09", Date := Concatenation( ~.Version{[ 9, 10 ]}, "/", ~.Version{[ 6, 7 ]}, "/", ~.Version{[ 1 .. 4 ]} ), License := "GPL-2.0-or-later", @@ -88,6 +88,7 @@ GAP := ">=4.8", NeededOtherPackages := [ ], SuggestedOtherPackages := [ ], + NeededSystemPackages := rec( Ubuntu := [["singular"]], Homebrew := [["singular"]] ), ExternalConditions := [ ["Requires the computer algebra system Singular", "https://www.singular.uni-kl.de/"] ] ), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/README.md new/singular-2026.04.09/README.md --- old/singular-2025.08.26/README.md 2025-08-26 15:36:32.000000000 +0200 +++ new/singular-2026.04.09/README.md 2026-04-09 02:00:00.000000000 +0200 @@ -1,4 +1,4 @@ -[](https://github.com/gap-packages/singular/actions?query=workflow%3ACI+branch%3Amaster) +[](https://github.com/gap-packages/singular/actions/workflows/CI.yml) [](https://codecov.io/gh/gap-packages/singular) # singular: a GAP interface to Singular diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/chap0.html new/singular-2026.04.09/doc/chap0.html --- old/singular-2025.08.26/doc/chap0.html 2025-08-27 16:45:28.000000000 +0200 +++ new/singular-2026.04.09/doc/chap0.html 2026-04-09 02:00:00.000000000 +0200 @@ -29,10 +29,10 @@ <h2>A <strong class="pkg">GAP</strong> interface to Singular</h2> <p> - 2025.08.26</p> + 2026.04.09</p> <p> - 26 August 2025 + 9 April 2026 </p> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/chap0.txt new/singular-2026.04.09/doc/chap0.txt --- old/singular-2025.08.26/doc/chap0.txt 2025-08-27 16:45:24.000000000 +0200 +++ new/singular-2026.04.09/doc/chap0.txt 2026-04-09 02:00:00.000000000 +0200 @@ -6,10 +6,10 @@ [1X A [5XGAP[105X interface to Singular [101X - 2025.08.26 + 2026.04.09 - 26 August 2025 + 9 April 2026 Marco Costantini diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/chap0_mj.html new/singular-2026.04.09/doc/chap0_mj.html --- old/singular-2025.08.26/doc/chap0_mj.html 2025-08-27 16:45:28.000000000 +0200 +++ new/singular-2026.04.09/doc/chap0_mj.html 2026-04-09 02:00:00.000000000 +0200 @@ -32,10 +32,10 @@ <h2>A <strong class="pkg">GAP</strong> interface to Singular</h2> <p> - 2025.08.26</p> + 2026.04.09</p> <p> - 26 August 2025 + 9 April 2026 </p> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/chap1.html new/singular-2026.04.09/doc/chap1.html --- old/singular-2025.08.26/doc/chap1.html 2025-08-27 16:45:28.000000000 +0200 +++ new/singular-2026.04.09/doc/chap1.html 2026-04-09 02:00:00.000000000 +0200 @@ -227,9 +227,9 @@ <h5>1.2-3 <span class="Heading">Installing the package <strong class="pkg">singular</strong></span></h5> -<p>The package <strong class="pkg">singular</strong> is installed and loaded as a normal <strong class="pkg">GAP</strong> package: see the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap76_mj.html#X82473E4B8756C6CD"><span class="RefLink">Reference: Installing a GAP Package</span></a> and <a href="../../../doc/ref/chap76_mj.html#X825CBC5B86F8F811"><span class="RefLink">Reference: Loading a GAP Package</span></a>.</p> +<p>The package <strong class="pkg">singular</strong> is installed and loaded as a normal <strong class="pkg">GAP</strong> package: see the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap76.html#X82473E4B8756C6CD"><span class="RefLink">Reference: Installing a GAP Package</span></a> and <a href="../../../doc/ref/chap76.html#X825CBC5B86F8F811"><span class="RefLink">Reference: Loading a GAP Package</span></a>.</p> -<p>Starting with version 4.4 of <strong class="pkg">GAP</strong>, the package <strong class="pkg">singular</strong> is distributed together with <strong class="pkg">GAP</strong>. Hence, if <strong class="pkg">GAP</strong> is already installed with all the distributed packages, then also the package <strong class="pkg">singular</strong> is installed. However, if the package <strong class="pkg">singular</strong> is not included in your <strong class="pkg">GAP</strong> installation, it can be downloaded and unpacked in the <code class="file">pkg/</code> directory of the <strong class="pkg">GAP</strong> installation. If you don't have write access to the <code class="file">pkg/</code> directory in your main <strong class="pkg">GAP</strong> installation you can use private directories as explained in the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap9_mj.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>. The package <s trong class="pkg">singular</strong> doesn't require compilation.</p> +<p>Starting with version 4.4 of <strong class="pkg">GAP</strong>, the package <strong class="pkg">singular</strong> is distributed together with <strong class="pkg">GAP</strong>. Hence, if <strong class="pkg">GAP</strong> is already installed with all the distributed packages, then also the package <strong class="pkg">singular</strong> is installed. However, if the package <strong class="pkg">singular</strong> is not included in your <strong class="pkg">GAP</strong> installation, it can be downloaded and unpacked in the <code class="file">pkg/</code> directory of the <strong class="pkg">GAP</strong> installation. If you don't have write access to the <code class="file">pkg/</code> directory in your main <strong class="pkg">GAP</strong> installation you can use private directories as explained in the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap9.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>. The package <stro ng class="pkg">singular</strong> doesn't require compilation.</p> <p><a id="X8229A3C4793932BA" name="X8229A3C4793932BA"></a></p> @@ -290,7 +290,7 @@ <h4>1.3 <span class="Heading">Interaction with <strong class="pkg">Singular</strong></span></h4> -<p>The user must load the package <strong class="pkg">singular</strong> with <code class="func">LoadPackage</code> (<a href="../../../doc/ref/chap76_mj.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>).</p> +<p>The user must load the package <strong class="pkg">singular</strong> with <code class="func">LoadPackage</code> (<a href="../../../doc/ref/chap76.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>).</p> <p><a id="X79C5E6F27C37DA10" name="X79C5E6F27C37DA10"></a></p> @@ -370,7 +370,7 @@ </ul> <p>For some example see those for the function <code class="func">SetTermOrdering</code> (<a href="chap1.html#X813A17AF85BFACB9"><span class="RefLink">1.3-5</span></a>).</p> -<p>Let us remember that <var class="Arg">CyclotomicField</var> and <var class="Arg">GaloisField</var> can be abbreviated respectively to <var class="Arg">CF</var> and <var class="Arg">GF</var>; these forms are used also when <strong class="pkg">GAP</strong> prints cyclotomic or Galois fields. See the <strong class="pkg">GAP</strong> documentation about the functions: <code class="func">CyclotomicField</code> (<a href="../../../doc/ref/chap60_mj.html#X80D21D80850EFA4B"><span class="RefLink">Reference: CyclotomicField for (subfield and) conductor</span></a>), <code class="func">GaloisField</code> (<a href="../../../doc/ref/chap59_mj.html#X8592DBB086A8A9BE"><span class="RefLink">Reference: GaloisField for field size</span></a>), <code class="func">AlgebraicExtension</code> (<a href="../../../doc/ref/chap67_mj.html#X7CDA90537D2BAC8A"><span class="RefLink">Reference: AlgebraicExtension</span></a>), and the chapters: <a href="../../../doc/ref/chap17_mj.html#X87003045878E74DF"><span class= "RefLink">Reference: Rational Numbers</span></a>, <a href="../../../doc/ref/chap60_mj.html#X80510B5880521FDC"><span class="RefLink">Reference: Abelian Number Fields</span></a>, <a href="../../../doc/ref/chap59_mj.html#X7893ABF67A028802"><span class="RefLink">Reference: Finite Fields</span></a>, <a href="../../../doc/ref/chap67_mj.html#X85732CEF7ECFCA68"><span class="RefLink">Reference: Algebraic extensions of fields</span></a>.</p> +<p>Let us remember that <var class="Arg">CyclotomicField</var> and <var class="Arg">GaloisField</var> can be abbreviated respectively to <var class="Arg">CF</var> and <var class="Arg">GF</var>; these forms are used also when <strong class="pkg">GAP</strong> prints cyclotomic or Galois fields. See the <strong class="pkg">GAP</strong> documentation about the functions: <code class="func">CyclotomicField</code> (<a href="../../../doc/ref/chap60.html#X80D21D80850EFA4B"><span class="RefLink">Reference: CyclotomicField for (subfield and) conductor</span></a>), <code class="func">GaloisField</code> (<a href="../../../doc/ref/chap59.html#X8592DBB086A8A9BE"><span class="RefLink">Reference: GaloisField for field size</span></a>), <code class="func">AlgebraicExtension</code> (<a href="../../../doc/ref/chap67.html#X7CDA90537D2BAC8A"><span class="RefLink">Reference: AlgebraicExtension</span></a>), and the chapters: <a href="../../../doc/ref/chap17.html#X87003045878E74DF"><span class="RefLink">Re ference: Rational Numbers</span></a>, <a href="../../../doc/ref/chap60.html#X80510B5880521FDC"><span class="RefLink">Reference: Abelian Number Fields</span></a>, <a href="../../../doc/ref/chap59.html#X7893ABF67A028802"><span class="RefLink">Reference: Finite Fields</span></a>, <a href="../../../doc/ref/chap67.html#X85732CEF7ECFCA68"><span class="RefLink">Reference: Algebraic extensions of fields</span></a>.</p> <p><a id="X813A17AF85BFACB9" name="X813A17AF85BFACB9"></a></p> @@ -384,9 +384,9 @@ <p>If this value is a list, it must be of the form <var class="Arg">[ str_1, d_1, str_2, d_2, ... ]</var>, where each <var class="Arg">str_i</var> is a <strong class="pkg">Singular</strong> ordering given as a string. Each <var class="Arg">d_i</var> must be a number, and specifies the number of variables having that ordering; however, if <var class="Arg">str_i</var> is a weighted order, like <var class="Arg">"wp"</var> (weighted reverse lexicographical ordering) or <var class="Arg">"Wp"</var> (weighted lexicographical ordering), then the corresponding <var class="Arg">d_i</var> must be a list of positive integers that specifies the weight of each variable. The sum of the <var class="Arg">d_i</var>'s (if numbers) or of their lengths (if lists) must be equal to the number of variables of the ring <var class="Arg">R</var>.</p> -<p>This value can also be a monomial ordering of <strong class="pkg">GAP</strong>: currently supported are <var class="Arg">MonomialLexOrdering</var>, <var class="Arg">MonomialGrevlexOrdering</var>, and <var class="Arg">MonomialGrlexOrdering</var> <a href="../../../doc/ref/chap66_mj.html#X86E2ADEA784AD163"><span class="RefLink">Reference: Monomial Orderings</span></a>.</p> +<p>This value can also be a monomial ordering of <strong class="pkg">GAP</strong>: currently supported are <var class="Arg">MonomialLexOrdering</var>, <var class="Arg">MonomialGrevlexOrdering</var>, and <var class="Arg">MonomialGrlexOrdering</var> <a href="../../../doc/ref/chap66.html#X86E2ADEA784AD163"><span class="RefLink">Reference: Monomial Orderings</span></a>.</p> -<p><var class="Arg">TermOrdering</var> is a mutable attribute, see the <strong class="pkg">GAP</strong> documentation of <code class="func">DeclareAttribute</code> (<a href="../../../doc/ref/chap13_mj.html#X7A00FC8A7A677A56"><span class="RefLink">Reference: DeclareAttribute</span></a>); if it is changed on the <strong class="pkg">GAP</strong> side, it is necessary thereafter to send again the ring to <strong class="pkg">Singular</strong> with <code class="func">SingularSetBaseRing</code> (<a href="chap1.html#X84A3CD498011A10C"><span class="RefLink">1.3-6</span></a>).</p> +<p><var class="Arg">TermOrdering</var> is a mutable attribute, see the <strong class="pkg">GAP</strong> documentation of <code class="func">DeclareAttribute</code> (<a href="../../../doc/ref/chap13.html#X7A00FC8A7A677A56"><span class="RefLink">Reference: DeclareAttribute</span></a>); if it is changed on the <strong class="pkg">GAP</strong> side, it is necessary thereafter to send again the ring to <strong class="pkg">Singular</strong> with <code class="func">SingularSetBaseRing</code> (<a href="chap1.html#X84A3CD498011A10C"><span class="RefLink">1.3-6</span></a>).</p> <p><var class="Arg">SetTermOrdering</var> can be used to set the term ordering of a ring. It is not mandatory to assign a term ordering: if no term ordering is set, then the default <var class="Arg">"dp"</var> will be used. If it is set, the term ordering must be set <em>before</em> the ring is sent to <strong class="pkg">Singular</strong> with <code class="func">SingularSetBaseRing</code> (<a href="chap1.html#X84A3CD498011A10C"><span class="RefLink">1.3-6</span></a>), otherwise, <strong class="pkg">Singular</strong> will ignore that term ordering, and will use the previous value if any, or the default <var class="Arg">"dp"</var>.</p> @@ -580,11 +580,11 @@ <h5>1.5-2 SINGULARGBASIS</h5> <div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SINGULARGBASIS</code></td><td class="tdright">( global variable )</td></tr></table></div> -<p>This variable is a record containing the component <var class="Arg">GroebnerBasis</var>. When the variable SINGULARGBASIS is assigned to the <strong class="pkg">GAP</strong> global variable <var class="Arg">GBASIS</var>, then the computations of Groebner bases via <strong class="pkg">GAP</strong>'s internal function for that, <code class="func">GroebnerBasis</code> (<a href="../../../doc/ref/chap66_mj.html#X7A43611E876B7560"><span class="RefLink">Reference: GroebnerBasis</span></a>), are done by <strong class="pkg">Singular</strong>.</p> +<p>This variable is a record containing the component <var class="Arg">GroebnerBasis</var>. When the variable SINGULARGBASIS is assigned to the <strong class="pkg">GAP</strong> global variable <var class="Arg">GBASIS</var>, then the computations of Groebner bases via <strong class="pkg">GAP</strong>'s internal function for that, <code class="func">GroebnerBasis</code> (<a href="../../../doc/ref/chap66.html#X7A43611E876B7560"><span class="RefLink">Reference: GroebnerBasis</span></a>), are done by <strong class="pkg">Singular</strong>.</p> <p><strong class="pkg">Singular</strong> claims that it <q>features one of the fastest and most general implementations of various algorithms for computing Groebner bases</q>. The <strong class="pkg">GAP</strong>'s internal function claims to be <q>a na{\"\i}ve implementation of Buchberger's algorithm (which is mainly intended as a teaching tool): it might not be sufficient for serious problems.</q></p> -<p>(Note in the following example that the Groebner bases calculated by the <strong class="pkg">GAP</strong> internal function are in general not reduced; for reduced bases see the <strong class="pkg">GAP</strong> function <code class="func">ReducedGroebnerBasis</code> (<a href="../../../doc/ref/chap66_mj.html#X7DEF286384967C9E"><span class="RefLink">Reference: ReducedGroebnerBasis</span></a>).)</p> +<p>(Note in the following example that the Groebner bases calculated by the <strong class="pkg">GAP</strong> internal function are in general not reduced; for reduced bases see the <strong class="pkg">GAP</strong> function <code class="func">ReducedGroebnerBasis</code> (<a href="../../../doc/ref/chap66.html#X7DEF286384967C9E"><span class="RefLink">Reference: ReducedGroebnerBasis</span></a>).)</p> <div class="example"><pre> @@ -764,7 +764,7 @@ [ 0*Z(7), 0*Z(7), Z(7)^3, Z(7), Z(7)^2 ] ], 5, 3 ] </pre></div> -<p>This generator matrix can be fed into the <strong class="pkg">GUAVA</strong> command <code class="func">GeneratorMatCode</code> (<a href="../../../pkg/guava/doc/chap5_mj.html#X83F400A681CFC0D6"><span class="RefLink">GUAVA: GeneratorMatCode</span></a>) to create a linear code in <strong class="pkg">GAP</strong>, which in turn can be fed into the <strong class="pkg">GUAVA</strong> command <code class="func">MinimumDistance</code> (<a href="../../../pkg/guava/doc/chap4_mj.html#X7B31613D8538BD29"><span class="RefLink">GUAVA: MinimumDistance</span></a>) to compute the minimum distance of the code.</p> +<p>This generator matrix can be fed into the <strong class="pkg">GUAVA</strong> command <code class="func">GeneratorMatCode</code> (<a href="../../../pkg/guava/doc/chap5.html#X83F400A681CFC0D6"><span class="RefLink">GUAVA: GeneratorMatCode</span></a>) to create a linear code in <strong class="pkg">GAP</strong>, which in turn can be fed into the <strong class="pkg">GUAVA</strong> command <code class="func">MinimumDistance</code> (<a href="../../../pkg/guava/doc/chap4.html#X7B31613D8538BD29"><span class="RefLink">GUAVA: MinimumDistance</span></a>) to compute the minimum distance of the code.</p> <div class="example"><pre> @@ -787,9 +787,9 @@ <p>There is an extension of <strong class="pkg">Singular</strong>, named <strong class="pkg">Plural</strong>, which deals with certain noncommutative polynomial rings; see the <strong class="pkg">Singular</strong> documentation, section ``7. PLURAL''. Currently, <strong class="pkg">GAP</strong> doesn't support these noncommutative polynomial rings. The user of the <strong class="pkg">Singular</strong> may use the features of <strong class="pkg">Plural</strong> by calling the <strong class="pkg">Singular</strong> function <var class="Arg">ncalgebra</var> via <var class="Arg">SingularInterface</var>. In this case, extreme care is needed, because on the <strong class="pkg">GAP</strong> side the polynomial will still be commutative.</p> -<p>For the low-level communication with <strong class="pkg">Singular</strong>, the interface relies on the <strong class="pkg">GAP</strong> function <code class="func">InputOutputLocalProcess</code> (<a href="../../../doc/ref/chap10_mj.html#X820799A3824684AC"><span class="RefLink">Reference: InputOutputLocalProcess</span></a>), and this function is available only in <strong class="pkg">GAP</strong> 4.2 (or newer) on a Unix environment or in <strong class="pkg">GAP</strong> 4.4 (or newer) on Windows; auto-detection is used. In this case, <strong class="pkg">GAP</strong> interacts with a unique continuous session of <strong class="pkg">Singular</strong>.</p> +<p>For the low-level communication with <strong class="pkg">Singular</strong>, the interface relies on the <strong class="pkg">GAP</strong> function <code class="func">InputOutputLocalProcess</code> (<a href="../../../doc/ref/chap10.html#X820799A3824684AC"><span class="RefLink">Reference: InputOutputLocalProcess</span></a>), and this function is available only in <strong class="pkg">GAP</strong> 4.2 (or newer) on a Unix environment or in <strong class="pkg">GAP</strong> 4.4 (or newer) on Windows; auto-detection is used. In this case, <strong class="pkg">GAP</strong> interacts with a unique continuous session of <strong class="pkg">Singular</strong>.</p> -<p>In the case that the <strong class="pkg">GAP</strong> function <var class="Arg">InputOutputLocalProcess</var> is not available, then the singular interface will use the <strong class="pkg">GAP</strong> function <code class="func">Process</code> (<a href="../../../doc/ref/chap11_mj.html#X7B09033178D1107A"><span class="RefLink">Reference: Process</span></a>). In this case only a limited subset of the functionality of the interface are available: for example <code class="func">StartSingular</code> (<a href="chap1.html#X79C5E6F27C37DA10"><span class="RefLink">1.3-1</span></a>) and <code class="func">GeneratorsOfInvariantRing</code> (<a href="chap1.html#X7EAC34C984599470"><span class="RefLink">1.5-7</span></a>) are not available, but <code class="func">GroebnerBasis</code> (<a href="chap1.html#X7A43611E876B7560"><span class="RefLink">1.5-1</span></a>) is; <code class="func">SingularInterface</code> (<a href="chap1.html#X876BA78F7CF049C3"><span class="RefLink">1.3-8</span></a>) support s less data types. In this case, for each function call, a new session of <strong class="pkg">Singular</strong> is started and quit.</p> +<p>In the case that the <strong class="pkg">GAP</strong> function <var class="Arg">InputOutputLocalProcess</var> is not available, then the singular interface will use the <strong class="pkg">GAP</strong> function <code class="func">Process</code> (<a href="../../../doc/ref/chap11.html#X7B09033178D1107A"><span class="RefLink">Reference: Process</span></a>). In this case only a limited subset of the functionality of the interface are available: for example <code class="func">StartSingular</code> (<a href="chap1.html#X79C5E6F27C37DA10"><span class="RefLink">1.3-1</span></a>) and <code class="func">GeneratorsOfInvariantRing</code> (<a href="chap1.html#X7EAC34C984599470"><span class="RefLink">1.5-7</span></a>) are not available, but <code class="func">GroebnerBasis</code> (<a href="chap1.html#X7A43611E876B7560"><span class="RefLink">1.5-1</span></a>) is; <code class="func">SingularInterface</code> (<a href="chap1.html#X876BA78F7CF049C3"><span class="RefLink">1.3-8</span></a>) supports l ess data types. In this case, for each function call, a new session of <strong class="pkg">Singular</strong> is started and quit.</p> <p><a id="X82CDC01B7AABF5F5" name="X82CDC01B7AABF5F5"></a></p> @@ -833,7 +833,7 @@ <h5>1.7-3 <span class="Heading">Test file</span></h5> -<p>The following performs a test of the package functionality using a test file <a href="../../../doc/ref/chap7_mj.html#X801051CC86594630"><span class="RefLink">Reference: Test Files</span></a>.</p> +<p>The following performs a test of the package functionality using a test file <a href="../../../doc/ref/chap7.html#X801051CC86594630"><span class="RefLink">Reference: Test Files</span></a>.</p> <div class="example"><pre> @@ -867,7 +867,7 @@ <p>A corresponding problem would happen if the user works directly with <strong class="pkg">Singular</strong> and forgets to define the base-ring at first.</p> -<p>As explained in the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap66_mj.html#X7A14A6588268810A"><span class="RefLink">Reference: Polynomials and Rational Functions</span></a>, given a ring <var class="Arg">R</var>, <strong class="pkg">GAP</strong> does not consider <var class="Arg">R</var> as a subset of a polynomial ring over <var class="Arg">R</var>: for example the zero of <var class="Arg">R</var> (<span class="SimpleMath">0</span>) and the zero of the polynomial ring (<span class="SimpleMath">0x^0</span>) are different objects. <strong class="pkg">GAP</strong> prints these different objects in the same way, and this fact may be misleading. This is a feature of <strong class="pkg">GAP</strong> independent from the package <strong class="pkg">singular</strong>, but it is important to keep it in mind, as most of the objects used by <strong class="pkg">Singular</strong> are polynomials, or their coefficients.</p> +<p>As explained in the <strong class="pkg">GAP</strong> documentation <a href="../../../doc/ref/chap66.html#X7A14A6588268810A"><span class="RefLink">Reference: Polynomials and Rational Functions</span></a>, given a ring <var class="Arg">R</var>, <strong class="pkg">GAP</strong> does not consider <var class="Arg">R</var> as a subset of a polynomial ring over <var class="Arg">R</var>: for example the zero of <var class="Arg">R</var> (<span class="SimpleMath">0</span>) and the zero of the polynomial ring (<span class="SimpleMath">0x^0</span>) are different objects. <strong class="pkg">GAP</strong> prints these different objects in the same way, and this fact may be misleading. This is a feature of <strong class="pkg">GAP</strong> independent from the package <strong class="pkg">singular</strong>, but it is important to keep it in mind, as most of the objects used by <strong class="pkg">Singular</strong> are polynomials, or their coefficients.</p> <p><a id="X7D38248D79425B28" name="X7D38248D79425B28"></a></p> @@ -875,7 +875,7 @@ <p>Errors may occur on the <strong class="pkg">Singular</strong> side, for instance using <code class="func">SingularInterface</code> (<a href="chap1.html#X876BA78F7CF049C3"><span class="RefLink">1.3-8</span></a>) if the arguments supplied are not appropriate for the called function. In general, it is still an open problem to find a satisfactory way to handle in <strong class="pkg">GAP</strong> the errors of this kind.</p> -<p>At the moment, when an error on the <strong class="pkg">Singular</strong> side happens, <strong class="pkg">Singular</strong> may print an error message on the so-called ``standard error''; this message may appear on the screen, but it is not logged by the <strong class="pkg">GAP</strong> function <code class="func">LogTo</code> (<a href="../../../doc/ref/chap9_mj.html#X79813A6686894960"><span class="RefLink">Reference: LogTo</span></a>). The interface prints <var class="Arg">No output from Singular</var>, and then the trivial object (of the type specified as the third argument of <var class="Arg">SingularInterface</var>) may be returned.</p> +<p>At the moment, when an error on the <strong class="pkg">Singular</strong> side happens, <strong class="pkg">Singular</strong> may print an error message on the so-called ``standard error''; this message may appear on the screen, but it is not logged by the <strong class="pkg">GAP</strong> function <code class="func">LogTo</code> (<a href="../../../doc/ref/chap9.html#X79813A6686894960"><span class="RefLink">Reference: LogTo</span></a>). The interface prints <var class="Arg">No output from Singular</var>, and then the trivial object (of the type specified as the third argument of <var class="Arg">SingularInterface</var>) may be returned.</p> <p><a id="X7C8AE6BD787CD237" name="X7C8AE6BD787CD237"></a></p> @@ -883,7 +883,7 @@ <p>As every software, also this package may contain bugs. If you find a bug, or a missing feature, or some other problem, or if you have comments and suggestions, or if you need some help, you may do so via our issue tracker at <span class="URL"><a href="https://github.com/gap-packages/singular/issues">https://github.com/gap-packages/singular/issues</a></span>. Please include in the report the code that causes the problem, so that we can replicate the problem.</p> -<p>If appropriate, you can set <code class="func">InfoSingular</code> (<a href="chap1.html#X843C50B18098609A"><span class="RefLink">1.7-8</span></a>) to <var class="Arg">3</var>, to see what happens between <strong class="pkg">GAP</strong> and <strong class="pkg">Singular</strong> (but this may give a lot of output). Note that <code class="func">LogTo</code> (<a href="../../../doc/ref/chap9_mj.html#X79813A6686894960"><span class="RefLink">Reference: LogTo</span></a>) does not log messages written directly on the screen by <strong class="pkg">Singular</strong>.</p> +<p>If appropriate, you can set <code class="func">InfoSingular</code> (<a href="chap1.html#X843C50B18098609A"><span class="RefLink">1.7-8</span></a>) to <var class="Arg">3</var>, to see what happens between <strong class="pkg">GAP</strong> and <strong class="pkg">Singular</strong> (but this may give a lot of output). Note that <code class="func">LogTo</code> (<a href="../../../doc/ref/chap9.html#X79813A6686894960"><span class="RefLink">Reference: LogTo</span></a>) does not log messages written directly on the screen by <strong class="pkg">Singular</strong>.</p> <p>Every report about this package is welcome, however the probability that your problem will be fixed quickly increases if you read the text ``How to Report Bugs Effectively'', <span class="URL"><a href="https://www.chiark.greenend.org.uk/~sgtatham/bugs.html">https://www.chiark.greenend.org.uk/~sgtatham/bugs.html</a></span> , and send a bug report according to this text.</p> @@ -916,7 +916,7 @@ <h5>1.7-8 InfoSingular</h5> <div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InfoSingular</code></td><td class="tdright">( info class )</td></tr></table></div> -<p>This is the info class <a href="../../../doc/ref/chap7_mj.html#X7A9C902479CB6F7C"><span class="RefLink">Reference: Info Functions</span></a> used by the interface. It can be set to levels 0, 1, 2, and 3. At level 0 no information is printed on the screen. At level 1 (default) the interface prints a message about the <var class="Arg">type_output</var>, when "def" is used in <var class="Arg">SingularInterface</var>, see the example at <code class="func">SingularInterface</code> (<a href="chap1.html#X876BA78F7CF049C3"><span class="RefLink">1.3-8</span></a>). At level 2, information on the activities of the interface is printed (e.g., messages when a <strong class="pkg">Singular</strong> session, or a Groebner basis calculation, is started or terminated). At level 3 all strings that <strong class="pkg">GAP</strong> sends to <strong class="pkg">Singular</strong> are printed, as well as all strings that <strong class="pkg">Singular</strong> sends back.</p> +<p>This is the info class <a href="../../../doc/ref/chap7.html#X7A9C902479CB6F7C"><span class="RefLink">Reference: Info Functions</span></a> used by the interface. It can be set to levels 0, 1, 2, and 3. At level 0 no information is printed on the screen. At level 1 (default) the interface prints a message about the <var class="Arg">type_output</var>, when "def" is used in <var class="Arg">SingularInterface</var>, see the example at <code class="func">SingularInterface</code> (<a href="chap1.html#X876BA78F7CF049C3"><span class="RefLink">1.3-8</span></a>). At level 2, information on the activities of the interface is printed (e.g., messages when a <strong class="pkg">Singular</strong> session, or a Groebner basis calculation, is started or terminated). At level 3 all strings that <strong class="pkg">GAP</strong> sends to <strong class="pkg">Singular</strong> are printed, as well as all strings that <strong class="pkg">Singular</strong> sends back.</p> <div class="example"><pre> Binary files old/singular-2025.08.26/doc/manual.pdf and new/singular-2026.04.09/doc/manual.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/singular.tex new/singular-2026.04.09/doc/singular.tex --- old/singular-2025.08.26/doc/singular.tex 1970-01-01 01:00:00.000000000 +0100 +++ new/singular-2026.04.09/doc/singular.tex 2026-04-09 02:00:00.000000000 +0200 @@ -0,0 +1,1185 @@ +% generated by GAPDoc2LaTeX from XML source (Frank Luebeck) +\documentclass[a4paper,11pt]{report} + +\usepackage[top=37mm,bottom=37mm,left=27mm,right=27mm]{geometry} +\sloppy +\pagestyle{myheadings} +\usepackage{amssymb} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\makeindex +\usepackage{color} +\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083} +\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179} +\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894} +\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894} +\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000} +\definecolor{Black}{rgb}{0.0,0.0,0.0} + +\definecolor{linkColor}{rgb}{0.0,0.0,0.554} +\definecolor{citeColor}{rgb}{0.0,0.0,0.554} +\definecolor{fileColor}{rgb}{0.0,0.0,0.554} +\definecolor{urlColor}{rgb}{0.0,0.0,0.554} +\definecolor{promptColor}{rgb}{0.0,0.0,0.589} +\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0} +\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0} +\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0} + +%% for a long time these were red and blue by default, +%% now black, but keep variables to overwrite +\definecolor{FuncColor}{rgb}{0.0,0.0,0.0} +%% strange name because of pdflatex bug: +\definecolor{Chapter }{rgb}{0.0,0.0,0.0} +\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064} + + +\usepackage{fancyvrb} + +\usepackage{mathptmx,helvet} +\usepackage[T1]{fontenc} +\usepackage{textcomp} + + +\usepackage[ + pdftex=true, + bookmarks=true, + a4paper=true, + pdftitle={Written with GAPDoc}, + pdfcreator={LaTeX with hyperref package / GAPDoc}, + colorlinks=true, + backref=page, + breaklinks=true, + linkcolor=linkColor, + citecolor=citeColor, + filecolor=fileColor, + urlcolor=urlColor, + pdfpagemode={UseNone}, + ]{hyperref} + +\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont} + +% write page numbers to a .pnr log file for online help +\newwrite\pagenrlog +\immediate\openout\pagenrlog =\jobname.pnr +\immediate\write\pagenrlog{PAGENRS := [} +\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}} +%% were never documented, give conflicts with some additional packages + +\newcommand{\GAP}{\textsf{GAP}} + +%% nicer description environments, allows long labels +\usepackage{enumitem} +\setdescription{style=nextline} + +%% depth of toc +\setcounter{tocdepth}{1} + + + + + +%% command for ColorPrompt style examples +\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}} +\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}} +\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}} + + +\begin{document} + +\logpage{[ 0, 0, 0 ]} +\begin{titlepage} +\mbox{}\vfill + +\begin{center}{\maintitlesize \textbf{ singular \mbox{}}}\\ +\vfill + +\hypersetup{pdftitle= singular } +\markright{\scriptsize \mbox{}\hfill singular \hfill\mbox{}} +{\Huge \textbf{ A \textsf{GAP} interface to Singular \mbox{}}}\\ +\vfill + +{\Huge 2026.04.09 \mbox{}}\\[1cm] +{ 9 April 2026 \mbox{}}\\[1cm] +\mbox{}\\[2cm] +{\Large \textbf{ Marco Costantini\\ + \mbox{}}}\\ +{\Large \textbf{ Willem Adriaan de Graaf\\ + \mbox{}}}\\ +\hypersetup{pdfauthor= Marco Costantini\\ + ; Willem Adriaan de Graaf\\ + } +\end{center}\vfill + +\mbox{}\\ +{\mbox{}\\ +\small \noindent \textbf{ Willem Adriaan de Graaf\\ + } Email: \href{mailto://[email protected]} {\texttt{[email protected]}}\\ + Homepage: \href{https://www.science.unitn.it/~degraaf/} {\texttt{https://www.science.unitn.it/\texttt{\symbol{126}}degraaf/}}\\ + Address: \begin{minipage}[t]{8cm}\noindent + Willem de Graaf\\ + Dipartimento di Matematica\\ + Universit{\a`a} degli Studi di Trento\\ + I\texttt{\symbol{45}}38050 Povo (Trento)\\ + Italy\\ + \end{minipage} +}\\ +\end{titlepage} + +\newpage\setcounter{page}{2} +\newpage + +\def\contentsname{Contents\logpage{[ 0, 0, 1 ]}} + +\tableofcontents +\newpage + + +\chapter{\textcolor{Chapter }{\textsf{singular}: the \textsf{GAP} interface to \textsf{Singular}}}\logpage{[ 1, 0, 0 ]} +\hyperdef{L}{X861CFE957DD2453F}{} +{ + +\section{\textcolor{Chapter }{Introduction}}\label{Introduction} +\logpage{[ 1, 1, 0 ]} +\hyperdef{L}{X7DFB63A97E67C0A1}{} +{ + This is the manual of the \textsf{GAP} package ``\textsf{singular}'' that provides an interface from the \textsf{GAP} computer algebra system to the \textsf{Singular} computer algebra system. + + This package allows the \textsf{GAP} user to access functions of \textsf{Singular} from within \textsf{GAP}, and to apply these functions to the \textsf{GAP} objects. With this package, the user keeps working with \textsf{GAP} and, if he needs a function of \textsf{Singular} that is not present in \textsf{GAP}, he can use this function via the interface; see the function \texttt{SingularInterface} (\ref{SingularInterface}). + + This package provides also a function that computes Groebner bases of ideals +in polynomial rings of \textsf{GAP}. This function uses the \textsf{Singular} implementation, which is very fast; see the function \texttt{GroebnerBasis} (\ref{GroebnerBasis}). + + The interface is expected to work with every version of \textsf{GAP} 4, every (not very old) version of \textsf{Singular}, and on every platform, on which both \textsf{GAP} and \textsf{Singular} run; see paragraph \ref{platforms} for details. + + If you have used this package in the preparation of a paper please cite it as +described in \href{https://www.gap-system.org/Contacts/cite.html} {\texttt{https://www.gap\texttt{\symbol{45}}system.org/Contacts/cite.html}}. + + If \textsf{GAP}, \textsf{Singular}, and the \textsf{GAP} package \textsf{singular} are already installed and working on his computer, the user of this interface +needs to read only the subsection \ref{sec:sing_exec}, the section \ref{Interaction}, and in case of problems the subsection \ref{common}. +\subsection{\textcolor{Chapter }{Package evolution}}\logpage{[ 1, 1, 1 ]} +\hyperdef{L}{X7FE24D6E8258CC49}{} +{ + The work for the package \textsf{singular} has been started by Willem de Graaf, that planned this package as an interface +to the function of \textsf{Singular} that calculates the Groebner bases. To this purpose, Willem de Graaf wrote the +code for the conversion of rings and ideals from \textsf{GAP} to \textsf{Singular}, and the code for the conversion of numbers and polynomials in both +directions. + + Marco Costantini has widened the aim of the package, in order to make it a +general interface to each possible function of \textsf{Singular}: with the function \texttt{SingularInterface} (\ref{SingularInterface}) it is possible to use from within \textsf{GAP} any function of \textsf{Singular}, including user\texttt{\symbol{45}}defined ones and future implementations. +To this purpose, Marco Costantini has generalized the previous code for the +conversion of objects in the new more general context, has written the code +for the conversion of the various other types of objects, and has written the +code for the low\texttt{\symbol{45}}level communication between \textsf{GAP} and \textsf{Singular}. + + David Joyner has developed the code for the +algebraic\texttt{\symbol{45}}geometric codes functions, and has written the +corresponding section \ref{AlgebraicGeometricCodes} of this manual. + + Gema M. Diaz has helped with some testing and reports. } + + +\subsection{\textcolor{Chapter }{The system \textsf{Singular}}}\logpage{[ 1, 1, 2 ]} +\hyperdef{L}{X83FD5A2A8047C857}{} +{ + \textsf{Singular} is ``A Computer Algebra System for Polynomial Computations'' developed by G.\texttt{\symbol{45}}M. Greuel, G. Pfister, and H. +Sch\texttt{\symbol{92}}"onemann, at Centre for Computer Algebra, University of +Kaiserslautern. The authors of the \textsf{GAP} package \textsf{singular} are not involved in the development of the system \textsf{Singular}, and vice versa. + + \textsf{Singular} is not included in this package, and can be obtained for free from \href{https://www.singular.uni-kl.de} {\texttt{https://www.singular.uni\texttt{\symbol{45}}kl.de}}. There, one can find also its documentation, installing instructions, the +source code if wanted, and support if needed. \textsf{Singular} is available for several platforms. + + A description of \textsf{Singular}, copied from its manual (paragraph ``2.1 Background''), version +2\texttt{\symbol{45}}0\texttt{\symbol{45}}5, is the following: + + `` \textsf{Singular} is a Computer Algebra system for polynomial computations with emphasis on the +special needs of commutative algebra, algebraic geometry, and singularity +theory. + + \textsf{Singular}'s main computational objects are ideals and modules over a large variety of +baserings. The baserings are polynomial rings or localizations thereof over a +field (e.g., finite fields, the rationals, floats, algebraic extensions, +transcendental extensions) or quotient rings with respect to an ideal. + + \textsf{Singular} features one of the fastest and most general implementations of various +algorithms for computing Groebner resp. standard bases. The implementation +includes Buchberger's algorithm (if the ordering is a well ordering) and +Mora's algorithm (if the ordering is a tangent cone ordering) as special +cases. Furthermore, it provides polynomial factorizations, resultant, +characteristic set and gcd computations, syzygy and +free\texttt{\symbol{45}}resolution computations, and many more related +functionalities. + + Based on an easy\texttt{\symbol{45}}to\texttt{\symbol{45}}use interactive +shell and a C\texttt{\symbol{45}}like programming language, \textsf{Singular}'s internal functionality is augmented and user\texttt{\symbol{45}}extendible +by libraries written in the \textsf{Singular} programming language. A general and efficient implementation of communication +links allows \textsf{Singular} to make its functionality available to other programs. + + \textsf{Singular}'s development started in 1984 with an implementation of Mora's Tangent Cone +algorithm in Modula\texttt{\symbol{45}}2 on an Atari computer (K.P. Neuendorf, +G. Pfister, H. Sch{\"o}nemann; Humboldt\texttt{\symbol{45}}Universit{\"a}t zu +Berlin). The need for a new system arose from the investigation of +mathematical problems coming from singularity theory which none of the +existing systems was able to compute. + + In the early 1990s \textsf{Singular}'s ``home\texttt{\symbol{45}}town'' moved to Kaiserslautern, a general +standard basis algorithm was implemented in C, and \textsf{Singular} was ported to Unix, MS\texttt{\symbol{45}}DOS, Windows NT, and MacOS. + + Continuous extensions (like polynomial factorization, gcd computations, links) +and refinements led in 1997 to the release of \textsf{Singular} version 1.0 and in 1998 to the release of version 1.2 (much faster standard +and Groebner bases computations based on Hilbert series and on improved +implementations of the algorithms, libraries for primary decomposition, ring +normalization, etc.). '' } + + +\subsection{\textcolor{Chapter }{The system \textsf{GAP}}}\logpage{[ 1, 1, 3 ]} +\hyperdef{L}{X783E6C90833FAA5F}{} +{ + \textsf{GAP} stands for ``Groups, Algorithms, and Programming'', and is developed by several people (``The \textsf{GAP} Group''). + + \textsf{GAP} is not included in this package, and can be obtained for free from \href{https://www.gap-system.org/} {\texttt{https://www.gap\texttt{\symbol{45}}system.org/}}. There, one can find also its documentation, installing instructions, the +source code, and support if needed. The \textsf{GAP} system will run on any machine with an Unix\texttt{\symbol{45}}like or recent +Windows or MacOS operating system and with a reasonable amount of ram and disk +space. + + A description of \textsf{GAP}, copied from its web site, is the following: ``\textsf{GAP} is a system for computational discrete algebra, with particular emphasis on +Computational Group Theory. \textsf{GAP} provides a programming language, a library of thousands of functions +implementing algebraic algorithms written in the \textsf{GAP} language as well as large data libraries of algebraic objects. See the web +site the overview and the description of the mathematical capabilities. \textsf{GAP} is used in research and teaching for studying groups and their +representations, rings, vector spaces, algebras, combinatorial structures, and +more. The system, including source, is distributed freely. You can study and +easily modify or extend it for your special use.'' } + + } + + +\section{\textcolor{Chapter }{Installation}}\label{Installation} +\logpage{[ 1, 2, 0 ]} +\hyperdef{L}{X8360C04082558A12}{} +{ + In order to use this interface one must have both \textsf{GAP} version 4 and \textsf{Singular} installed. +\subsection{\textcolor{Chapter }{Installing the system \textsf{Singular}}}\logpage{[ 1, 2, 1 ]} +\hyperdef{L}{X7909A9237804CDCE}{} +{ + Follow the \textsf{Singular} installing instructions. + + However, for a Unix system, one needs to download two files: +\begin{itemize} +\item \texttt{Singular\texttt{\symbol{45}}{\textless}version{\textgreater}\texttt{\symbol{45}}share.tar.gz}, that contains architecture independent data like documentation and +libraries; +\item \texttt{Singular\texttt{\symbol{45}}{\textless}version{\textgreater}\texttt{\symbol{45}}{\textless}uname{\textgreater}.tar.gz}, that contains architecture dependent executables, like the \textsf{Singular} program (precompiled). {\textless}uname{\textgreater} is a description of the +processor and operating system for which \textsf{Singular} is compiled. +\end{itemize} + + + \textsf{Singular} specific subdirectories will be created in such a way that multiple versions +and multiple architecture dependent files of \textsf{Singular} can peaceably coexist under the same \texttt{/usr/local/} tree. + + Before trying the interface, make sure that \textsf{Singular} is installed and working as stand\texttt{\symbol{45}}alone program. } + + +\subsection{\textcolor{Chapter }{Installing the system \textsf{GAP}}}\logpage{[ 1, 2, 2 ]} +\hyperdef{L}{X8158504779874284}{} +{ + Follow the \textsf{GAP} installing instructions. + + However, the basic steps of a \textsf{GAP} installation are: +\begin{itemize} +\item Choose your preferred archive format and download the archives. +\item Unpack the archives. +\item On Unix: Compile \textsf{GAP}. (Compiled executables for Windows and Mac are in the archives.) +\item On Unix: Some packages need further installation for full functionality (which +is not available on Windows or Mac). +\item Adjust some links/scripts/icons ..., depending on your system, to make the new +version of \textsf{GAP} available to the users of your machine. +\item Optional: Run a few tests. +\item Optional, but appreciated: Give some feedback on your installation. +\end{itemize} + There is also an experimental Linux binary distribution via remote +synchronization with a reference installation, which includes all packages and +some optimizations. Furthermore, the Debian GNU/Linux distribution contains +.deb\texttt{\symbol{45}}packages with the core part of \textsf{GAP} and some of the \textsf{GAP} packages. } + + +\subsection{\textcolor{Chapter }{Installing the package \textsf{singular}}}\logpage{[ 1, 2, 3 ]} +\hyperdef{L}{X7AC4165B7843F037}{} +{ + The package \textsf{singular} is installed and loaded as a normal \textsf{GAP} package: see the \textsf{GAP} documentation (\textbf{Reference: Installing a GAP Package}) and (\textbf{Reference: Loading a GAP Package}). + + Starting with version 4.4 of \textsf{GAP}, the package \textsf{singular} is distributed together with \textsf{GAP}. Hence, if \textsf{GAP} is already installed with all the distributed packages, then also the package \textsf{singular} is installed. However, if the package \textsf{singular} is not included in your \textsf{GAP} installation, it can be downloaded and unpacked in the \texttt{pkg/} directory of the \textsf{GAP} installation. If you don't have write access to the \texttt{pkg/} directory in your main \textsf{GAP} installation you can use private directories as explained in the \textsf{GAP} documentation (\textbf{Reference: GAP Root Directories}). The package \textsf{singular} doesn't require compilation. } + + + +\subsection{\textcolor{Chapter }{sing{\textunderscore}exec}} +\logpage{[ 1, 2, 4 ]}\nobreak +\label{sec:sing_exec} +\hyperdef{L}{X8229A3C4793932BA}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{sing{\textunderscore}exec\index{sing{\textunderscore}exec@\texttt{sing{\textunderscore}exec}} +\label{singuScoreexec} +}\hfill{\scriptsize (global variable)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{sing{\textunderscore}exec{\textunderscore}options\index{sing{\textunderscore}exec{\textunderscore}options@\texttt{sing{\textunderscore}exec{\textunderscore}options}} +\label{singuScoreexecuScoreoptions} +}\hfill{\scriptsize (global variable)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularTempDirectory\index{SingularTempDirectory@\texttt{SingularTempDirectory}} +\label{SingularTempDirectory} +}\hfill{\scriptsize (global variable)}}\\ + + + In order to use the interface, \textsf{GAP} has to be told where to find \textsf{Singular}. This can be done in three ways. First, if the \textsf{Singular} executable file is in the search path, then \textsf{GAP} will find it. Second, it is possible to edit (before loading the package) one +of the first lines of the file \texttt{singular/gap/singular.g} (that comes with this package). Third, it is possible to give the path of the \textsf{Singular} executable file directly during each \textsf{GAP} session assigning it to the variable \texttt{sing{\textunderscore}exec} (\ref{singuScoreexec}) (either before or after this package has been loaded, but before starting \textsf{Singular} with \texttt{StartSingular} (\ref{StartSingular})), as in the example below. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@LoadPackage( "singular" );| + A GAP interface to Singular, by Marco Costantini and Willem de Graaf + true + !gapprompt@gap>| !gapinput@sing_exec:= "/home/wdg/Singular/2-0-3/ix86-Linux/Singular";;| +\end{Verbatim} + The directory separator is always '\texttt{/}', even under DOS/Windows or MacOS. The value of \texttt{sing{\textunderscore}exec} (\ref{singuScoreexec}) must refer to the text\texttt{\symbol{45}}only version of \textsf{Singular} (\mbox{\texttt{\mdseries\slshape Singular}}), and not to the Emacs version (\mbox{\texttt{\mdseries\slshape ESingular}}), nor to the terminal window version (\mbox{\texttt{\mdseries\slshape TSingular}}). + + In a similar way, it is possible to supply \textsf{Singular} with some command line options (or files to read containing user defined +functions), assigning them to the variable \texttt{sing{\textunderscore}exec{\textunderscore}options} (\ref{singuScoreexecuScoreoptions}). This can be done by editing (before loading the package) one of the first +lines of the file \texttt{singular/gap/singular.g} (that comes with this package), or directly during each \textsf{GAP} session (either before or after this package has been loaded, but before +starting \textsf{Singular}) with \texttt{StartSingular} (\ref{StartSingular})), as in the example below. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@Add( sing_exec_options, "--no-rc" );| + !gapprompt@gap>| !gapinput@Add( sing_exec_options, "/full_path/my_file" );| +\end{Verbatim} + The variable \texttt{sing{\textunderscore}exec{\textunderscore}options} (\ref{singuScoreexecuScoreoptions}) is initialized to \mbox{\texttt{\mdseries\slshape [ "\texttt{\symbol{45}}t" ]}}; the user can add further options, but must keep \mbox{\texttt{\mdseries\slshape "\texttt{\symbol{45}}t"}}, which is required. The possible options are described in the \textsf{Singular} documentation, paragraph ``3.1.6 Command line options''. + + \textsf{Singular} is not executed in the current directory, but in a +user\texttt{\symbol{45}}specified one, or in a temporary one. It is possible +to supply this directory assigning it to the variable \texttt{SingularTempDirectory}. This can be done by editing (before loading the package) one of the first +lines of the file \texttt{singular/gap/singular.g} (that comes with this package), or directly during each \textsf{GAP} session (either before or after this package has been loaded, but before +starting \textsf{Singular}) with \texttt{StartSingular} (\ref{StartSingular})), as in the example below. If \texttt{SingularTempDirectory} is not assigned, \textsf{GAP} will create and use a temporary directory, which will be removed when \textsf{GAP} quits. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@SingularTempDirectory := Directory( "/tmp" );| + dir("/tmp/") +\end{Verbatim} + On Windows, \textsf{Singular} version 3 may be not executed directly, but may be executed as \mbox{\texttt{\mdseries\slshape bash Singular}}. In this case, the variables \texttt{sing{\textunderscore}exec} (\ref{singuScoreexec}), \texttt{sing{\textunderscore}exec{\textunderscore}options} (\ref{singuScoreexecuScoreoptions}), \texttt{SingularTempDirectory} must reflect this, otherwise Windows complains that \mbox{\texttt{\mdseries\slshape cygwin1.dll}} is not found. The following works on my Windows machine. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@LoadPackage("singular");| + true + !gapprompt@gap>| !gapinput@SingularTempDirectory := Directory("c:/cygwin/bin");| + dir("c:/cygwin/bin/") + !gapprompt@gap>| !gapinput@sing_exec := "c:/cygwin/bin/bash.exe";| + "c:/cygwin/bin/bash.exe" + !gapprompt@gap>| !gapinput@sing_exec_options := [ "Singular", "-t" ];| + [ "Singular", "-t" ] + !gapprompt@gap>| !gapinput@StartSingular();| +\end{Verbatim} + Another possibility is to run Gap from within the Cygwin shell. In this case, +with a standard installation of Cygwin and \textsf{Singular}, no change is required, } + + } + + +\section{\textcolor{Chapter }{Interaction with \textsf{Singular}}}\label{Interaction} +\logpage{[ 1, 3, 0 ]} +\hyperdef{L}{X7E8229C88005E2EA}{} +{ + The user must load the package \textsf{singular} with \texttt{LoadPackage} (\textbf{Reference: LoadPackage}). + +\subsection{\textcolor{Chapter }{StartSingular}} +\logpage{[ 1, 3, 1 ]}\nobreak +\hyperdef{L}{X79C5E6F27C37DA10}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{StartSingular({\mdseries\slshape })\index{StartSingular@\texttt{StartSingular}} +\label{StartSingular} +}\hfill{\scriptsize (function)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CloseSingular({\mdseries\slshape })\index{CloseSingular@\texttt{CloseSingular}} +\label{CloseSingular} +}\hfill{\scriptsize (function)}}\\ + + + After the package \textsf{singular} has been loaded, \textsf{Singular} is started automatically when one of the functions of the interface is called. +Alternatively, one can start \textsf{Singular} with the command \mbox{\texttt{\mdseries\slshape StartSingular}}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@StartSingular();| +\end{Verbatim} + See \ref{platforms} for technical details. Explicit use of \mbox{\texttt{\mdseries\slshape StartSingular}} is not necessary. If \mbox{\texttt{\mdseries\slshape StartSingular}} is called when a previous \textsf{Singular} session is running, than session will be closed, and a new session will be +started. + + If at some point \textsf{Singular} is no longer needed, then it can be closed (in order to save system resources) +with the command \mbox{\texttt{\mdseries\slshape CloseSingular}}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@CloseSingular();| +\end{Verbatim} + However, when \textsf{GAP} exits, it is expected to close Singular, and remove any temporary directory, +except in the case of abnormal \textsf{GAP} termination. } + + + +\subsection{\textcolor{Chapter }{SingularHelp}} +\logpage{[ 1, 3, 2 ]}\nobreak +\hyperdef{L}{X81FDDDE47EBA9698}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularHelp({\mdseries\slshape topic})\index{SingularHelp@\texttt{SingularHelp}} +\label{SingularHelp} +}\hfill{\scriptsize (function)}}\\ + + + Here \mbox{\texttt{\mdseries\slshape topic}} is a string containing the name of a \textsf{Singular} topic. This function provides help on that topic using the \textsf{Singular} help system: see the \textsf{Singular} documentation, paragraphs ``3.1.3 The online help system'' and ``5.1.43 +help''. If \mbox{\texttt{\mdseries\slshape topic}} is the empty string "", then the title/index page of the manual is displayed. + + This function can be used to display the \textsf{Singular} documentation referenced in this manual; \mbox{\texttt{\mdseries\slshape topic}} must be given without the leading numbers. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@SingularHelp( "" ); # a Mozilla window appears| + #I // ** Displaying help in browser 'mozilla'. + // ** Use 'system("--browser", <browser>);' to change browser, + // ** where <browser> can be: "mozilla", "xinfo", "info", "builtin", "dummy", \ + "emacs". +\end{Verbatim} + The \textsf{Singular} function \mbox{\texttt{\mdseries\slshape system}} can be accessed via the function \texttt{SingularInterface} (\ref{SingularInterface}). Some only\texttt{\symbol{45}}text browsers may be not supported by the +interface. } + + +\subsection{\textcolor{Chapter }{Rings and orderings}}\logpage{[ 1, 3, 3 ]} +\hyperdef{L}{X86C329A285955655}{} +{ + All non\texttt{\symbol{45}}trivial algorithms in \textsf{Singular} require the prior definition of a (polynomial) ring, that will be called the +``base\texttt{\symbol{45}}ring''. Any polynomial (respectively vector) in \textsf{Singular} is ordered with respect to a term ordering (or, monomial ordering), that has +to be specified together with the declaration of a ring. See the documentation +of \textsf{Singular}, paragraph ``3.3 Rings and orderings'', for further information. + + After defining in \textsf{GAP} a ring, a term ordering can be assigned to it using the function \texttt{SetTermOrdering} (\ref{SetTermOrdering}), and \emph{after} the term ordering is assigned, the interface and \textsf{Singular} can be told to use this ring as the base\texttt{\symbol{45}}ring, with the +function \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). } + + +\subsection{\textcolor{Chapter }{Supported coefficients fields}}\logpage{[ 1, 3, 4 ]} +\hyperdef{L}{X840BA4C9839D3CF4}{} +{ + Let \mbox{\texttt{\mdseries\slshape p}} be a prime, \mbox{\texttt{\mdseries\slshape pol}} an irreducible polynomial, and \mbox{\texttt{\mdseries\slshape arg}} an appropriate argument for the given function. The coefficient fields of the +base\texttt{\symbol{45}}ring may be of the following form: +\begin{itemize} +\item \mbox{\texttt{\mdseries\slshape Rationals}}, +\item \mbox{\texttt{\mdseries\slshape CyclotomicField( arg )}}, +\item \mbox{\texttt{\mdseries\slshape AlgebraicExtension( Rationals, pol )}}, +\item \mbox{\texttt{\mdseries\slshape GaloisField( arg )}} (both prime and non\texttt{\symbol{45}}prime), +\item \mbox{\texttt{\mdseries\slshape AlgebraicExtension( GaloisField( p ), pol )}}. +\end{itemize} + For some example see those for the function \texttt{SetTermOrdering} (\ref{SetTermOrdering}). + + Let us remember that \mbox{\texttt{\mdseries\slshape CyclotomicField}} and \mbox{\texttt{\mdseries\slshape GaloisField}} can be abbreviated respectively to \mbox{\texttt{\mdseries\slshape CF}} and \mbox{\texttt{\mdseries\slshape GF}}; these forms are used also when \textsf{GAP} prints cyclotomic or Galois fields. See the \textsf{GAP} documentation about the functions: \texttt{CyclotomicField} (\textbf{Reference: CyclotomicField for (subfield and) conductor}), \texttt{GaloisField} (\textbf{Reference: GaloisField for field size}), \texttt{AlgebraicExtension} (\textbf{Reference: AlgebraicExtension}), and the chapters: (\textbf{Reference: Rational Numbers}), (\textbf{Reference: Abelian Number Fields}), (\textbf{Reference: Finite Fields}), (\textbf{Reference: Algebraic extensions of fields}). } + + + +\subsection{\textcolor{Chapter }{SetTermOrdering}} +\logpage{[ 1, 3, 5 ]}\nobreak +\hyperdef{L}{X813A17AF85BFACB9}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetTermOrdering({\mdseries\slshape R})\index{SetTermOrdering@\texttt{SetTermOrdering}} +\label{SetTermOrdering} +}\hfill{\scriptsize (function)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TermOrdering({\mdseries\slshape R})\index{TermOrdering@\texttt{TermOrdering}} +\label{TermOrdering} +}\hfill{\scriptsize (attribute)}}\\ + + + Let \mbox{\texttt{\mdseries\slshape R}} be a polynomial ring. The value of \mbox{\texttt{\mdseries\slshape TermOrdering( R )}} describes the term ordering of \mbox{\texttt{\mdseries\slshape R}}, and can be a string, a list, or a monomial ordering of \textsf{GAP}. (The term orderings of \textsf{Singular} are explained in its documentation, paragraphs ``3.3.3 Term orderings'' and +``B.2.1 Introduction to orderings''.) + + If this value is a string, for instance \mbox{\texttt{\mdseries\slshape "lp"}} (lexicographical ordering), \mbox{\texttt{\mdseries\slshape "dp"}} (degree reverse lexicographical ordering), or \mbox{\texttt{\mdseries\slshape "Dp"}} (degree lexicographical ordering), this value will be passed to \textsf{Singular} without being interpreted or parsed by the interface. + + If this value is a list, it must be of the form \mbox{\texttt{\mdseries\slshape [ str{\textunderscore}1, d{\textunderscore}1, str{\textunderscore}2, +d{\textunderscore}2, ... ]}}, where each \mbox{\texttt{\mdseries\slshape str{\textunderscore}i}} is a \textsf{Singular} ordering given as a string. Each \mbox{\texttt{\mdseries\slshape d{\textunderscore}i}} must be a number, and specifies the number of variables having that ordering; +however, if \mbox{\texttt{\mdseries\slshape str{\textunderscore}i}} is a weighted order, like \mbox{\texttt{\mdseries\slshape "wp"}} (weighted reverse lexicographical ordering) or \mbox{\texttt{\mdseries\slshape "Wp"}} (weighted lexicographical ordering), then the corresponding \mbox{\texttt{\mdseries\slshape d{\textunderscore}i}} must be a list of positive integers that specifies the weight of each +variable. The sum of the \mbox{\texttt{\mdseries\slshape d{\textunderscore}i}}'s (if numbers) or of their lengths (if lists) must be equal to the number of +variables of the ring \mbox{\texttt{\mdseries\slshape R}}. + + This value can also be a monomial ordering of \textsf{GAP}: currently supported are \mbox{\texttt{\mdseries\slshape MonomialLexOrdering}}, \mbox{\texttt{\mdseries\slshape MonomialGrevlexOrdering}}, and \mbox{\texttt{\mdseries\slshape MonomialGrlexOrdering}} (\textbf{Reference: Monomial Orderings}). + + \mbox{\texttt{\mdseries\slshape TermOrdering}} is a mutable attribute, see the \textsf{GAP} documentation of \texttt{DeclareAttribute} (\textbf{Reference: DeclareAttribute}); if it is changed on the \textsf{GAP} side, it is necessary thereafter to send again the ring to \textsf{Singular} with \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). + + \mbox{\texttt{\mdseries\slshape SetTermOrdering}} can be used to set the term ordering of a ring. It is not mandatory to assign +a term ordering: if no term ordering is set, then the default \mbox{\texttt{\mdseries\slshape "dp"}} will be used. If it is set, the term ordering must be set \emph{before} the ring is sent to \textsf{Singular} with \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}), otherwise, \textsf{Singular} will ignore that term ordering, and will use the previous value if any, or the +default \mbox{\texttt{\mdseries\slshape "dp"}}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R1:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R1, "lp" );| + !gapprompt@gap>| !gapinput@R2:= PolynomialRing( GaloisField(9), 3 );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R2, [ "wp", [1,1,2] ] );| + !gapprompt@gap>| !gapinput@R3:= PolynomialRing( CyclotomicField(25), ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R3, MonomialLexOrdering() );| + !gapprompt@gap>| !gapinput@x:=Indeterminate(Rationals);;| + !gapprompt@gap>| !gapinput@F:=AlgebraicExtension(Rationals, x^5+4*x+1);;| + !gapprompt@gap>| !gapinput@R4:= PolynomialRing( F, 6 );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R4, [ "dp", 1, "wp", [1,1,2], "lp", 2 ] );| +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{SingularSetBaseRing}} +\logpage{[ 1, 3, 6 ]}\nobreak +\hyperdef{L}{X84A3CD498011A10C}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularSetBaseRing({\mdseries\slshape R})\index{SingularSetBaseRing@\texttt{SingularSetBaseRing}} +\label{SingularSetBaseRing} +}\hfill{\scriptsize (function)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularBaseRing\index{SingularBaseRing@\texttt{SingularBaseRing}} +\label{SingularBaseRing} +}\hfill{\scriptsize (global variable)}}\\ + + + Here \mbox{\texttt{\mdseries\slshape R}} is a polynomial ring. \mbox{\texttt{\mdseries\slshape SingularSetBaseRing}} sets the base\texttt{\symbol{45}}ring in \textsf{Singular} equal to \mbox{\texttt{\mdseries\slshape R}}. This ring will be also kept in \textsf{GAP} in the variable \mbox{\texttt{\mdseries\slshape SingularBaseRing}}. After this assignment, all the functions of the interface will work with +this ring. However, for some functions (those having rings, ideals, or modules +as arguments) it is not necessary to explicitly set the base ring first, +because in these cases the functions arguments contains information about a +ring that will be used as a base\texttt{\symbol{45}}ring. This will be +specified for each function in the corresponding section of this manual. +(Unnecessary use of \mbox{\texttt{\mdseries\slshape SingularSetBaseRing}} doesn't harm; forgetting to use \mbox{\texttt{\mdseries\slshape SingularSetBaseRing}} produces the problem described in the paragraph \ref{common}.) The results of the computations may depend on the choice of the +base\texttt{\symbol{45}}ring: see an example at \texttt{FactorsUsingSingular} (\ref{FactorsUsingSingular}), in which the factorization of $ x^2 + y^2 $ is calculated. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| +\end{Verbatim} + The value of \mbox{\texttt{\mdseries\slshape SingularBaseRing}} when the package is loaded is \mbox{\texttt{\mdseries\slshape PolynomialRing( GF( 32003 ), 3 )}}, in order to match the default base\texttt{\symbol{45}}ring of \textsf{Singular}. + + } + + + +\subsection{\textcolor{Chapter }{SingularLibrary}} +\logpage{[ 1, 3, 7 ]}\nobreak +\hyperdef{L}{X871A5AF87DAE21E6}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularLibrary({\mdseries\slshape string})\index{SingularLibrary@\texttt{SingularLibrary}} +\label{SingularLibrary} +}\hfill{\scriptsize (function)}}\\ + + + In \textsf{Singular} some functionality is provided by separate libraries that must be explicitly +loaded in order to be used (see the \textsf{Singular} documentation, chapter ``D. SINGULAR libraries''), see the example in \texttt{SingularInterface} (\ref{SingularInterface}). + + The argument \mbox{\texttt{\mdseries\slshape string}} is a string containing the name of a \textsf{Singular} library. This function makes sure that this library is loaded into \textsf{Singular}. + + The functions provided by the library \mbox{\texttt{\mdseries\slshape ring.lib}} could be not yet supported by the interface. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@SingularLibrary( "general.lib" );| +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{SingularInterface}} +\logpage{[ 1, 3, 8 ]}\nobreak +\hyperdef{L}{X876BA78F7CF049C3}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularInterface({\mdseries\slshape singcom, arguments, type{\textunderscore}output})\index{SingularInterface@\texttt{SingularInterface}} +\label{SingularInterface} +}\hfill{\scriptsize (function)}}\\ + + + The function \mbox{\texttt{\mdseries\slshape SingularInterface}} provides the general interface that enables to apply the \textsf{Singular} functions to the \textsf{GAP} objects. Its arguments are the following: +\begin{itemize} +\item \mbox{\texttt{\mdseries\slshape singcom}} is a \textsf{Singular} command or function (given as a string). +\item \mbox{\texttt{\mdseries\slshape arguments}} is a list of \textsf{GAP} objects, $O_1, O_2, ..., O_n$, that will be used as arguments of \mbox{\texttt{\mdseries\slshape singcom}} (it may be the empty list). \mbox{\texttt{\mdseries\slshape arguments}} may also be a string: in this case it is assumed that it contains one or more \textsf{Singular} identifiers, or a \textsf{Singular} valid expression, or something else meaningful for \textsf{Singular}, and it is passed to \textsf{Singular} without parsing or checking on the \textsf{GAP} side. +\item \mbox{\texttt{\mdseries\slshape type{\textunderscore}output}} is the data type (given as a string) in \textsf{Singular} of the output. The data types are the following (see the \textsf{Singular} documentation, chapter ``4. Data types''): "bigint", "def", "ideal", "int", +"intmat", "intvec", "link", "list", "map", "matrix", "module", "number", +"poly", "proc", "qring", "resolution", "ring", "string", "vector" (some of +them were not available in previous versions of \textsf{Singular}). The empty string "" can be used if no output is expected. If in doubt you +can use "def" (see the \textsf{Singular} documentation, paragraph ``4.1 def''). Usually, in the documentation of each \textsf{Singular} function is given its output type. +\end{itemize} + Of course, the objects in the list \mbox{\texttt{\mdseries\slshape arguments}} and the \mbox{\texttt{\mdseries\slshape type{\textunderscore}output}} must be appropriate for the function \mbox{\texttt{\mdseries\slshape singcom}}: no check is done by the interface. + + The function \mbox{\texttt{\mdseries\slshape SingularInterface}} does the following: +\begin{enumerate} +\item converts each object $O_1, O_2, ..., O_n$ in \mbox{\texttt{\mdseries\slshape arguments}} into the corresponding object $P_1, P_2, ..., P_n$, of \textsf{Singular}, +\item sends to \textsf{Singular} the command to calculate $singcom ( P_1, P_2, ..., P_n )$, +\item gets the output (of type \mbox{\texttt{\mdseries\slshape type{\textunderscore}output}}) from \textsf{Singular}, +\item converts it to the corresponding Gap object, and returns it to the user. +\end{enumerate} + + + The function \mbox{\texttt{\mdseries\slshape SingularInterface}} is oriented towards the +kind\texttt{\symbol{45}}of\texttt{\symbol{45}}objects/data\texttt{\symbol{45}}types, +and not to the functions of \textsf{Singular}, because in this way it is much more general. The user can use ``all'' the +existing functions of \textsf{Singular} and the interface is not bounded to the state of implementation of \textsf{Singular}: future functions and user\texttt{\symbol{45}}defined functions will be +automatically supported. + + The conversion of objects from Gap to \textsf{Singular} and from it back to Gap is done using some `ad hoc' functions. Currently, the +conversion of objects from \textsf{GAP} to \textsf{Singular} is implemented for the following types: "ideal", "int", "intmat", "intvec", +"list", "matrix", "module", "number", "poly", "ring", "string", "vector". +Objects of other types are not supported, or are even not yet implemented in \textsf{GAP}. + + The conversion of objects from \textsf{Singular} to \textsf{GAP} is currently implemented for the following types: "bigint", "def", "ideal", +"int", "intmat", "intvec", "list", "matrix", "module", "number", "poly", +"proc" (experimental), "string", "vector". Objects of other types are returned +as strings. + + Before passing polynomials (or numbers, vectors, matrices, or lists of them) +to \textsf{Singular}, it is necessary to have sent the base\texttt{\symbol{45}}ring to \textsf{Singular} with the function \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}), in order to ensure that \textsf{Singular} knows about them. This is not necessary if in the input there is a ring, an +ideal, or a module (before the polynomials), because these objects contain +information about the ring to be used as base\texttt{\symbol{45}}ring. All the +input must be relative to at most one ring; furthermore, at most one object of +type "ring" can be in the input. + + As SingularInterface is a rather general function, it is not guaranteed that +it always works, and some functions are not supported. For instance, in \textsf{Singular} there is the function \mbox{\texttt{\mdseries\slshape pause}} that waits until a keystroke is pressed; but the interface instead waits for +the \textsf{Singular} prompt before sending it any new keystroke, and so calling \mbox{\texttt{\mdseries\slshape pause}} would hang the interface. However, the unsupported functions like \mbox{\texttt{\mdseries\slshape pause}} are only a few, and are not mathematically useful. SingularInterface tries to +block calls to known unsupported functions. + + Some \textsf{Singular} functions may return more than one value, see the \textsf{Singular} documentation, paragraph ``6.2.7 Return type of procedures''. In order to use +one of these functions via \mbox{\texttt{\mdseries\slshape SingularInterface}}, the type \mbox{\texttt{\mdseries\slshape type{\textunderscore}output}} must be "list". The output in \textsf{GAP} will be a list containing the values returned by the \textsf{Singular} function. + + In the next example we compute the primary decomposition of an ideal. Note +that for that we need to load the \textsf{Singular} library \mbox{\texttt{\mdseries\slshape primdec.lib}}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@i:= IndeterminatesOfPolynomialRing(R);;| + !gapprompt@gap>| !gapinput@x:= i[1];; y:= i[2];; z:= i[3];;| + !gapprompt@gap>| !gapinput@f:= (x*y-z)*(x*y*z+y^2*z+x^2*z);;| + !gapprompt@gap>| !gapinput@g:= (x*y-z)*(x*y*z^2+x*y^2*z+x^2*y*z);;| + !gapprompt@gap>| !gapinput@I:= Ideal( R, [f,g] );;| + !gapprompt@gap>| !gapinput@SingularLibrary( "primdec.lib" );| + !gapprompt@gap>| !gapinput@SingularInterface( "primdecGTZ", [ I ], "def" );| + #I Singular output of type "list" + [ [ <two-sided ideal in Rationals[x,y,z], (1 generator)>, + <two-sided ideal in Rationals[x,y,z], (1 generator)> ], + [ <two-sided ideal in Rationals[x,y,z], (1 generator)>, + <two-sided ideal in Rationals[x,y,z], (1 generator)> ], + [ <two-sided ideal in Rationals[x,y,z], (2 generators)>, + <two-sided ideal in Rationals[x,y,z], (2 generators)> ], + [ <two-sided ideal in Rationals[x,y,z], (3 generators)>, + <two-sided ideal in Rationals[x,y,z], (2 generators)> ] ] +\end{Verbatim} + In the next example are calculated the first syzygy module of an ideal, and +the resultant of two polynomials with respect a variable. Note that in this +case it is not necessary to set the base\texttt{\symbol{45}}ring with \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}), in the first case because the input \mbox{\texttt{\mdseries\slshape I}} is of type "ideal", and in the second case because the +base\texttt{\symbol{45}}ring was already sent to \textsf{Singular} in the former case. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@i:= IndeterminatesOfPolynomialRing( R );;| + !gapprompt@gap>| !gapinput@x:= i[1];; y:= i[2];; z:= i[3];;| + !gapprompt@gap>| !gapinput@f:= 3*(x+2)^3+y;;| + !gapprompt@gap>| !gapinput@g:= x+y+z;;| + !gapprompt@gap>| !gapinput@I:= Ideal( R, [f,g] );;| + !gapprompt@gap>| !gapinput@M := SingularInterface( "syz", [ I ], "module" );;| + !gapprompt@gap>| !gapinput@GeneratorsOfLeftOperatorAdditiveGroup( M );| + [ [ -x-y-z, 3*x^3+18*x^2+36*x+y+24 ] ] + !gapprompt@gap>| !gapinput@SingularInterface( "resultant", [ f, g, z ], "poly");| + 3*x^3+18*x^2+36*x+y+24 +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{SingularType}} +\logpage{[ 1, 3, 9 ]}\nobreak +\hyperdef{L}{X79B84D5C7AC98756}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularType({\mdseries\slshape obj})\index{SingularType@\texttt{SingularType}} +\label{SingularType} +}\hfill{\scriptsize (function)}}\\ + + + to be written } + + } + + +\section{\textcolor{Chapter }{Interaction with \textsf{Singular} at low level}}\label{InteractionLow} +\logpage{[ 1, 4, 0 ]} +\hyperdef{L}{X874F7C2F7CF4192E}{} +{ + + +\subsection{\textcolor{Chapter }{SingularCommand}} +\logpage{[ 1, 4, 1 ]}\nobreak +\hyperdef{L}{X85EEFDDE8111A67B}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularCommand({\mdseries\slshape precommand, command})\index{SingularCommand@\texttt{SingularCommand}} +\label{SingularCommand} +}\hfill{\scriptsize (function)}}\\ + + + to be written } + + + +\subsection{\textcolor{Chapter }{GapInterface}} +\logpage{[ 1, 4, 2 ]}\nobreak +\hyperdef{L}{X7B8471948055DD90}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GapInterface({\mdseries\slshape func, arg, out})\index{GapInterface@\texttt{GapInterface}} +\label{GapInterface} +}\hfill{\scriptsize (function)}}\\ + + + to be written } + + } + + +\section{\textcolor{Chapter }{Other mathematical functions of the package}}\label{Other} +\logpage{[ 1, 5, 0 ]} +\hyperdef{L}{X82726C947AFEC357}{} +{ + + +\subsection{\textcolor{Chapter }{GroebnerBasis}} +\logpage{[ 1, 5, 1 ]}\nobreak +\hyperdef{L}{X7A43611E876B7560}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GroebnerBasis({\mdseries\slshape I})\index{GroebnerBasis@\texttt{GroebnerBasis}} +\label{GroebnerBasis} +}\hfill{\scriptsize (operation)}}\\ + + + Here \mbox{\texttt{\mdseries\slshape I}} is an ideal of a polynomial ring. This function computes a Groebner basis of \mbox{\texttt{\mdseries\slshape I}} (that will be returned as a list of polynomials). For this function it is \emph{not} necessary to set the base\texttt{\symbol{45}}ring with \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). + + As term ordering, \textsf{Singular} will use the value of \texttt{TermOrdering} (\ref{TermOrdering}) of the polynomial ring containing \mbox{\texttt{\mdseries\slshape I}}. Again, if this value is not set, then the degree reverse lexicographical +ordering (\mbox{\texttt{\mdseries\slshape "dp"}}) will be used. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@x := R.1;; y := R.2;; z := R.3;;| + !gapprompt@gap>| !gapinput@r:= [ x*y*z -x^2*z, x^2*y*z-x*y^2*z-x*y*z^2, x*y-x*z-y*z ];;| + !gapprompt@gap>| !gapinput@I:= Ideal( R, r );| + <two-sided ideal in Rationals[x,y,z], (3 generators)> + !gapprompt@gap>| !gapinput@GroebnerBasis( I );| + [ x*y-x*z-y*z, x^2*z-x*z^2-y*z^2, x*z^3+y*z^3, -x*z^3+y^2*z^2-y*z^3 ] +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{SINGULARGBASIS}} +\logpage{[ 1, 5, 2 ]}\nobreak +\hyperdef{L}{X7A594BFA7B521F98}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SINGULARGBASIS\index{SINGULARGBASIS@\texttt{SINGULARGBASIS}} +\label{SINGULARGBASIS} +}\hfill{\scriptsize (global variable)}}\\ + + + This variable is a record containing the component \mbox{\texttt{\mdseries\slshape GroebnerBasis}}. When the variable SINGULARGBASIS is assigned to the \textsf{GAP} global variable \mbox{\texttt{\mdseries\slshape GBASIS}}, then the computations of Groebner bases via \textsf{GAP}'s internal function for that, \texttt{GroebnerBasis} (\textbf{Reference: GroebnerBasis}), are done by \textsf{Singular}. + + \textsf{Singular} claims that it ``features one of the fastest and most general implementations of various +algorithms for computing Groebner bases''. The \textsf{GAP}'s internal function claims to be ``a +na\texttt{\symbol{123}}\texttt{\symbol{92}}"\texttt{\symbol{92}}i\texttt{\symbol{125}}ve +implementation of Buchberger's algorithm (which is mainly intended as a +teaching tool): it might not be sufficient for serious problems.'' + + (Note in the following example that the Groebner bases calculated by the \textsf{GAP} internal function are in general not reduced; for reduced bases see the \textsf{GAP} function \texttt{ReducedGroebnerBasis} (\textbf{Reference: ReducedGroebnerBasis}).) +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, 3 );;| + !gapprompt@gap>| !gapinput@i:= IndeterminatesOfPolynomialRing( R );;| + !gapprompt@gap>| !gapinput@pols:= [i[1]+i[2]+i[3], i[1]*i[2]+i[1]*i[3]+i[2]*i[3], i[1]*i[2]*i[3]];;| + !gapprompt@gap>| !gapinput@o:= MonomialLexOrdering();;| + !gapprompt@gap>| !gapinput@GBASIS:= GAPGBASIS;;| + !gapprompt@gap>| !gapinput@GroebnerBasis( pols, o ); # This is the internal GAP method.| + [ x+y+z, x*y+x*z+y*z, x*y*z, -y^2-y*z-z^2, z^3 ] + !gapprompt@gap>| !gapinput@GBASIS:= SINGULARGBASIS;;| + !gapprompt@gap>| !gapinput@GroebnerBasis( pols, o ); # This uses Singular via the interface.| + [ z^3, y^2+y*z+z^2, x+y+z ] +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{HasTrivialGroebnerBasis}} +\logpage{[ 1, 5, 3 ]}\nobreak +\hyperdef{L}{X83668E317A047D24}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{HasTrivialGroebnerBasis({\mdseries\slshape I})\index{HasTrivialGroebnerBasis@\texttt{HasTrivialGroebnerBasis}} +\label{HasTrivialGroebnerBasis} +}\hfill{\scriptsize (function)}}\\ + + + The function \mbox{\texttt{\mdseries\slshape HasTrivialGroebnerBasis}} returns \mbox{\texttt{\mdseries\slshape true}} if the Groebner basis of the ideal \mbox{\texttt{\mdseries\slshape I}} is trivial, false otherwise. This function can be used if it is not necessary +to know the Groebner basis of an ideal, but it suffices to know only whether +it is trivial or not. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@x:= Indeterminate( Rationals, "x" : old );;| + !gapprompt@gap>| !gapinput@y:= Indeterminate( Rationals, "y", [ x ] : old );;| + !gapprompt@gap>| !gapinput@z:= Indeterminate( Rationals, "z", [ x, y ] : old );;| + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, [ x, y, z] );;| + !gapprompt@gap>| !gapinput@f:= (x*y-z)*(x*y*z+y^2*z+x^2*z);;| + !gapprompt@gap>| !gapinput@g:= (x*y-z)*(x*y*z^2+x*y^2*z+x^2*y*z);;| + !gapprompt@gap>| !gapinput@I:= Ideal( R, [f,g] );;| + !gapprompt@gap>| !gapinput@HasTrivialGroebnerBasis( I );| + false +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{GcdUsingSingular (for polynomials)}} +\logpage{[ 1, 5, 4 ]}\nobreak +\hyperdef{L}{X877960128076E656}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GcdUsingSingular({\mdseries\slshape pol{\textunderscore}1, pol{\textunderscore}2, ..., pol{\textunderscore}n})\index{GcdUsingSingular@\texttt{GcdUsingSingular}!for polynomials} +\label{GcdUsingSingular:for polynomials} +}\hfill{\scriptsize (function)}}\\ +\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GcdUsingSingular({\mdseries\slshape [pol{\textunderscore}1, pol{\textunderscore}2, ..., pol{\textunderscore}n]})\index{GcdUsingSingular@\texttt{GcdUsingSingular}!for a list of polynomials} +\label{GcdUsingSingular:for a list of polynomials} +}\hfill{\scriptsize (function)}}\\ + + + The arguments of this function are (possibly multivariate) polynomials +separated by commas, or it is a list of polynomials. This function returns the +greatest common divisor of these polynomials. For this function it is \emph{necessary} for the polynomials to lie in the base\texttt{\symbol{45}}ring, as set by \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| + !gapprompt@gap>| !gapinput@i:= IndeterminatesOfPolynomialRing(R);;| + !gapprompt@gap>| !gapinput@x:= i[1];; y:= i[2];; z:= i[3];;| + !gapprompt@gap>| !gapinput@f:= (x*y-z)*(x*y*z+y^2*z+x^2*z);| + x^3*y*z+x^2*y^2*z+x*y^3*z-x^2*z^2-x*y*z^2-y^2*z^2 + !gapprompt@gap>| !gapinput@g:= (x*y-z)*(x*y*z^2+x*y^2*z+x^2*y*z);| + x^3*y^2*z+x^2*y^3*z+x^2*y^2*z^2-x^2*y*z^2-x*y^2*z^2-x*y*z^3 + !gapprompt@gap>| !gapinput@GcdUsingSingular( f, g );| + -x*y*z+z^2 +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{FactorsUsingSingularNC}} +\logpage{[ 1, 5, 5 ]}\nobreak +\hyperdef{L}{X84AC005C837CE13C}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FactorsUsingSingularNC({\mdseries\slshape f})\index{FactorsUsingSingularNC@\texttt{FactorsUsingSingularNC}} +\label{FactorsUsingSingularNC} +}\hfill{\scriptsize (function)}}\\ + + + Here \mbox{\texttt{\mdseries\slshape f}} is a (possibly multivariate) polynomial. This function returns the +factorization of \mbox{\texttt{\mdseries\slshape f}} into irreducible factors. The first element in the output is a constant +coefficient, and the others may be monic (with respect to the term ordering) +polynomials, as returned by \textsf{Singular}. For this function it is \emph{necessary} that \mbox{\texttt{\mdseries\slshape f}} lies in the base\texttt{\symbol{45}}ring, as set by \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). + + The function does not check that the product of these factors gives \mbox{\texttt{\mdseries\slshape f}} (for that use \texttt{FactorsUsingSingular} (\ref{FactorsUsingSingular})): \textsf{Singular} version 2\texttt{\symbol{45}}0\texttt{\symbol{45}}3 contains a bug so that the \textsf{Singular} function \mbox{\texttt{\mdseries\slshape factorize}} may give wrong results (therefore \textsf{Singular} version at least 2\texttt{\symbol{45}}0\texttt{\symbol{45}}4 is recommended). +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y","z"] : old );;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| + !gapprompt@gap>| !gapinput@i:= IndeterminatesOfPolynomialRing( R );;| + !gapprompt@gap>| !gapinput@x:= i[1];; y:= i[2];; z:= i[3];;| + !gapprompt@gap>| !gapinput@f:= (x*y-z)*(3*x*y*z+4*y^2*z+5*x^2*z);| + 5*x^3*y*z+3*x^2*y^2*z+4*x*y^3*z-5*x^2*z^2-3*x*y*z^2-4*y^2*z^2 + !gapprompt@gap>| !gapinput@FactorsUsingSingularNC( f );| + [ 1, -5*x^2-3*x*y-4*y^2, -x*y+z, z ] + !gapprompt@gap>| !gapinput@f:= (x*y-z)*(5/3*x*y*z+4*y^2*z+6*x^2*z);| + 6*x^3*y*z+5/3*x^2*y^2*z+4*x*y^3*z-6*x^2*z^2-5/3*x*y*z^2-4*y^2*z^2 + !gapprompt@gap>| !gapinput@FactorsUsingSingularNC( f );| + [ 1/3, -18*x^2-5*x*y-12*y^2, -x*y+z, z ] +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{FactorsUsingSingular}} +\logpage{[ 1, 5, 6 ]}\nobreak +\hyperdef{L}{X87A0E69B81E52AA2}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FactorsUsingSingular({\mdseries\slshape f})\index{FactorsUsingSingular@\texttt{FactorsUsingSingular}} +\label{FactorsUsingSingular} +}\hfill{\scriptsize (function)}}\\ + + + This does the same as \texttt{FactorsUsingSingularNC} (\ref{FactorsUsingSingularNC}), except that on the \textsf{GAP} level it is checked that the product of these factors gives \mbox{\texttt{\mdseries\slshape f}}. Again it is \emph{necessary} that \mbox{\texttt{\mdseries\slshape f}} lies in the base\texttt{\symbol{45}}ring, as set by \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( Rationals, ["x","y"] : old );;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| + !gapprompt@gap>| !gapinput@x := R.1;; y := R.2;;| + !gapprompt@gap>| !gapinput@FactorsUsingSingular( x^2 + y^2 );| + [ 1, x^2+y^2 ] + !gapprompt@gap>| !gapinput@R:= PolynomialRing( GaussianRationals, ["x","y"] : old);;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| + !gapprompt@gap>| !gapinput@x := R.1;; y := R.2;;| + !gapprompt@gap>| !gapinput@FactorsUsingSingular( x^2 + y^2 );| + [ 1, x+E(4)*y, x-E(4)*y ] +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{GeneratorsOfInvariantRing}} +\logpage{[ 1, 5, 7 ]}\nobreak +\hyperdef{L}{X7EAC34C984599470}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GeneratorsOfInvariantRing({\mdseries\slshape R, G})\index{GeneratorsOfInvariantRing@\texttt{GeneratorsOfInvariantRing}} +\label{GeneratorsOfInvariantRing} +}\hfill{\scriptsize (function)}}\\ + + + Here \mbox{\texttt{\mdseries\slshape R}} is a polynomial ring, and \mbox{\texttt{\mdseries\slshape G}} a finite group, which is either a matrix group or a permutation group. If \mbox{\texttt{\mdseries\slshape G}} is a matrix group, then its degree must be less than or equal to the number of +indeterminates of \mbox{\texttt{\mdseries\slshape R}}. If \mbox{\texttt{\mdseries\slshape G}} is a permutation group, then its maximal moved point must be less than or +equal to the number of indeterminates of \mbox{\texttt{\mdseries\slshape R}}. This function computes a list of generators of the invariant ring of \mbox{\texttt{\mdseries\slshape G}}, corresponding to its action on \mbox{\texttt{\mdseries\slshape R}}. This action is taken to be from the left. + + For this function it is \emph{not} necessary to set the base\texttt{\symbol{45}}ring with \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@m:=[[1,1,1],[0,1,1],[0,0,1]] * One( GF(3) );;| + !gapprompt@gap>| !gapinput@G:= Group( [m] );;| + !gapprompt@gap>| !gapinput@R:= PolynomialRing( GF(3), 3 );;| + !gapprompt@gap>| !gapinput@GeneratorsOfInvariantRing( R, G );| + [ x_3, x_1*x_3+x_2^2+x_2*x_3, x_1^3+x_1^2*x_3-x_1*x_2^2-x_1*x_2*x_3 ] +\end{Verbatim} + } + + } + + +\section{\textcolor{Chapter }{Algebraic\texttt{\symbol{45}}geometric codes functions}}\label{AlgebraicGeometricCodes} +\logpage{[ 1, 6, 0 ]} +\hyperdef{L}{X7E4CD3FF8230789C}{} +{ + This section of \textsf{GAP}'s \textsf{singular} package and the corresponding code were written by David Joyner, \href{mailto://[email protected]} {\texttt{[email protected]}}, (with help from Christoph Lossen and Marco Costantini). It has been tested +with \textsf{Singular} version 2.0.x. + + To start off, several new \textsf{Singular} commands must be loaded. The following command loads the necessary \textsf{Singular} and \textsf{GAP} commands, the packages \textsf{singular} and \textsf{GUAVA} (if not already loaded), and (re)starts \textsf{Singular}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@ReadPackage("singular", "contrib/agcode.g");;| +\end{Verbatim} + + +\subsection{\textcolor{Chapter }{AllPointsOnCurve}} +\logpage{[ 1, 6, 1 ]}\nobreak +\hyperdef{L}{X80553C51807FA705}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AllPointsOnCurve({\mdseries\slshape f, F})\index{AllPointsOnCurve@\texttt{AllPointsOnCurve}} +\label{AllPointsOnCurve} +}\hfill{\scriptsize (function)}}\\ + + + Let $F$ be a finite and prime field. The function \mbox{\texttt{\mdseries\slshape AllPointsOnCurve( f, F )}} computes a list of generators of maximal ideals representing rationals points +on a curve $X$ defined by $f(x,y)=0$. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@F:=GF(7);;| + !gapprompt@gap>| !gapinput@R2:= PolynomialRing( F, 2 );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R2, "lp" );; # --- the term ordering must be "lp"| + !gapprompt@gap>| !gapinput@indet:= IndeterminatesOfPolynomialRing(R2);;| + !gapprompt@gap>| !gapinput@x:= indet[1];; y:= indet[2];;| + !gapprompt@gap>| !gapinput@f:=x^7-y^2-x;;| + !gapprompt@gap>| !gapinput@AllPointsOnCurve(f,F);| + [ [ x_1 ], [ x_1-Z(7)^0 ], [ x_1+Z(7)^4 ], [ x_1+Z(7)^5 ], [ x_1+Z(7)^0 ], + [ x_1+Z(7) ], [ x_1+Z(7)^2 ] ] +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{AGCode}} +\logpage{[ 1, 6, 2 ]}\nobreak +\hyperdef{L}{X78E2235083D9FDCC}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AGCode({\mdseries\slshape f, G, D})\index{AGCode@\texttt{AGCode}} +\label{AGCode} +}\hfill{\scriptsize (function)}}\\ + + + Let f be a polynomial in x,y over F=GF(p) representing plane curve $X$ defined by $f(x,y)=0$, where p is a prime (prime powers are not yet supported by the underlying \textsf{Singular} function). Let G, D be disjoint rational divisors on $X$, where D is a sum of distinct points, $supp(D)={P_1, ..., P_n}$. The AG code associated to f, G, D is the F defined to be the image of the +evaluation map $f \mapsto (f(P_1),...,f(P_n))$. The function \mbox{\texttt{\mdseries\slshape AGCode}} computes a list of length three, [G, n, k], where G is a generator matrix of +the AG code C, n is its length, and k is its dimension. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@F:=GF(7);;| + !gapprompt@gap>| !gapinput@R2:= PolynomialRing( F, 2 );;| + !gapprompt@gap>| !gapinput@SetTermOrdering( R2, "lp" );; # --- the term ordering must be "lp"| + !gapprompt@gap>| !gapinput@SingularSetBaseRing(R2);| + !gapprompt@gap>| !gapinput@indet:= IndeterminatesOfPolynomialRing(R2);;| + !gapprompt@gap>| !gapinput@x:= indet[1];; y:= indet[2];;| + !gapprompt@gap>| !gapinput@f:=x^7-y^2-x;;| + !gapprompt@gap>| !gapinput@G:=[2,2,0,0,0,0,0]; D:=[4..8];| + [ 2, 2, 0, 0, 0, 0, 0 ] + [ 4 .. 8 ] + !gapprompt@gap>| !gapinput@agc:=AGCode(f,G,D);| + [ [ [ Z(7)^3, Z(7), 0*Z(7), Z(7)^4, Z(7)^5 ], + [ 0*Z(7), Z(7)^4, Z(7)^0, Z(7)^5, Z(7)^3 ], + [ 0*Z(7), 0*Z(7), Z(7)^3, Z(7), Z(7)^2 ] ], 5, 3 ] +\end{Verbatim} + This generator matrix can be fed into the \textsf{GUAVA} command \texttt{GeneratorMatCode} (\textbf{GUAVA: GeneratorMatCode}) to create a linear code in \textsf{GAP}, which in turn can be fed into the \textsf{GUAVA} command \texttt{MinimumDistance} (\textbf{GUAVA: MinimumDistance}) to compute the minimum distance of the code. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@ag_mat:=agc[1];;| + !gapprompt@gap>| !gapinput@C := GeneratorMatCode( ag_mat, GF(7) );| + a linear [5,3,1..3]2 code defined by generator matrix over GF(7) + !gapprompt@gap>| !gapinput@MinimumDistance(C);| + 3 +\end{Verbatim} + } + + } + + +\section{\textcolor{Chapter }{Troubleshooting and technical stuff}}\label{Troubleshooting} +\logpage{[ 1, 7, 0 ]} +\hyperdef{L}{X8562222580239DA6}{} +{ + +\subsection{\textcolor{Chapter }{Supported platforms and underlying \textsf{GAP} functions}}\logpage{[ 1, 7, 1 ]} +\hyperdef{L}{X7C1724F780B84A6C}{} +{ + \label{platforms} This package has been developed mainly on a Linux platform, with \textsf{GAP} version 4.4, and \textsf{Singular} version 2\texttt{\symbol{45}}0\texttt{\symbol{45}}4. A reasonable work has +been done to ensure backward compatibility with previous versions of \textsf{GAP} 4, but some features may be missing. This package has been tested also with +some other versions of Singular, including +2\texttt{\symbol{45}}0\texttt{\symbol{45}}3, +2\texttt{\symbol{45}}0\texttt{\symbol{45}}5, and +2\texttt{\symbol{45}}0\texttt{\symbol{45}}6, and on other Unix systems. It has +been tested also on Windows, but it is reported to be slower that on Linux. + + There is an extension of \textsf{Singular}, named \textsf{Plural}, which deals with certain noncommutative polynomial rings; see the \textsf{Singular} documentation, section ``7. PLURAL''. Currently, \textsf{GAP} doesn't support these noncommutative polynomial rings. The user of the \textsf{Singular} may use the features of \textsf{Plural} by calling the \textsf{Singular} function \mbox{\texttt{\mdseries\slshape ncalgebra}} via \mbox{\texttt{\mdseries\slshape SingularInterface}}. In this case, extreme care is needed, because on the \textsf{GAP} side the polynomial will still be commutative. + + For the low\texttt{\symbol{45}}level communication with \textsf{Singular}, the interface relies on the \textsf{GAP} function \texttt{InputOutputLocalProcess} (\textbf{Reference: InputOutputLocalProcess}), and this function is available only in \textsf{GAP} 4.2 (or newer) on a Unix environment or in \textsf{GAP} 4.4 (or newer) on Windows; auto\texttt{\symbol{45}}detection is used. In this +case, \textsf{GAP} interacts with a unique continuous session of \textsf{Singular}. + + In the case that the \textsf{GAP} function \mbox{\texttt{\mdseries\slshape InputOutputLocalProcess}} is not available, then the singular interface will use the \textsf{GAP} function \texttt{Process} (\textbf{Reference: Process}). In this case only a limited subset of the functionality of the interface are +available: for example \texttt{StartSingular} (\ref{StartSingular}) and \texttt{GeneratorsOfInvariantRing} (\ref{GeneratorsOfInvariantRing}) are not available, but \texttt{GroebnerBasis} (\ref{GroebnerBasis}) is; \texttt{SingularInterface} (\ref{SingularInterface}) supports less data types. In this case, for each function call, a new session +of \textsf{Singular} is started and quit. } + + +\subsection{\textcolor{Chapter }{How different versions of \textsf{GAP} display polynomial rings and polynomials}}\logpage{[ 1, 7, 2 ]} +\hyperdef{L}{X82CDC01B7AABF5F5}{} +{ + The way in which \textsf{GAP} displays polynomials has changed passing from version 4.3 to 4.4 and the way +in which \textsf{GAP} displays polynomial rings has changed passing from version 4.4 to 4.5. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@# GAP 4.3 or older| + !gapprompt@gap>| !gapinput@R := PolynomialRing( Rationals, [ "x" ] : new );| + PolynomialRing(..., [ x ]) + !gapprompt@gap>| !gapinput@x := IndeterminatesOfPolynomialRing( R )[1];;| + !gapprompt@gap>| !gapinput@x^2 + x;| + x+x^2 +\end{Verbatim} + +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@# GAP 4.4| + !gapprompt@gap>| !gapinput@R := PolynomialRing( Rationals, [ "x" ] : new );| + PolynomialRing(..., [ x ]) + !gapprompt@gap>| !gapinput@x := IndeterminatesOfPolynomialRing( R )[1];;| + !gapprompt@gap>| !gapinput@x^2 + x;| + x^2+x +\end{Verbatim} + +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@# GAP 4.5 or newer| + !gapprompt@gap>| !gapinput@R := PolynomialRing( Rationals, [ "x" ] : new );| + Rationals[x] + !gapprompt@gap>| !gapinput@x := IndeterminatesOfPolynomialRing( R )[1];;| + !gapprompt@gap>| !gapinput@x^2 + x;| + x^2+x +\end{Verbatim} + The examples in this manual use the way of displaying of the newest \textsf{GAP}. } + + +\subsection{\textcolor{Chapter }{Test file}}\logpage{[ 1, 7, 3 ]} +\hyperdef{L}{X7DE6DC637A7FAC93}{} +{ + The following performs a test of the package functionality using a test file (\textbf{Reference: Test Files}). +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@fn := Filename( DirectoriesPackageLibrary( "singular", "tst" ), "testall.tst" );;| + !gapprompt@gap>| !gapinput@Test( fn );| + true +\end{Verbatim} + } + + +\subsection{\textcolor{Chapter }{Common problems}}\logpage{[ 1, 7, 4 ]} +\hyperdef{L}{X82260C8E82090E87}{} +{ + \label{common} A common error is forgetting to use \texttt{SingularSetBaseRing} (\ref{SingularSetBaseRing}). In the next example, \mbox{\texttt{\mdseries\slshape SingularInterface}} works only after having used \mbox{\texttt{\mdseries\slshape SingularSetBaseRing}}. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@a:=Indeterminate( Rationals );;| + !gapprompt@gap>| !gapinput@F:=AlgebraicExtension( Rationals, a^5+4*a+1 );;| + !gapprompt@gap>| !gapinput@R:=PolynomialRing( F, ["x","y"] : old );;| + !gapprompt@gap>| !gapinput@x := R.1;; y := R.2;;| + !gapprompt@gap>| !gapinput@SingularInterface( "lead", [x^3*y+x*y+y^2], "poly" );| + Error, sorry: Singular, or the interface to Singular, or the current + SingularBaseRing, do not support the object x^3*y+x*y+y^2. + Did you remember to use 'SingularSetBaseRing' ? + [...] + !gapbrkprompt@brk>| !gapinput@quit;| + !gapprompt@gap>| !gapinput@SingularSetBaseRing( R );| + !gapprompt@gap>| !gapinput@SingularInterface( "lead", [x^3*y+x*y+y^2], "poly" );| + x^3*y +\end{Verbatim} + A corresponding problem would happen if the user works directly with \textsf{Singular} and forgets to define the base\texttt{\symbol{45}}ring at first. + + As explained in the \textsf{GAP} documentation (\textbf{Reference: Polynomials and Rational Functions}), given a ring \mbox{\texttt{\mdseries\slshape R}}, \textsf{GAP} does not consider \mbox{\texttt{\mdseries\slshape R}} as a subset of a polynomial ring over \mbox{\texttt{\mdseries\slshape R}}: for example the zero of \mbox{\texttt{\mdseries\slshape R}} ($0$) and the zero of the polynomial ring ($0x^0$) are different objects. \textsf{GAP} prints these different objects in the same way, and this fact may be +misleading. This is a feature of \textsf{GAP} independent from the package \textsf{singular}, but it is important to keep it in mind, as most of the objects used by \textsf{Singular} are polynomials, or their coefficients. } + + +\subsection{\textcolor{Chapter }{Errors on the \textsf{Singular} side}}\logpage{[ 1, 7, 5 ]} +\hyperdef{L}{X7D38248D79425B28}{} +{ + Errors may occur on the \textsf{Singular} side, for instance using \texttt{SingularInterface} (\ref{SingularInterface}) if the arguments supplied are not appropriate for the called function. In +general, it is still an open problem to find a satisfactory way to handle in \textsf{GAP} the errors of this kind. + + At the moment, when an error on the \textsf{Singular} side happens, \textsf{Singular} may print an error message on the so\texttt{\symbol{45}}called ``standard +error''; this message may appear on the screen, but it is not logged by the \textsf{GAP} function \texttt{LogTo} (\textbf{Reference: LogTo}). The interface prints \mbox{\texttt{\mdseries\slshape No output from Singular}}, and then the trivial object (of the type specified as the third argument of \mbox{\texttt{\mdseries\slshape SingularInterface}}) may be returned. } + + +\subsection{\textcolor{Chapter }{Sending a report}}\logpage{[ 1, 7, 6 ]} +\hyperdef{L}{X7C8AE6BD787CD237}{} +{ + As every software, also this package may contain bugs. If you find a bug, or a +missing feature, or some other problem, or if you have comments and +suggestions, or if you need some help, you may do so via our issue tracker at \href{https://github.com/gap-packages/singular/issues} {\texttt{https://github.com/gap\texttt{\symbol{45}}packages/singular/issues}}. Please include in the report the code that causes the problem, so that we +can replicate the problem. + + If appropriate, you can set \texttt{InfoSingular} (\ref{InfoSingular}) to \mbox{\texttt{\mdseries\slshape 3}}, to see what happens between \textsf{GAP} and \textsf{Singular} (but this may give a lot of output). Note that \texttt{LogTo} (\textbf{Reference: LogTo}) does not log messages written directly on the screen by \textsf{Singular}. + + Every report about this package is welcome, however the probability that your +problem will be fixed quickly increases if you read the text ``How to Report +Bugs Effectively'', \href{https://www.chiark.greenend.org.uk/~sgtatham/bugs.html} {\texttt{https://www.chiark.greenend.org.uk/\texttt{\symbol{126}}sgtatham/bugs.html}} , and send a bug report according to this text. } + + + +\subsection{\textcolor{Chapter }{SingularReportInformation}} +\logpage{[ 1, 7, 7 ]}\nobreak +\hyperdef{L}{X78BE74C97BF4E287}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SingularReportInformation({\mdseries\slshape })\index{SingularReportInformation@\texttt{SingularReportInformation}} +\label{SingularReportInformation} +}\hfill{\scriptsize (function)}}\\ + + + The function \mbox{\texttt{\mdseries\slshape SingularReportInformation}} collects a description of the system, which should be included in any bug +report. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@SingularReportInformation();| + Pkg_Version := "4.04.15"; + Gap_Version := "4.dev"; + Gap_Architecture := "i686-pc-linux-gnu-gcc"; + Gap_BytesPerVariable := 4; + uname := "Linux 2.4.20 i686"; + Singular_Version: := 2004; + Singular_Name: := "/usr/local/Singular/2-0-4/ix86-Linux/Singular"; + + "Pkg_Version := \"4.04.15\";\nGap_Version := \"4.dev\";\nGap_Architecture := \ + \"i686-pc-linux-gnu-gcc\";\nGap_BytesPerVariable := 4;\nuname := \"Linux 2.4.2\ + 0 i686\";\nSingular_Version: := 2004;\nSingular_Name: := \"/usr/local/Singular\ + /2-0-4/ix86-Linux/Singular\";\n" +\end{Verbatim} + } + + + +\subsection{\textcolor{Chapter }{InfoSingular}} +\logpage{[ 1, 7, 8 ]}\nobreak +\hyperdef{L}{X843C50B18098609A}{} +{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{InfoSingular\index{InfoSingular@\texttt{InfoSingular}} +\label{InfoSingular} +}\hfill{\scriptsize (info class)}}\\ + + + This is the info class (\textbf{Reference: Info Functions}) used by the interface. It can be set to levels 0, 1, 2, and 3. At level 0 no +information is printed on the screen. At level 1 (default) the interface +prints a message about the \mbox{\texttt{\mdseries\slshape type{\textunderscore}output}}, when "def" is used in \mbox{\texttt{\mdseries\slshape SingularInterface}}, see the example at \texttt{SingularInterface} (\ref{SingularInterface}). At level 2, information on the activities of the interface is printed (e.g., +messages when a \textsf{Singular} session, or a Groebner basis calculation, is started or terminated). At level +3 all strings that \textsf{GAP} sends to \textsf{Singular} are printed, as well as all strings that \textsf{Singular} sends back. +\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] + !gapprompt@gap>| !gapinput@SetInfoLevel( InfoSingular, 2 );| + !gapprompt@gap>| !gapinput@G:= SymmetricGroup( 3 );;| + !gapprompt@gap>| !gapinput@R:= PolynomialRing( GF(2), 3 );;| + !gapprompt@gap>| !gapinput@GeneratorsOfInvariantRing( R, G );| + #I running SingularInterface( "invariant_ring", [ "matrix", "matrix" + ], "list" )... + #I done SingularInterface. + [ x_1+x_2+x_3, x_1*x_2+x_1*x_3+x_2*x_3, x_1*x_2*x_3 ] + !gapprompt@gap>| !gapinput@I:= Ideal( R, last );;| + !gapprompt@gap>| !gapinput@GroebnerBasis( I );| + #I running GroebnerBasis... + #I done GroebnerBasis. + [ x_1+x_2+x_3, x_2^2+x_2*x_3+x_3^2, x_3^3 ] + !gapprompt@gap>| !gapinput@SetInfoLevel( InfoSingular, 1 );| +\end{Verbatim} + } + + } + + } + + \def\indexname{Index\logpage{[ "Ind", 0, 0 ]} +\hyperdef{L}{X83A0356F839C696F}{} +} + +\cleardoublepage +\phantomsection +\addcontentsline{toc}{chapter}{Index} + + +\printindex + +\immediate\write\pagenrlog{["Ind", 0, 0], \arabic{page},} +\newpage +\immediate\write\pagenrlog{["End"], \arabic{page}];} +\immediate\closeout\pagenrlog +\end{document} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/singular-2025.08.26/doc/title.xml new/singular-2026.04.09/doc/title.xml --- old/singular-2025.08.26/doc/title.xml 2025-08-27 16:45:24.000000000 +0200 +++ new/singular-2026.04.09/doc/title.xml 2026-04-09 02:00:00.000000000 +0200 @@ -9,7 +9,7 @@ A &GAP; interface to Singular </Subtitle> <Version> - 2025.08.26 + 2026.04.09 </Version> <Author> Marco Costantini<Alt Only="LaTeX"><Br/></Alt> @@ -29,6 +29,6 @@ </Author> <Date> - 26 August 2025 + 9 April 2026 </Date> </TitlePage> \ No newline at end of file
